在 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 不太适合的特定情况。
我建议您将两个模型拼接在一起,根据估算的二阶导数进行切换。
我正在使用 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 不太适合的特定情况。
我建议您将两个模型拼接在一起,根据估算的二阶导数进行切换。