2016-05-06 12 views
2

私は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の両方で異なるパラメータ設定で試してみましたが、精度は向上しませんでした。

私は何か間違っているか、モデルスコアを改善するために何をすべきか教えていただけますか?

ご協力いただければ幸いです。

ありがとうございます!

答えて

1

1)GridSearchCvを使用してパラメータを調整することを検討してください。 http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html

2)既存の機能を新しい機能に組み合わせるために、機能エンジニアリングを検討してください。例えば。 sklearnで提供されている多項式フィーチャ、フィーチャ選択ツール、フィーチャユニオンツールを使用します。

3)異なるモデルを試してください。すべてのモデルがすべての問題に対応するわけではありません。より単純なモデルのアンサンブルと何らかの決定関数を使用して、それらのモデルの出力を取り出して予測することを試みます。いくつかはenesembleモジュールに含まれていますが、投票分類子を使用して自分自身を作ることができます。

しかし、はるかに最善かつ最も重要なことは、データを見てください。分類子が正しく実行されなかった例を見つけます。なぜそれはひどく機能したのですか?それを読んで分類することはできますか(つまり、アルゴが分類子にそのテキストを期待するのは妥当ですか)。それが分類できれば、モデルは何を失うか。

これらはすべて次の操作の手引きになります。

+0

私のトレーニングデータセットが大きすぎるため、GridSearchCVはpartial_fitメソッドを実装していません。機能選択のために、私はトレーニングデータを事前処理して、重要でないすべての用語を削除し、またすべての単語に形を変えました。具体的には、私のモデルの精度が〜58%に止まる原因を教えてください。ありがとう! –

+1

いいえ、それは千の理由の一つかもしれないので、私はできません。 58%が達成可能な最大の問題ではないことをどのように知っていますか? 最後の段落の結果はどうでしたか?私はあなたのために問題を解決することはできません、あなたはそれを自分で行う必要があります。 – Chris

関連する問題