web-dev-qa-db-ja.com

X_trainおよびy_trainとは何ですか?

機械学習を使用したアプリケーションの開発を開始したい。テキストを分類したい-スパムかどうか。 2つのファイルがあります-spam.txtham.txt-各ファイルに数千の文が含まれています。分類子を使用したい場合は、LogisticRegressionとしましょう。

たとえば、インターネットで見たように、自分のモデルに合わせるには、次のようにする必要があります。

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

だから私の質問が来ます、実際には何ですかX_trainおよびy_train?どうすれば自分の文章からそれらを取得できますか?私はインターネットで検索しましたが、理解できませんでした。これが最後の電話です。このトピックはかなり新しいものです。ありがとうございました!

7
user9886692

ドキュメントによると( ここ を参照):

  • Xは、形状のフロートフィーチャマトリックスに対応します(n_samples, n_features)(別名、トレーニングセットの設計行列
  • yは、形状のfloatターゲットベクトルです(n_samples,)ラベルベクトル)。あなたのケースでは、ラベル0はスパムの例に対応し、1ハムに

ここでの問題は、テキストデータからフロートフィーチャマトリックスを取得する方法についてです。

一般的なスキームは、tf-idf vectorisation(これについては here )を使用することです。これは sklearn

ベクトル化は、Pipelineの-​​ sklearn APIを介してロジスティック回帰と連鎖させることができます。

これは、コードが大まかにどのように見えるかです

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