web-dev-qa-db-ja.com

Scikit pythonでロジスティック回帰のモデル精度を上げる方法は?

Gre、gpa、ranksなどの予測変数を使用してアドミット変数を予測しようとしていますが、予測精度は非常に低い(0.66)。データセットは以下のとおりです。 https://Gist.github.com/abyalias/3de80ab7fb93dcecc565cee21bd9501a

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

 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]])

モデルの精度を上げる方法は?

10
Aby Mathew

機械学習は機能とモデルの実験に関するものなので、あなたの質問に対する正しい答えはありません。あなたへの私の提案のいくつかは次のとおりです。

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

2。クラス不均衡-データのクラス不均衡を探します。許可/拒否データを使用しているため、拒否の数は許可数よりもかなり多くなります。 LogisticRegression を含むSkLearnのほとんどの分類器には、class_weightパラメータ。それをbalancedに設定することは、クラスの不均衡の場合にもうまく機能するかもしれません。

3。他のスコアを最適化する-Log LossおよびF1-Score。 F1-Scoreは、クラスが不均衡な場合に役立ちます。 This は、スコアリングについて詳しく説明している良いガイドです。

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

5。さらに分類子を調べる-ロジスティック回帰は、クラスを分離する線形決定曲面を学習します。 2つのクラスが直線的に分離できない可能性があります。そのような場合、より複雑な決定境界を学習できる Support Vector Machines などの他の分類子を見る必要があるかもしれません。また、データからルールを学習できる Decision Trees などのツリーベースの分類子を確認することもできます。それらは、アルゴリズムがデータから自動的に学習する一連のIf-Elseルールと考えてください。多くの場合、デシジョンツリーで適切な バイアスと分散のトレードオフ を得るのは難しいため、大量のデータがある場合は ランダムフォレスト を確認することをお勧めします。

6。エラー分析-モデルごとに戻って、失敗しているケースを確認します。一部のモデルはパラメーター空間の一部でうまく機能し、他のモデルは他の部分でより適切に機能することがわかります。この場合、 Ensemble Techniques のような VotingClassifier テクニックが最良の結果をもたらすことがよくあります。 Kaggleのコンペティションで優勝したモデルは、多くの場合アンサンブルモデルです。

7。その他の機能_これがすべて失敗した場合、それはあなたがより多くの機能を探し始めるべきであることを意味します。

お役に立てば幸いです!

51
Abhinav Arora