首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么KNN在使用自定义度量时比较慢?

为什么KNN在使用自定义度量时比较慢?
EN

Stack Overflow用户
提问于 2016-10-27 14:26:43
回答 2查看 3.2K关注 0票数 2

我使用的数据集包含大约200k个对象。每个对象都有4个特征。我用欧氏度量对它们进行K近邻(KNN)分类。过程在大约20秒内完成。

最近,我有理由使用自定义度量。可能会有更好的结果。我已经实现了自定义度量,并且KNN已经工作了一个多小时。我没等它完成。

我认为这个问题的一个原因是我的标准。我用return 1替换我的代码。KNN还工作了一个多小时。我假设一个原因是算法Ball Tree,但是KNN与它和欧几里得度量在大约20秒内工作。

现在我不知道是怎么回事。我使用Python 3和sklearn 0.17.1。这里进程不能用自定义度量完成。我也尝试了算法brute,但它有同样的效果。升级和降级的科学知识-学习没有任何影响。在Python 2上通过自定义度量实现分类也没有积极的效果。我在Cython上实现了这个度量(只返回1),它具有相同的效果。

代码语言:javascript
代码运行次数:0
运行
复制
def custom_metric(x: np.ndarray, y: np.ndarray) -> float:
    return 1

clf = KNeighborsClassifier(n_jobs=1, metric=custom_metric)
clf.fit(X, Y)

我能用自定义度量来提升KNN的分类过程吗?

如果我的英语不清楚,很抱歉。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-05 15:04:06

Sklearn进行了优化,并使用cython和几个进程尽可能快地运行。编写纯python代码--特别是当它被多次调用时--是减慢代码速度的原因。我建议您使用cython编写自定义度量。您可以在这里学习一个教程:https://blog.sicara.com/https-medium-com-redaboumahdi-speed-sklearn-algorithms-custom-metrics-using-cython-de92e5a325c

票数 4
EN

Stack Overflow用户

发布于 2017-07-18 10:58:30

正如@Réda Boumahdi正确指出的那样,原因是使用python中定义的自定义度量。这是这里讨论的一个已知问题。在讨论结束时,它以“惯用修正”的形式结束。因此,建议的唯一解决方案是在cython中编写自定义度量,以避免在使用python度量时减缓GIL。

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

https://stackoverflow.com/questions/40287236

复制
相关文章

相似问题

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