knn的回归
回归用于对趋势的预测
k-近邻的回归模型:
1)求未知样本点到所有的已知样本点的距离
2)对这些距离进行从小到大排序
3)取前k个距离对应的标签值
4)对上一步取出的标签值求平均数
模型导入
from sklearn.neighbors import KNeighborsRegressor
# 这个是k近邻的回归模型
一. 简单实例
薪资和年龄,学历,工作年限有关
学历1代表小学,学历2代表初中,学历3代表高中,学历4代表专科,学历5代表本科,学历6代表研究生,学历7代表博士生
根据上面的特征预测小波和小强的薪资
姓名 年龄 学历 工作年限 薪资
小明 20 5 1 7000
小王 25 4 3 8000
小张 28 6 4 13000
小黄 21 3 3 5000
小蓝 26 7 1 11000
小张 30 7 5 20000
小谢 27 5 3 10000
小白 26 6 2 13000
小波 18 5 5 ?
小强 24 7 5 ?
1. 训练模型并预测
- 使用数组的方式创建特征和标签
- 创建模型并预测
预测出小波的工资为8800/月,小强工资为11100/月
然后可以发现一个问题,年龄的影响比学历的影响大,小强工资过低,根据学历和工作年限,工资应该更高
所以要对数据进行平衡
2. 归一化
使用归一化,让数据更具有可信度
- 对数据进行归一化处理
- 预测
二. 回归曲线的拟合
1. 绘图
导入绘图模块
创建一个散点图,画一条正弦函数图像
对这个正弦函数图像加一些干扰,修改一下,使其不那么规则
2. 拟合上面的点的回归曲线
- 训练回归模型
- 绘制回归曲线
这条红线就是这些散点的规律走势
三. 性能评测
对于回归问题,能够体现其性能的就是预测数据和真实数据之间的数据偏差:经验误差和泛化误差,
而不是准确率、查正率、查全率
3.1 回归问题考察准确率、查正率、查全率,意义不大
举个例子
- 导入boston房价数据集
- 取出特征数据 和 标签数据,
分离测试集与训练集
- 查看相关性能
泛化性能只有10%多一点,非常低
所以回归问题考察准确率、查正率、查全率,意义不大
3.2回归问题,性能是预测数据和真实数据之间的数据偏差
对于回归问题,能够体现其性能的就是预测数据和真实数据之间的数据偏差:经验误差和泛化误差
误差:采用两种来评测,即平均绝对误差和均方误差
假设某个样本集有m个数据,真实标签为y1,y2,…,ym;预测值为y1’,y2’,…,ym’
均方误差为:
MSE = ((y1-y1’)**2+(y2-y2’)**2+…+(ym-ym’)**2)/m
平均绝对误差为:
MAE = (|y1-y1’|+|y2-y2’| +…|ym-ym’|)/m
- 首先预测特征和预测标签
- 分别查看经验集、测试集上的平均绝对误差和均方误差
经验集上的均方误差差距有点大,说明这个数据有点过拟合
3.3 回归问题的性能调优
- 用网格搜索,来进行参数的调优
- 查看信息
此时最佳算法的最佳经验准确率和最佳泛化准确率虽然有改善,但还是很低,
准确率虽然没有特别大的意义但是,可以从侧面反映模型的误差情况,具体情况还要去考察误差分析
均方误差对比前面的有改善,说明这个模型比前面的模型更优秀,