機械学習を使用したアプリケーションの開発を開始したい。テキストを分類したい-スパムかどうか。 2つのファイルがあります-spam.txt
、ham.txt
-各ファイルに数千の文が含まれています。分類子を使用したい場合は、LogisticRegression
としましょう。
たとえば、インターネットで見たように、自分のモデルに合わせるには、次のようにする必要があります。
`lr = LogisticRegression()
model = lr.fit(X_train, y_train)`
だから私の質問が来ます、実際には何ですかX_train
およびy_train
?どうすれば自分の文章からそれらを取得できますか?私はインターネットで検索しましたが、理解できませんでした。これが最後の電話です。このトピックはかなり新しいものです。ありがとうございました!
ドキュメントによると( ここ を参照):
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]