我使用的数据集包含大约 200k 对象。每个对象都有 4 个特征。我通过 K 最近邻 (KNN) 和欧几里德度量对它们进行分类。过程大约在 20 秒内完成。
最近我有一个使用自定义指标的理由。也许会取得更好的结果。我已经实现了自定义指标,并且 KNN 已经工作了一个多小时。我没有等到它完成。
我认为这个问题的原因是我的指标。我将我的代码替换为return 1
。 KNN仍然工作了1个多小时。我认为原因是球树算法,但 KNN 与它和欧几里得度量在大约 20 秒内工作。
现在我不知道出了什么问题。我使用 Python 3 和 sklearn 0.17.1。Here https://github.com/scikit-learn/scikit-learn/blob/0.17.X/sklearn/neighbors/base.py#L256无法使用自定义指标完成流程。我也尝试过算法brute
但它有同样的效果。 scikit-learn 的升级和降级没有影响。在 Python 2 上通过自定义指标实现分类也没有积极效果。我在 Cython 上实现了这个指标(仅返回 1),它具有相同的效果。
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 分类过程吗?
抱歉,如果我的英语不清楚。
Sklearn 进行了优化,并使用 cython 和多个进程来尽可能快地运行。编写纯 python 代码(尤其是多次调用时)是导致代码变慢的原因。我建议您使用 cython 编写自定义指标。
您可以在此处遵循教程:https://blog.sicara.com/https-medium-com-redaboumahdi-speed-sklearn-algorithms-custom-metrics-using-cython-de92e5a325c https://blog.sicara.com/https-medium-com-redaboumahdi-speed-sklearn-algorithms-custom-metrics-using-cython-de92e5a325c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)