首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KNN算法的实现

KNN算法的实现
EN

Stack Overflow用户
提问于 2020-02-02 12:51:01
回答 1查看 379关注 0票数 1

我正在创建自己的KNN实现。尽管一切看起来都很有效,但与sklearn的KNN相比,我得到的准确性还是相当差的(例如,在几组测试中,0,68比0,96 )。我也使用5倍交叉验证。我的代码最重要的部分如下:

代码语言:javascript
复制
def knn(X, y, Z, k):
    mod_lst = []
    for i in range(Z.shape[0]):
        distance = []
        for j in range(X.shape[0]):
            distance.append(np.linalg.norm(X.iloc[j] - Z.iloc[i]))
        mod_lst.append(modde(distance,y,k))
    return mod_lst

def modde(ret,y,k):
    '''sorting distances in ascending order'''
    dic = {i: ret[i] for i in range(0, len(ret))}
    dic1 = {r: v for r, v in sorted(dic.items(), key=lambda item: item[1])}
    ind = [dic1.keys()]

    a = list(dic1.keys())
    '''sorting y (labels) in ascending order'''
    d = [x for _, x in sorted(zip(a,y))]

    d = d[:k]
    d = list(map(int, d))
    modw = statistics.mode(d)

    return modw

其中:

代码语言:javascript
复制
k = 5
X - training set (data, a nxm matrix of points in R^m)
y - training set (labels, 1xn array of zeros, ones, etc)
Z - testing set

为什么我的结果与scikit不同-学习实现结果?

EN

回答 1

Stack Overflow用户

发布于 2020-02-03 08:47:46

很难回答你的问题。首先,Scikit-learn实现具有运行时优化,并包含一个详细的实现。

KNN (分类器)的实现采用这里。我建议您阅读实现,因为新的github读取代码功能已经启用,并且很容易跟踪库的实现。

例如,检查这里如何定义距离图。你会注意到他们的代码和你的有一点不同。

而且,scikit-learn使用枕库来计算一些度量,例如,点的距离是在pdist()上构建的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60026264

复制
相关文章

相似问题

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