在 scikit-learn KNN 回归中变化 n_neighbors

Varying n_neighbors in scikit-learn KNN regression

我正在使用 scikit-learn 的 KNN 回归器将模型拟合到 n_neighbors = 100-500 的大型数据集。鉴于数据的性质,某些部分(想想:尖锐的 delta 函数,如峰)更适合较少的邻居(n_neighbors ~ 20-50),因此峰不会被平滑。这些峰的位置是已知的(或可以测量的)。

有没有办法改变 n_neighbors 参数?

我可以拟合两个模型并将它们拼接在一起,但那样效率很低。最好为 n_neighbors 指定 2-3 个值,或者更糟的是,发送 n_neighbors.

的列表

恐怕不会。这部分是由于一些代数假设,即关系是对称的:A 是 B 的邻居,当且仅当 B 是 A 的邻居。如果你给出不同的 k 值,你是保证打破这种对称性。

我认为主要原因很简单,算法在固定数量的邻居的情况下更简单,一般来说会产生更好的结果。您有一个 KNN 不太适合的特定情况。

我建议您将两个模型拼接在一起,根据估算的二阶导数进行切换。