贵州网站建设联系电话,深圳东门属于哪个区,view主题WordPress,网站开发维护成本计算K 近邻回归#xff08;K-Nearest Neighbors Regression#xff09;是一种基于实例的回归算法#xff0c;用于预测连续数值型的输出变量。它的基本思想是通过找到与给定测试样本最近的 K 个训练样本#xff0c;并使用它们的输出值来预测测试样本的输出。它与 K 最近邻分类类…K 近邻回归K-Nearest Neighbors Regression是一种基于实例的回归算法用于预测连续数值型的输出变量。它的基本思想是通过找到与给定测试样本最近的 K 个训练样本并使用它们的输出值来预测测试样本的输出。它与 K 最近邻分类类似但是用于解决回归问题而不是分类问题。
K 近邻回归算法的基本步骤
数据准备首先我们需要准备训练集和测试集的特征数据和对应的目标变量。特征数据可以包括数值型、分类型或二元型的特征。目标变量是我们要预测的连续数值。选择 K 值和距离度量方法K 值是指选择的最近邻居的数量通常通过交叉验证等方法来选择最优的 K 值。距离度量方法用于计算样本之间的距离常见的方法有欧氏距离、曼哈顿距离等。计算距离对于给定的测试样本我们计算它与训练集中所有样本的距离。距离的计算方法取决于选择的距离度量方法。选择最近的 K 个邻居根据距离的计算结果选择与测试样本最近的 K 个训练样本作为邻居。可以使用排序算法如快速排序来加快寻找最近邻居的过程。预测输出对于回归问题根据这 K 个邻居的输出值可以采用平均值或加权平均值作为预测输出。通常距离较近的邻居会被赋予更高的权重。模型评估使用回归评估指标如均方误差、平均绝对误差等来评估模型的性能。可以使用交叉验证等方法来获取更准确的模型评估结果。
需要注意的是K 值的选择对算法的性能有重要影响。较小的 K 值会导致模型过拟合而较大的 K 值可能会导致模型欠拟合。因此通常需要通过交叉验证等方法来选择最优的 K 值。
K 近邻回归算法的基本思想就是在给定一个新的数据点它的输出值由其 K 个最近邻数据点的输出值的平均值或加权平均值来预测。
简单地说KNN 回归使用多个近邻即 k 1时预测结果为这些邻居的对应目标值的平均值。
KNN 回归也可以用 score 方法进行模型评估返回的是 R 2 R^2 R2 分数。 R 2 R^2 R2R-squared分数也叫做决定系数是用来评估模型拟合优度的指标它表示因变量的方差能够被自变量解释的比例。 R 2 R^2 R2 的取值范围在 0 到 1 之间越接近 1 表示模型对数据的拟合越好即模型能够解释更多的因变量的方差。当 R 2 R^2 R2 接近 0 时说明模型无法解释因变量的方差拟合效果较差。简单地说 R 2 1 R^2 1 R21 对应完美预测 R 2 0 R^2 0 R20 对应常数模型即总是预测训练集响应y_train的平均值。 R 2 1 − ( S S R / S S T ) 1 − ∑ i 1 n ( y i − y i ′ ) 2 ∑ i 1 n ( y i − y m e a n ) 2 R^2 1 - (SSR / SST) 1 - \frac{\displaystyle\sum_{i1}^{n}(y_i - y_i)^2}{\displaystyle\sum_{i1}^{n}(y_i - y_{mean})^2} R21−(SSR/SST)1−i1∑n(yi−ymean)2i1∑n(yi−yi′)2
其中 y y y 为实际观测值 y ′ y y′ 为预测值 y m e a n y_{mean} ymean 为实际观测值的均值。
SSR 与 SST
SSRSum of Squares Residual为残差平方和表示模型预测值与实际观测值之间的差异。SSTTotal Sum of Squares为总平方和表示实际观测值的方差。
一般来说KNN 分类器有 2 个重要参数邻居个数以及数据点之间距离的度量方法。在实践中使用较小的邻居个数比如 3 个或 5 个往往可以得到较好的结果但在不同问题中应根据具体情况调节这个参数。数据点之间的距离度量方法默认使用欧式距离它在许多情况下的效果都很好。
如果训练集很大特征数很多或样本数很大KNN 模型的预测速度可能会比较慢。 使用 KNN 算法时对数据进行预处理是很重要的。 这一算法对于有很多特征几百或更多的数据集往往效果不好对于大多数特征的大多数取值都为 0 的数据集所谓的稀疏数据集来说这一算法的效果尤其不好。
在 sklearn 中调用 KNN 回归模型
from sklearn.neighbors import KNeighborsRegressorreg KNeighborsRegressor(n_neighbors3)
reg.fit(X_train, y_train)
y_pred reg.predict(X_new)