[PYTHON] Recommandation de manga par machine learning Partie 1 Commençons par diviser sans penser à rien

introduction

Grâce à Elastic Search en tant que moteur de recherche, il est devenu relativement facile d'extraire des informations professionnelles à partir de mots de recherche.

Elastic Search facilite la recommandation de mots-clés en fonction du genre de travail que vous lisez et les informations d'étiquettes.

Cependant, dans mon cas, c'est un site de manga, donc il y a aussi des éléments tels que les goûts et les goûts des images, donc quand j'avais de l'argent, le contenu était secondaire, et j'achetais généralement des vestes.

Il s'agit donc d'une tentative de compléter d'une manière ou d'une autre ces pièces étrangement savoureuses.

Pour l'essayer, je comprends que vous pouvez prendre des mangas en tant qu'informations d'image et les classer d'une manière ou d'une autre (clustering). Alors que dois-je faire?

** Je ne sais pas si cela correspond ou non, donc si je n'ai pas de tsukkomi autour, **

Pour le moment, je m'intéressais à étudier l'histoire de l'intelligence artificielle et je me suis un peu rongé, donc si vous en tenez compte, ** Ne serait-il pas possible d'exprimer l'image avec ce qu'on appelle une quantité de caractéristiques et de la regrouper en l'utilisant? ** ** Je pense que je partirai de la reconnaissance.

Trouvez un départ

Lorsque j'ai posé la question à Google Sensei, il utilise souvent une fonctionnalité locale appelée ** SURF ** dans la reconnaissance des formes d'image. Il s'agit de générer une quantité de caractéristiques en prenant un point invariant même si la luminosité de l'image est modifiée, agrandie / réduite ou pivotée. ** Quantité d'objets locaux ** car plusieurs d'entre elles peuvent être prises Il semble qu'une image n'en soit pas une.

Utilisons d'abord ceci, et lors du regroupement de ses fonctionnalités, mettons rapidement dans une classification par k-means qui semble être souvent utilisée à nouveau.

Pour être honnête, il y a beaucoup de mots qui n'ont pas de sens, mais je pense que vous pouvez trouver comment faire cela si nécessaire.

Environnement

Masu est l'environnement OS:Mac Langue: Python2.7 Environnement de développement: PyCharm Community Editioin 2017.1 Bibliothèque d'apprentissage automatique: scikit-learn Bibliothèque de traitement d'image: mahotas Bibliothèque de calculs numériques: NumPy

La raison de cet environnement est que c'était simplement le mécanisme que j'ai appris dans le programme en ligne. Peut-être que nous le changerons au besoin à l'avenir.

Quand j'utilisais un Mac, Python 2.7 était fait par défaut, donc c'est la même chose.

couler

Phase d'apprentissage

  1. Lisez l'image à partir de l'URL décrite dans le fichier texte (100-2000 cas)
  2. Calcul des caractéristiques locales par SURF (mahotas)
  3. Utilisez-les comme données non supervisées (quantité de fonctionnalités de base) après la mise en cluster par k-means (scikit-learn)

Phase de classification

  1. Lisez 100 données séparément
  2. Calculer SURF
  3. Exécutez la mise en cluster (10 classifications et 25 classifications en premier) à partir du nombre de fonctionnalités de base mentionné précédemment.
  4. Regardez les résultats.

Code

Phase d'apprentissage


# coding:utf-8
import numpy as np
from sklearn import cluster
from sklearn.externals import joblib
import mahotas as mh
from mahotas import surf
from datetime import datetime
import cStringIO
import urllib

datetime_format = "%Y/%m/%d %H:%M:%S"

#Paramètres
feature_category_num = 512


#Apportez l'URL de l'image à partir du fichier texte.
list = []

list_file = open("list.txt")

for l in list_file:
    list.append(l.rstrip())

list_file.close()

#Traitement d'image
base = []

j=0

for url in list:
    file = cStringIO.StringIO(urllib.urlopen(url).read())
    im = mh.imread(file, as_grey=True)
    im = im.astype(np.uint8)
    base.append(surf.surf(im))

concatenated = np.concatenate(base)

del base

#Calcul de la quantité de fonction de base

km = cluster.KMeans(feature_category_num)
km.fit(concatenated)

#Stockage des fonctionnalités de base
joblib.dump(km, "km-cluster-surf-.pk1")

Phase de classification


# coding:utf-8
import numpy as np
from sklearn import cluster
from sklearn.externals import joblib
import mahotas as mh
from mahotas import surf

import cStringIO
import urllib

#Paramètres
feature_category_num = 512
picture_category_num = 25

#Chargement du modèle formé

km = joblib.load("km-cluster-surf.pk1")


#Apportez l'URL de l'image à partir du fichier texte.
list = []

list_file = open("list2.txt")

for l in list_file:
    list.append(l.rstrip())

list_file.close()

#Traitement d'image
base = []

for url in list:

    title = file[1]
    file = cStringIO.StringIO(urllib.urlopen(url).read())

    im = mh.imread(file, as_grey=True)
    im = im.astype(np.uint8)

    base.append(surf.surf(im))

concatenated = np.concatenate(base)

features = []

#Commencez à classer les images à partir des fonctionnalités de base

for d in base:
    c = km.predict(d)
    features.append(np.array([np.sum(c==ci) for ci in range(feature_category_num)]))

features=np.array(features)


km = cluster.KMeans(n_clusters=picture_category_num,verbose=1)
km.fit(features)

#Crachez le résultat

list = np.array(list)

for i in range(picture_category_num):
    print('Image category{0}'.format(i))
    challenge = list[km.labels_ == i]
    for c in list:
        print(c)

résultat

A partir de la conclusion, le classement était terminé.

Mais je n'ai pas pu le trouver.

Il y a probablement plusieurs raisons, mais j'aimerais y réfléchir la prochaine fois.

Recommended Posts

Recommandation de manga par machine learning Partie 1 Commençons par diviser sans penser à rien
Essayez le machine learning à la légère avec Kaggle
Essayez l'apprentissage en profondeur avec TensorFlow Partie 2
SVM essayant l'apprentissage automatique avec scikit-learn
[Apprentissage automatique] Essayez d'exécuter Spark MLlib avec Python et faites des recommandations
Prédire la demande de puissance avec l'apprentissage automatique, partie 2
Apprentissage automatique à partir de Python Personal Memorandum Part2
Apprentissage automatique à partir de Python Personal Memorandum Part1
Machine learning facile avec AutoAI (partie 4) Jupyter Notebook
Essayez de prédire le taux de change (FX) avec un apprentissage automatique non approfondi
Bilan du premier défi du machine learning avec Keras
[Apprentissage automatique] Démarrez Spark avec iPython Notebook et essayez MLlib
Apprentissage automatique pour apprendre avec Nogisaka 46 et Keyakizaka 46 Partie 1 Introduction
Ingénierie des fonctionnalités pour l'apprentissage automatique à partir de la partie 3 Échelle collaborative de Google
L'apprentissage automatique appris avec Pokemon
Essayez l'apprentissage en profondeur avec TensorFlow
Apprentissage automatique avec Python! Préparation
Essayez le Deep Learning avec FPGA
Démineur d'apprentissage automatique avec PyTorch
Commencer avec l'apprentissage automatique Python
Apprentissage automatique avec python sans perdre aux variables catégorielles (conversion de variable factice)
Essayez le Deep Learning avec les concombres FPGA-Select
Renforcer l'apprentissage 13 Essayez Mountain_car avec ChainerRL.
[Apprentissage automatique] Étudions l'arbre de décision
[Tutoriel PyTorch ⑤] Apprentissage de PyTorch avec des exemples (Partie 2)
J'ai essayé l'apprentissage automatique avec liblinear
Apprentissage automatique par python (1) Classification générale
Les débutants en apprentissage automatique essaient la régression linéaire
[Apprentissage automatique] Essayez d'étudier une forêt aléatoire
[Tutoriel PyTorch ⑤] Apprentissage de PyTorch avec des exemples (Partie 1)
Essayez l'apprentissage de la représentation commune avec le chainer
Machine learning d'inspiration quantique avec des réseaux de tenseurs
Démarrez avec l'apprentissage automatique avec SageMaker
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
[Python] [Apprentissage automatique] Les débutants sans aucune connaissance essaient l'apprentissage automatique pour le moment