![](/img/trans.png)
[英]Providing user defined sample weights for knn classifier in scikit-learn
[英]Setting the weights on the Knn classifier
我是python的新手(我正在使用python 3),並希望在knn分類器中設置權重。 實際上,我想使用距離的反平方作為權重。 如果該距離取決於您要預測的輸入,如何在訓練矩陣中設置此索引?
從我的閱讀中,我試圖創建一個函數作為參數,但是在確定輸入時我有一些疑問。 我的直覺告訴我,函數的輸入應該是數組,更具體地說,應該是測試矩陣的一行。
我的X_train
有4列(所以我的X_test
也是如此)
def my_weight_function(row_vector):
w=[]
for i in range(len(X_train)):
dif = np.asarray(X_train[i:i+1]) - np.asarray(row_vector)
dist = np.linalg.norm(dif)
w.append([1/dist])
return w
此功能正在工作
my_weight_function(X_test[1:2])[0:6]
現在我訓練
knn2 = KNeighborsClassifier(n_neighbors = 5, weights=my_weight_function)
knn2.fit(X_train, y_train)
到目前為止,沒有錯誤,但是當我這樣做時
fruit_prediction = knn2.predict([[9.2,9.6,362,0.74]])
print(fruit_prediction)
我有以下錯誤:
ValueError:操作數不能與形狀(1,4)(1,5)一起廣播
您的要求已在Sklearn中實現。 您要做的就是weights='distance'
從文檔 :
'距離':權重點按其距離的倒數表示。 在這種情況下,查詢點的近鄰比遠處的近鄰具有更大的影響力。
這是一段代碼,將權重實現為距離的倒數。
如果要使用其他策略自定義稱量功能,則udf
會獲取distances數組,然后計算權重。
[callable]:用戶定義的函數,它接受距離數組,並返回包含權重的相同形狀的數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.