【问题标题】:What is the Kernel for the KNN regressor in sklearn python?sklearn python中KNN回归器的内核是什么?
【发布时间】:2018-08-01 12:47:24
【问题描述】:

只是想知道是否有人知道 sklearn 中 KNN 回归的内核是什么。我想使用高斯内核,但我不确定 KNN 回归器中的内核是否是高斯的,对此主题的任何帮助将不胜感激。

【问题讨论】:

    标签: python scikit-learn regression


    【解决方案1】:

    我假设您在这里谈论的是sklearn.neighbors.KNeighborsRegressor

    有点不清楚你所说的“内核”是什么意思,但假设你在谈论 k 个邻居是如何加权的:

    • 默认情况下,所有 K 个邻居的权重均等 - 采用简单平均值,忽略邻居的距离 (weights='uniform')
    • 您可以通过在创建 KNR 对象时设置 weights='distance' 来设置它,以便在取平均值时根据邻居的距离的倒数对其进行加权。

    虽然默认情况下未实现高斯内核,但 KNR 还支持决定权重的任意函数。你可以这样定义:

    def kernel(distances):
        # distances is an array of size K containing distances of neighbours
        weights = gaussian(distances) # Compute an array of weights however you want
    return distances
    

    然后将其传递给您的 KNR,并使用 weights=kernel 进行初始化。我建议阅读 sklearn 文档以获取更多信息。

    【讨论】:

    • 哦,我错过了 sklearn 页面上的那部分,所以我将权重设置为等于我正在应用 KNN 的特定兴趣点的高斯分布。所以它看起来像这样,exp(-(xi-xq)^2/sigma) 其中 sigma 是标准偏差,xi 是我们正在查看的点,xq 是相邻点。那有意义吗?另外我应该如何设置sigma?
    • Sigma 只是您必须调整的参数。但是我应该指出,在这种特定情况下,提供给内核的距离是 minkowski 距离(这也是可配置的)。所以把它放在你的公式中,你应该能够做到:weights = exp(-distances)^2 / sigma。我不确定你的公式是否正确(但这是一个编程论坛而不是数学理论论坛)。
    • 我明白了,非常感谢您的回复,我会试试这个!
    猜你喜欢
    • 2021-08-03
    • 2019-03-03
    • 2019-04-11
    • 1970-01-01
    • 2013-11-17
    • 2018-06-05
    • 2018-09-28
    • 2018-11-17
    • 2017-02-25
    相关资源
    最近更新 更多