回归与分类概念,参考博文:https://blog.csdn.net/u010916338/article/details/105203140
上一篇博客当中讲到knn算法可以做分类,其实knn也是可以做回归的,那么knn如何做回归呢?
一、knn回归介绍
KNN做回归和分类的主要区别在于最后做预测时候的决策方式不同。KNN做分类预测时,一般是选择多数表决法,即训练集里和预测的样本特征最近的K个样本,预测为里面有最多类别数的类别。而KNN做回归时,一般是选择平均法,即最近的K个样本的样本输出的平均值作为回归预测值。
二、knn回归步骤
1、计算样本到数据集中其它每个样本的距离。
2、按照距离的远近排序。
3、选取与当前样本最近的k个样本,作为该样本的邻居。
4、求这k个邻居的输出值(标签值)的均值作为新样本的输出。
import numpy as np
#导入knn算法包
from sklearn.neighbors import KNeighborsRegressor
#导入误差函数
from sklearn.metrics import mean_squared_error,mean_absolute_error
#导入标准化包
from sklearn.preprocessing import StandardScaler # 标准化数据
X_train = np.array([[158,1],[170,1],[183,1],[191,1],[155,0],[163,0],[180,0],[158,0],[170,0]])
y_train = [64,86,84,80,49,59,67,54,67]
X_test = np.array([[168,1],[180,1],[160,0],[169,0]])
y_test = [65,96,52,67]
ss = StandardScaler()
X_train_scaled = ss.fit_transform(X_train)
X_test_scaled = ss.transform(X_test)
K = 3
KN = KNeighborsRegressor(n_neighbors=K)
#提问,不是说knn没有训练过程吗?为什么还要调用fit函数呢?
KN.fit(X_train_scaled,y_train)
predictions = KN.predict(X_test_scaled)
print('预测的数据:',predictions)
print('MAE为',mean_absolute_error(y_test,predictions)) # 平均绝对误差
print('MSE为',mean_squared_error(y_test,predictions)) # 均方误差
输出结果
预测的数据: [78. 83.33333333 54. 64.33333333]
MAE为 7.583333333333336
MSE为 85.13888888888893