首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >适用于KNeighborsClassifier的Scikit-learn - user-defined权重函数

适用于KNeighborsClassifier的Scikit-learn - user-defined权重函数
EN

Stack Overflow用户
提问于 2013-06-27 02:35:49
回答 2查看 5.5K关注 0票数 3

我有一个KNeighborsClassifier,它根据4个属性对数据进行分类。我想手动加权这4个属性,但总是遇到“操作数无法与形状(1,5) (4)一起广播”。

(来自here的)关于weights : [callable] : a user-defined function which accepts an array of distances, and returns an array of the same shape containing the weights.的文档很少

这就是我现在所拥有的:

代码语言:javascript
复制
    for v in result:
        params = [v['a_one'], v['a_two'], v['a_three'], v['a_four']]
        self.training_data['data'].append(params)
        self.training_data['target'].append(v['answer'])

    def get_weights(array_weights):
        return [1,1,2,1]

    classifier = neighbors.KNeighborsClassifier(weights=get_weights)
EN

回答 2

Stack Overflow用户

发布于 2017-10-06 12:38:55

可调用的sklearn权重的说明

代码语言:javascript
复制
import numpy as np
from sklearn.neighbors import KNeighborsClassifier

为模型训练创建样本数据

代码语言:javascript
复制
df = pd.DataFrame({'feature1':[1,3,3,4,5], 'response':[1,1,1,2,2]})

y = df.response
# [1,1,1,2,2]

X_train = df[['feature1']]
# [1,3,3,4,5]

定义自定义距离函数(打印输入数据结构)

代码语言:javascript
复制
def my_distance(weights):
    print(weights)
    return weights

将传入my_distance的模型定义为可调用的权重

代码语言:javascript
复制
knn = KNeighborsClassifier(n_neighbors=3, weights=my_distance)

knn.fit(X_train,y)

knn.predict([[1]])
# [[ 0.  2.  2.]]
# array([1])

说明:显示与预测值1最近的3个邻居(n_neighbors=3)

X_train中最接近1的三个邻居:

代码语言:javascript
复制
1, 3, 3 

距离:

代码语言:javascript
复制
[[ 0.  2.  2.]]

1 - 1 = 0 
3 - 1 = 2
3 - 1 = 2

预测的类:

代码语言:javascript
复制
array([1])
票数 4
EN

Stack Overflow用户

发布于 2020-11-21 11:57:57

对于高斯,##gamma在这里是一个超参数-我们需要选择最合适的。

代码语言:javascript
复制
def gaussian_kernel(distance):
     weights = np.exp(-gamma*(distance**2))
     return weights/np.sum(weights)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17327880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档