2016-10-21 18 views
5

現在、私は機械学習アルゴリズムの仕組みを理解しようとしています。実際には得られないことの1つは、予測ラベルの計算精度と視覚的混同行列の間の明白な違いです。私は可能な限り明確に説明しようとします。ここでPython - 機械学習

(ここではあなたが9つのサンプル(実際のデータセットには約4K)、6つの機能および9つのではない数字を表しラベル(が、いくつかの意味とが7のように比較することはできません見ることができます>データセットの抜粋です4> 1)):好奇心を支持して

f1  f2  f3  f4  f5 f6 label 
89.18 0.412 9.1  24.17 2.4 1 1 
90.1 0.519 14.3 16.555 3.2 1 2 
83.42 0.537 13.3 14.93 3.4 1 3 
64.82 0.68 9.1  8.97 4.5 2 4 
34.53 0.703 4.9  8.22 3.5 2 5 
87.19 1.045 4.7  5.32 5.4 2 6 
43.23 0.699 14.9 12.375 4.0 2 7 
43.29 0.702 7.3  6.705 4.0 2 8 
20.498 1.505 1.321 6.4785 3.8 2 9 

Iは、多数のアルゴリズム(線形、ガウス、SVM(SVC、SVR)、ベイズなど)を試みました。私のマニュアルを理解する限り、私の場合は、回帰(連続)ではなく分類子(離散)で作業する方が良いです。一般的な使用方法:

model.fit(X_train, y_train) 
model.score(X_test, y_test) 

私が得た:

Lin_Reg: 0.855793988736 
Log_Reg: 0.463251670379 
DTC:  0.400890868597 
KNC:  0.41425389755 
LDA:  0.550111358575 
Gaus_NB: 0.391982182628 
Bay_Rid: 0.855698151574 
SVC:  0.483296213808 
SVR:  0.647914795849 

連続のアルゴリズムを、より良い結果をしました。私はベイジアンリッジの混乱行列を使用する場合、その結果を検証する(整数にfloat型に変換する必要がありました)、私は次のようだ:私は85%の精度が間違っているという理解を与えた何

Pred l1 l2 l3 l4 l5 l6 l7 l8 l9 
True 
l1 23, 66, 0, 0, 0, 0, 0, 0, 0 
l2 31, 57 1, 0, 0, 0, 0, 0, 0 
l3 13, 85, 19 0, 0, 0, 0, 0, 0 
l4 0, 0, 0, 0 1, 6, 0, 0, 0 
l5 0, 0, 0, 4, 8 7, 0, 0, 0 
l6 0, 0, 0, 1, 27, 36 7, 0, 0 
l7 0, 0, 0, 0, 2, 15, 0 0, 0 
l8 0, 0, 0, 1, 1, 30, 8, 0 0 
l9 0, 0, 0, 1, 0, 9, 1, 0, 0 

。 これはどのように説明できますか?これはfloat/int変換なのでしょうか?

は、ドキュメント hereを見てみましょなどの直接の答え/リンク

+1

精度はどのくらい正確に計算されましたか? 'sklearn.metrics.accuracy_score(y_test、model.predict(X_test))'のようなもの? – sietschie

+1

'model.predict()'の結果を手作業でラベルと比較する場合、計算された精度や混同行列が間違っているかどうかを知る必要があります。 (または両方がオフの場合) – sietschie

+0

@sietschie後半に申し訳ありません!私は "model.score(X_test、y_test)"を使用しました。はい、私はこれらの1つが間違っていると私は計算精度が1つだと思う。 – Moveton

答えて

4

ここでは、機械学習の2つの非常に異なる概念、すなわち回帰と分類を混在させています。回帰は、典型的に連続値を扱う。温度または株式市場価値。一方分類は、どの鳥類が記録にあるのかを伝えることができます。これはまさにあなたが混乱マトリックスを使用する場所です。それは、アルゴリズムがラベルを正しく予測した回数と間違った箇所を何回も教えてくれるでしょう。使用しているSciPyには、両方のセクションがあります。

分類と回帰の問題の両方で、スコアリングに異なるメトリックを使用することができます。したがって、それらが匹敵するとは決して考えません。 @javadが指摘しているように、「決定係数」は精度とは非常に異なっています。私はprecision and recallで読むことをお勧めします。

あなたのケースでは、明らかに分類の問題があり、そのように扱われるべきです。また、f6には離散的な値があるように見えます。

さまざまなアプローチをすばやく試したい場合は、たとえば次のようにおすすめできます。 H2Oは素晴らしいAPIの次に優れたユーザーインターフェースを持ち、大規模な並列処理が可能です。 XGBoostも優れています。

+0

このような明白な答えと推奨をありがとう!それは私に、この質問を超えたいくつかの追加ポイントを与えました。 – Moveton

3

に感謝されるだろう。

回帰法でscore()を呼び出すと、正確さではなく予測の係数R^2が返されます。

+0

別個の答えをありがとう!私は本当にこの重要な瞬間を逃した。 – Moveton

0

thisをご覧ください。
"model.score(X_test、y_test)"を使用してください。