簡體   English   中英

在Knn分類器上設置權重

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM