私はMachine Learningで自分の手を試していて、PythonベースのScikitライブラリを使っています。Scikit SGDクラシファイアでHashing Vectorizerの精度が58%で固まった
テキストの塊(1k-2k単語など)が1つ以上のカテゴリに分類される「分類」問題を解決したいと考えています。これのために私はしばらくの間、シキットを勉強してきました。私のデータが範囲200〜300万であること、私は以下のようにコード化され、partial_fit学習技術を使用して、目的のためにHashingVectorizerでSGDClassfierを使用していたとして
は:
import pandas as pd
from sklearn.linear_model import SGDClassifier
from sklearn.feature_extraction.text import HashingVectorizer
import numpy as np
from sklearn.externals import joblib
import copy
data = pd.read_csv(
open('train_shuffled.csv'), error_bad_lines=False)
data_all = copy.deepcopy(data)
target = data['category']
del data['category']
cls = np.unique(target)
model = SGDClassifier(loss='log', verbose=1)
vect = HashingVectorizer(stop_words='english', strip_accents='unicode', analyzer='word')
loop = len(target)/100
for passes in range(0, 5):
count, r = 0, 0
print("Pass " + str(passes + 1))
for q in range(0, loop):
d = nltk.word_tokenize(data['content'][r:r + 100])
d = vect.fit_transform(d)
t = np.array(target[r:r + 100])
model.partial_fit(d, t, cls)
r = r + 100
data = copy.deepcopy(data_all)
data = data.iloc[np.random.permutation(len(data))]
data = data.reset_index(drop=True)
target = data['category']
del data['category']
print(model)
joblib.dump(model, 'Model.pkl')
joblib.dump(vect, 'Vectorizer.pkl')
学習プロセスを行っている間、私はで読みます各反復でトレーニングデータを手動でランダム化すると、より良いモデルになるというスタック上の答えです。
デフォルトパラメータでClassifersとVectorizerを使用すると、〜58.4%の精度スコアを得ました。それ以来、私はVectorizerとClassifierの両方で異なるパラメータ設定で試してみましたが、精度は向上しませんでした。
私は何か間違っているか、モデルスコアを改善するために何をすべきか教えていただけますか?
ご協力いただければ幸いです。
ありがとうございます!
私のトレーニングデータセットが大きすぎるため、GridSearchCVはpartial_fitメソッドを実装していません。機能選択のために、私はトレーニングデータを事前処理して、重要でないすべての用語を削除し、またすべての単語に形を変えました。具体的には、私のモデルの精度が〜58%に止まる原因を教えてください。ありがとう! –
いいえ、それは千の理由の一つかもしれないので、私はできません。 58%が達成可能な最大の問題ではないことをどのように知っていますか? 最後の段落の結果はどうでしたか?私はあなたのために問題を解決することはできません、あなたはそれを自分で行う必要があります。 – Chris