![](https://s5-media.51cto.com/aigc/pc/static/noavatar.gif)
回复
K近邻回归(K-Nearest Neighbors Regression,简称KNN回归)是一种简单直观的机器学习算法。KNN回归通过寻找样本空间中与目标点最接近的K个邻居,利用这些邻居的平均值或加权平均值来预测目标点的值。KNN回归属于非参数模型,因为它不对数据的分布做出假设,也不需要训练过程。
KNN回归的核心思想非常直观,即“相似的样本具有相似的输出”。具体步骤如下:
如果是简单平均,则预测值为K个邻居的输出值的算术平均:
优点:
缺点:
在这一部分,我们还是使用加州房价数据集来演示如何应用K近邻回归算法进行预测。加州房价数据集包含了加州的街区信息,每个街区有多项特征,包括人口、收入、房屋年龄等。目标是根据这些特征预测该街区的房屋中位数价格。
KNeighborsRegressor
创建一个K近邻回归模型,选择K=5
,即考虑最近的5个邻居。代码实现:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import mean_squared_error
# 加载加州房价数据集
california = fetch_california_housing()
X = california.data
y = california.target
# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
# 创建K近邻回归模型并训练
knn = KNeighborsRegressor(n_neighbors=5)
knn.fit(X_train, y_train)
# 预测测试集
y_pred = knn.predict(X_test)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f"测试集的均方误差: {mse:.2f}")
# 可视化结果
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, edgecolor='k', alpha=0.7)
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], 'r--', lw=3)
plt.xlabel("真实房价")
plt.ylabel("预测房价")
plt.title("K近邻回归预测结果")
plt.show()
结果分析:
测试集的均方误差: 0.43。绘制模型预测的房价与真实房价之间的关系图如下:
K近邻回归是一种简单且易于理解的回归算法,适合用于小规模数据集或需要在线更新模型的场景。然而,在使用KNN回归时,需要考虑数据的维数和计算复杂度,并对异常值进行处理,以确保模型的预测效果。
本文转载自宝宝数模AI,作者: BBSM