2

Kann mir jemand sagen, was ist das Problem mit meinem Code? Warum kann ich die Wahrscheinlichkeit eines Iris-Datensatzes mithilfe von LinearRegression vorhersagen, aber KNeighborsClassifier gibt mir 0 oder 1, während es mir ein Ergebnis geben sollte, wie es LinearRegression liefert?Wahrscheinlichkeitsvorhersage-Methode von KNeighborsClassifier gibt nur 0 und 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] 

Array ([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] 

Array ([0, 0, 0, 0, 0, 1, 1, 1, 1, 1])

+0

Regression! = Klassifizierung. Nicht alle Klassifikatoren unterstützen das Konzept der Wahrscheinlichkeit! – sascha

Antwort

2

Da KNN hat sehr begrenzte Vorstellung von Wahrscheinlichkeit. Seine Schätzung ist ein Bruchteil der Stimmen bei den nächsten Nachbarn. Erhöhen Sie die Anzahl der Nachbarn auf 15 oder 100 oder den Abfragepunkt in der Nähe der Entscheidungsgrenze und Sie werden vielfältigere Ergebnisse sehen. Momentan haben deine Punkte einfach immer 5 Nachbarn des gleichen Labels (also Wahrscheinlichkeit 0 oder 1).

+0

Aber dann sinkt meine Genauigkeit, weil ich weit von der optimalen K gehen werde. Wie kommt es in Weka, mit dem gleichen K, können wir eine kurvigere ROC bekommen, während hier (scikit) die ROC sehr scharf ist? –

+0

KNN ist eine Heuristik und hat viele Parameter. Es ist sehr wahrscheinlich, dass sich Ihre Ergebnisse unterscheiden. Sie müssen auch die Standardwerte der verwendeten Metriken und Algorithmen nachschlagen. Und vielleicht wird sogar die ROC-Kurven-Auswertung anders gemacht! Es gibt auch Zufälligkeit (in KNN)! – sascha