5

私は、gre、gpa、ranksなどの予測変数を使ってアドミット変数を予測しようとしています。しかし、予測精度は非常に低い(0.66)。データセットは以下のとおりです。 https://gist.github.com/abyalias/3de80ab7fb93dcecc565cee21bd9501aScikit Pythonのロジスティック回帰のモデル精度を上げる方法は?

以下のコードを見つけてください:

In[73]: data.head(20) 
Out[73]: 

    admit gre gpa rank_2 rank_3 rank_4 
0  0 380 3.61  0.0  1.0  0.0 
1  1 660 3.67  0.0  1.0  0.0 
2  1 800 4.00  0.0  0.0  0.0 
3  1 640 3.19  0.0  0.0  1.0 
4  0 520 2.93  0.0  0.0  1.0 
5  1 760 3.00  1.0  0.0  0.0 
6  1 560 2.98  0.0  0.0  0.0 

y = data['admit'] 
x = data[data.columns[1:]] 

from sklearn.cross_validation import train_test_split 
xtrain,xtest,ytrain,ytest = train_test_split(x,y,random_state=2) 

ytrain=np.ravel(ytrain) 

#modelling 
clf = LogisticRegression(penalty='l2') 
clf.fit(xtrain,ytrain) 
ypred_train = clf.predict(xtrain) 
ypred_test = clf.predict(xtest) 

In[38]: #checking the classification accuracy 
accuracy_score(ytrain,ypred_train) 
Out[38]: 0.70333333333333337 
In[39]: accuracy_score(ytest,ypred_test) 
Out[39]: 0.66000000000000003 

In[78]: #confusion metrix... 
from sklearn.metrics import confusion_matrix 
confusion_matrix(ytest,ypred) 

Out[78]: 
array([[62, 1], 
     [33, 4]]) 

モデルの精度を高めるためにpredicting.Howものが間違っていますか?

+1

ロジスティック回帰のCパラメータを調整することから始めることができます。 SVMやツリーのような異なる分類方法を試すこともできます。 – geompalik

+2

テストセットの精度を最適化しようとしないでください。トレーニングセットで最適化し、テストセットをメソッドのオブジェクト評価として使用する必要があります。トレーニングセットに基づいて正確なスコアを表示するために答えを編集できますか? – ncfirth

+0

こんにちは、トレーニングセットに基づく精度が追加されました。 –

答えて

22

機械学習は機能やモデルを実験することが多いため、質問に対する正解はありません。あなたに私の提案のいくつかは次のようになります。

1.機能スケーリングおよび/または正規化 - あなたのGREGPA機能のスケールを確認してください。それらは2桁の違いがあります。したがって、greの機能は、ロジスティック回帰のような分類子で他のものを支配することになります。機械学習モデルに入れる前に、すべてのフィーチャを同じスケールに正規化することができます。 Thisは、scikit-learnで利用可能なさまざまな機能のスケーリングと正規化のクラスに関する優れたガイドです。

2.クラスの不均衡 - データのクラスの不均衡を探します。あなたが承認/拒絶データを扱っているので、拒絶の数は承認よりもかなり高いでしょう。 LogisticRegressionを含むSkLearnのほとんどの分類器は、class_weightパラメータを持っています。 balancedに設定すると、クラスの不均衡の場合でもうまくいく可能性があります。

3.最適化する他のスコアからをF1には、スコアも、ログ損失として及びあなたが他の指標に最適化することができます。 F1スコアは、クラスの不均衡の場合に役立ちます。 Thisは、スコアリングについて詳しく説明している良いガイドです。

4.ハイパーパラメータチューニング - グリッド検索 - グリッド検索を実行して、モデルのハイパーパラメータを調整することで、精度を向上させることができます。例えば、LogisticRegressionの場合、パラメータCはハイパーパラメータです。また、グリッド検索中にテストデータを使用しないでください。代わりに、相互検証を実行します。テストデータは、最終的なモデルの最終番号を報告するためにのみ使用してください。 GridSearchは、あなたが試したすべてのモデルに対して実行する必要があります。なぜなら、各モデルから得られる最高のものを知ることができるからです。 Scikit-LearnはこのためにGridSearchCVクラスを提供します。 This記事も良い出発点です。

5.分類器の詳細を確認 - ロジスティック回帰は、クラスを分離する線形決定表を学習します。 2つのクラスが線形に分離できない可能性があります。そのような場合は、より複雑な決定境界を知ることができるような他の分類子、例えばSupport Vector Machinesを見る必要があるかもしれません。あなたのデータからルールを学ぶことができるDecision Treesのようなツリーベースの分類器を見ることもできます。アルゴリズムをデータから自動的に学習する一連のIf-Elseルールと考えることができます。多くの場合、意思決定ツリーで右にBias-Variance Tradeoffを得るのは難しいので、かなりの量のデータがある場合は、Random Forestsを見ることをお勧めします。

6.エラー分析 - お使いのモデルのそれぞれについて、失敗したケースを確認してください。いくつかのモデルがパラメータ空間の一部でうまく機能し、他のモデルが他の部分でうまく機能することが分かります。この場合、Ensemble Techniques、たとえばVotingClassifierのテクニックが最良の結果をもたらすことがよくあります。 Kaggleコンテストで優勝したモデルは何度もアンサンブルモデルです。

7.その他の機能 _これがすべて失敗した場合、それ以上の機能を探し始める必要があります。

希望に役立ちます!

+0

良い答え。 'あなたはログロスやF1スコアなど他の指標でも最適化することができます。どうすればいいですか?私は助けていただきありがとうございます! – renakre

+0

4.ハイパーパラメータのチューニングに関して、ベイジアン最適化は最近人々に刺激を与えます。それは、テストされたハイパーパラメータ組み合わせの数とモデル性能との間の適切なバランスを提供しなければならない。 – tagoma

関連する問題