sklearn.neighbors.KNeighborsRegressor()
是 Scikit-learn 中基于 K 近邻(K-Nearest Neighbors, KNN)算法的回归模型。以下是其核心参数的详细解释及使用建议:
核心参数解析
1. n_neighbors
- 作用:选择用于预测的邻居数量(K 值)。
- 取值范围:正整数(默认值
5
)。 - 影响:
- K 值较小:模型对局部特征敏感(容易过拟合,噪声敏感)。
- K 值较大:模型更平滑(可能欠拟合,忽略细节)。
- 调优建议:通过交叉验证选择(如
GridSearchCV
),范围通常为1~20
。
2. weights
- 作用:定义邻居的权重计算方式。
- 可选值:
'uniform'
(默认):所有邻居的权重相等。'distance'
:权重与距离成反比(距离越近的邻居影响越大)。
- 示例:
model = KNeighborsRegressor(weights='distance') # 距离加权回归
3. algorithm
- 作用:指定用于快速搜索邻居的算法。
- 可选值:
'auto'
(默认):自动根据数据选择最优算法。'ball_tree'
:基于 Ball Tree 结构的搜索(适合高维稀疏数据)。'kd_tree'
:基于 KD Tree 结构的搜索(适合低维数据)。'brute'
:暴力搜索(适合小数据集)。
- 选择依据:数据规模、特征维度、稀疏性。
4. leaf_size
- 作用:控制 Ball Tree 或 KD Tree 的叶子节点大小,影响树构建和查询速度。
- 取值范围:正整数(默认值
30
)。 - 建议:通常无需调整,除非对性能有极端要求。
5. p
- 作用:定义距离度量中的幂参数(仅对
metric='minkowski'
有效)。 - 可选值:
p=1
:曼哈顿距离(L1 范数)。p=2
(默认):欧氏距离(L2 范数)。
- 示例:
model = KNeighborsRegressor(p=1) # 使用曼哈顿距离
6. metric
- 作用:定义距离度量方法。
- 常用值:
'minkowski'
(默认):闵可夫斯基距离(结合p
参数)。'euclidean'
:欧氏距离(等价于metric='minkowski', p=2
)。'manhattan'
:曼哈顿距离(等价于metric='minkowski', p=1
)。'chebyshev'
:切比雪夫距离(各维度差值的最大值)。'cosine'
:余弦相似度。
- 自定义距离:可传入函数(需满足距离函数的数学性质)。
7. metric_params
- 作用:传递给自定义距离函数的额外参数(仅当
metric
为可调用函数时有效)。 - 示例:
def custom_metric(x, y, param1, param2): return ... model = KNeighborsRegressor( metric=custom_metric, metric_params={'param1': 1.0, 'param2': 0.5} )
8. n_jobs
- 作用:设置并行计算的工作线程数。
- 可选值:
None
(默认):单线程。-1
:使用所有 CPU 核心。
- 适用场景:数据量较大时加速搜索。
参数调优建议
1. 基础调优流程
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import GridSearchCV
param_grid = {
'n_neighbors': [3, 5, 7, 10],
'weights': ['uniform', 'distance'],
'p': [1, 2]
}
model = KNeighborsRegressor()
grid = GridSearchCV(model, param_grid, cv=5)
grid.fit(X_train, y_train)
print("最优参数:", grid.best_params_)
2. 高维数据优化
- 使用
algorithm='ball_tree'
或algorithm='kd_tree'
。 - 降低
n_neighbors
以避免维度灾难。
3. 计算加速
- 设置
n_jobs=-1
启用多线程。 - 对数据归一化(如
StandardScaler
)提升距离计算稳定性。
核心方法说明
方法 | 功能 |
---|---|
fit(X, y) | 训练模型 |
predict(X) | 返回预测值 |
score(X, y) | 计算 R² 分数(回归评估) |
kneighbors(X) | 返回样本的 K 个邻居索引和距离 |
使用场景示例
- 房价预测:根据房屋特征(面积、房间数)预测价格。
- 用户评分预测:基于相似用户的历史评分预测目标用户的评分。
- 传感器数据回归:根据传感器输入预测物理量(如温度、压力)。
注意事项
- 数据归一化:KNN 对特征尺度敏感,需提前标准化/归一化。
- 计算效率:数据量过大时,暴力搜索(
algorithm='brute'
)性能较差,优先选择树结构算法。 - 稀疏数据:高维稀疏数据(如文本 TF-IDF 向量)建议使用余弦距离。