簡體   English   中英

sklearn KNN 中的加權距離

[英]Weighted distance in sklearn KNN

我正在制作一個遺傳算法來尋找權重,以便將它們應用於 sklearn KNN 中的歐幾里得距離,試圖提高分類率並刪除數據集中的一些特征(我通過將權重更改為 0 來實現這一點)。 我正在使用 Python 和 sklearn 的 KNN。 這就是我使用它的方式:

def w_dist(x, y, **kwargs):
   return sum(kwargs["weights"]*((x-y)*(x-y)))

KNN = KNeighborsClassifier(n_neighbors=1,metric=w_dist,metric_params={"weights": w})
KNN.fit(X_train,Y_train)
neighbors=KNN.kneighbors(n_neighbors=1,return_distance=False)
Y_n=Y_train[neighbors]
tot=0
for (a,b)in zip(Y_train,Y_vecinos):
    if a==b:
        tot+=1

reduc_rate=X_train.shape[1]-np.count_nonzero(w)/tamaño
class_rate=tot/X_train.shape[0]

它工作得很好,但速度很慢。 我一直在分析我的代碼,最慢的部分是距離的評估。

我想問一下是否有一些不同的方法可以告訴 KNN 在距離中使用權重(我必須使用歐幾里德距離,但我刪除了平方根)。

謝謝!

確實還有另一種方法,它內置於 scikit-learn 中(所以應該更快)。 您可以將wminkowski指標與權重一起使用。 以下是訓練集中特征的隨機權重示例。

knn = KNeighborsClassifier(metric='wminkowski', p=2, 
                           metric_params={'w': np.random.random(X_train.shape[1])})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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