2

誰かが私のコードの問題点を教えてもらえますか? なぜ私はLinearRegressionを使って虹彩データセットの確率を予測することができますが、KNeighborsClassifierは0または1を返しますが、LinearRegressionの結果と同じ結果が得られますか?KNeighborsClassifierの確率予測メソッドは0と1を返します

from sklearn.datasets import load_iris 
from sklearn import metrics 

iris = load_iris() 
X = iris.data 
y = iris.target 

for train_index, test_index in skf: 
    X_train, X_test = X_total[train_index], X_total[test_index] 
    y_train, y_test = y_total[train_index], y_total[test_index] 

from sklearn.linear_model import LogisticRegression 
ln = LogisticRegression() 
ln.fit(X_train,y_train) 

ln.predict_proba(X_test)[:,1] 

アレイ([0.18075722、0.08906078、0.14693156、0.10467766、 0.14823032、 0.70361962、0.65733216、0.77864636、0.67203114、0.68655163、 0.25219798、0.3863194、0.30735105、0.13963637、0.28017798])

from sklearn.neighbors import KNeighborsClassifier 
knn = KNeighborsClassifier(n_neighbors=5, algorithm='ball_tree', metric='euclidean') 
knn.fit(X_train, y_train) 

knn.predict_proba(X_test)[0:10,1] 

配列([0、0、0、0、0、1、1、1、1、1])

+0

回帰!=分類。すべての分類器が確率の概念をサポートしているわけではありません! – sascha

答えて

2

KNNは確率の概念が非常に限られているためです。その推定値は、最も近い隣人の投票の単純な部分です。隣人の数を決定境界付近の15または100またはクエリポイントに増やすと、より多様な結果が表示されます。現在のところ、あなたのポイントは常に同じラベルの5つの隣人を持っています(したがって、確率0または1)。

+0

しかし、私が最適なKから遠く離れて行くので、私の精度は下がります。同じKで、どのようにwekaに来るのですか?ROCが非常に鋭いのに対して、ここでは(曲がりくねった)ROCを得ることができますか? –

+0

KNNはヒューリスティックであり、多くのパラメータがあります。おそらくあなたの結果は異なるでしょう。あなたは、使用されているメトリックとアルゴリズムのデフォルト値も調べています。そしておそらくROC曲線の評価さえも異なって行われます!ランダム性も関与しています(KNN)! – sascha

関連する問題