sklearn中的kNN算法]
时间: 2025-03-14 12:15:28 浏览: 34
### sklearn中实现或调用kNN算法的方法
#### 调用KNN分类器
`sklearn.neighbors.KNeighborsClassifier` 是用于解决分类问题的 KNN 算法实现。它通过计算样本之间的距离找到最近邻点并进行类别预测[^1]。
以下是使用 `KNeighborsClassifier` 的基本代码示例:
```python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 加载数据集
data = load_iris()
X, y = data.data, data.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 数据标准化处理 (均值方差归一化)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 创建KNN模型实例
knn_clf = KNeighborsClassifier(n_neighbors=3) # 设置邻居数为3
knn_clf.fit(X_train_scaled, y_train) # 训练模型
# 预测
y_pred = knn_clf.predict(X_test_scaled)
# 输出准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")
```
上述代码展示了完整的流程,包括加载数据、划分数据集、标准化处理以及应用网格搜索优化超参数[^3]。
---
#### 调用KNN回归器
对于回归问题,可以使用 `KNeighborsRegressor` 方法。其工作方式类似于分类器,但返回的是目标变量的平均值或其他统计量。
以下是一个简单的例子:
```python
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import mean_squared_error
# 构造回归数据集
X_reg, y_reg = make_regression(n_samples=100, n_features=2, noise=0.1, random_state=42)
# 划分训练集和测试集
X_train_reg, X_test_reg, y_train_reg, y_test_reg = train_test_split(
X_reg, y_reg, test_size=0.3, random_state=42
)
# 归一化处理 (最值归一化)
scaler_reg = MinMaxScaler()
X_train_scaled_reg = scaler_reg.fit_transform(X_train_reg)
X_test_scaled_reg = scaler_reg.transform(X_test_reg)
# 创建KNN回归模型实例
knn_reg = KNeighborsRegressor(n_neighbors=5) # 设置邻居数为5
knn_reg.fit(X_train_scaled_reg, y_train_reg) # 训练模型
# 预测
y_pred_reg = knn_reg.predict(X_test_scaled_reg)
# 输出均方误差
mse = mean_squared_error(y_test_reg, y_pred_reg)
print(f"MSE: {mse:.2f}")
```
此部分实现了从数据准备到模型评估的一整套流程。
---
#### 可视化KNN过程
为了更好地理解 KNN 工作机制,可以通过可视化展示最近邻点的选择过程。例如,在二维空间中的分类任务中绘制决策边界。
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
# 构建二分类数据集
X_vis, y_vis = make_classification(
n_samples=100,
n_features=2,
n_redundant=0,
n_informative=2,
random_state=42,
class_sep=2.0
)
# 划分训练集和测试集
X_train_vis, X_test_vis, y_train_vis, y_test_vis = train_test_split(
X_vis, y_vis, test_size=0.3, random_state=42
)
# 定义KNN分类器
knn_vis = KNeighborsClassifier(n_neighbors=3)
knn_vis.fit(X_train_vis, y_train_vis)
# 绘制散点图及决策边界
xx, yy = np.meshgrid(np.linspace(-3, 3, 50), np.linspace(-3, 3, 50))
Z = knn_vis.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X_train_vis[:, 0], X_train_vis[:, 1], c=y_train_vis, edgecolors="k", s=50)
plt.title("KNN Decision Boundary with k=3")
plt.show()
```
这段代码不仅演示了如何构建 KNN 模型,还显示了它的决策区域[^2]。
---
### 总结
以上介绍了如何利用 `sklearn` 库实现 KNN 分类与回归功能,并提供了一个可视化的案例帮助更直观地理解 KNN 运行逻辑。无论是分类还是回归场景,都可以借助 `StandardScaler` 或其他预处理器完成特征缩放以提升性能。
阅读全文
相关推荐
















