web-dev-qa-db-fra.com

Que sont X_train et y_train?

Je souhaite commencer à développer une application à l'aide du Machine Learning. Je veux classer le texte - spam ou non spam. J'ai 2 fichiers - spam.txt, ham.txt - qui contiennent des milliers de phrases par fichier. Si je veux utiliser un classificateur, disons LogisticRegression.

Par exemple, comme je l'ai vu sur Internet, pour s'adapter à mon modèle, je dois faire comme ceci:

`lr = LogisticRegression()
model = lr.fit(X_train, y_train)`

Voici donc ma question, quels sont en fait X_train et y_train? Comment puis-je les obtenir de mes peines? J'ai cherché sur Internet, je n'ai pas compris, voici mon dernier appel, je suis assez nouveau sur ce sujet. Je vous remercie!

7
user9886692

Selon la documentation (voir ici ):

  • X correspond à votre matrice d'entités flottantes de forme (n_samples, n_features) (aka. la matrice de conception de votre ensemble d'entraînement)
  • y est le vecteur cible flottant de la forme (n_samples,) (le vecteur d'étiquette). Dans votre cas, étiquetez 0 pourrait correspondre à un exemple de spam et 1 à un jambon

La question est maintenant de savoir comment obtenir une matrice d'entités flottantes à partir de données texte.

Un schéma commun consiste à utiliser une vectorisation tf-idf (plus à ce sujet ici ), qui est disponible en sklearn .

La vectorisation peut être chaînée à la régression logistique via l'API Pipeline de sklearn.

Voici à quoi ressemblerait le code à peu près

from itertools import chain

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression

import numpy as np

# prepare string data
with open('spam.txt', 'r') as f:
   spam = f.readlines()

with open('ham.txt', 'r') as f:
   ham = f.readlines()

text_train = list(chain(spam, ham))

# prepare labels
labels_train = np.concatenate((np.zeros(len(spam)),np.ones(len(ham))))

# build pipeline
vectorizer = TfidfVectorizer()
regressor = LogisticRegression()

pipeline = Pipeline([('vectorizer', vectorizer), ('regressor', regressor)])

# fit pipeline
pipeline.fit(text_train, labels_train)

# test predict
test = ["Is this spam or ham?"]
pipeline.predict(test) # value in [0,1] 
4
syltruong