K近邻算法,意味着在通过分析K个近邻的数据得知所求数据。
回归和分类皆可。
问题:
K是什么意思
如何定义近邻
知道近邻怎么确定自己想要的值
这个值是否准确,如何评估预测结果
基于单变量和基于多变量的过程是一样的吗
过程:
K:所选择近邻的个数
如何确定近邻,即如何才算是近邻:欧氏距离
确定近邻后,取其相应数据的均值,从而确定所求数据对应值。
有基于单变量和多变量的K近邻算法
例如,我想出租一个房子,有三个房间,我想看看其他有三个房间的房子大多租多少钱。
那么搜索数据,通过计算欧氏距离,筛选出来有三个房间的房子,洗牌一下,取前K个作为自己的近邻,计算租金的平均值,那么我们现在可以确定设定的大概租金。(基于单变量)
同理,我想出租一个房子,有三个房间,带有一个大阳台,房子面积大于120平方,那么就有多个维度需要考虑,同样也可以通过计算欧氏距离,找到近邻。
那么之后怎么知道自己预测的租金是否合适呢?
首先需要进行模型评估:将原始数据集分为训练集和测试集,比如73开(训练集70% 测试集30%)。我们通过训练集来锻炼我们使用K近邻预测租金的能力,之后在测试集中使用我们的能力来预测租金,看看我们预测的价格和实际价格是否相差太多。
同时,利用将原始数据集分为训练集和测试集,我们可以避免我们使用K近邻预测租金的能力过于贴合数据集,也就是过拟合现象,即我们的预测能力受到原始数据集的限制了,只能预测原始数据集的数据,一旦预测数据集以外的房屋类型就会出现较大偏差或预测不准。
用一个考试来举例解释:老师课上给我们练习题做练习,这些练习题我都会了,认为出现这种练习题都是这样解决的,那考试的时候,老师出题,除了类似的题,但其实解题方法有点不同,并不是完全和之前那些练习题的解题方法一致,那么过拟合就是我认为解决那些题的方法和解练习题的方法也是一样的,因此最后解出来的结果肯定会有较大的偏差或不对。
之后我们来看我们预测值和实际值之间的差异:
基于单变量:利用RMSE均方根误差来计算预测值和实际值的差值。RMSE越大,说明预测值和实际值相差越大,模型预测效果不好。
基于多变量:此时需要注意不同变量间的取值差异对欧氏距离的影响。
例如,变量房间数,通常是个位数,和变量房子大小,通常是百位数。我们需要考虑这两个变量的时候,如果不对变量进行处理直接进行欧式距离的计算会发现,计算房间数的值通常比较小,计算房子大小的值通常比较大,而我们衡量近邻是用欧式距离的,那么是否就意味着,变量房子大小起的作用比变量房间数起的作用更大(对欧式距离的值影响更大),但实际上是否有这种影响呢?我们并不确定,那么我们应该是对他们均等处理的。
因此基于多变量的K近邻算法,需要对多个变量进行预处理。
预处理分为标准化(StandardScaler)和归一化(MinMaxScaler)
标准化:把变量的取值压缩到等比例空间中。大多用Z-score 标准化
归一化:把变量的取值压缩到0-1区间上。大多用(X-min)/(max-min)
进行标准化之后就能均等对待多个变量。
之后和基于单变量的K近邻算法一样,最后用RMSE来评估。
K近邻问题:计算太耗时间,需要在所有数据中逐个计算。不适合数据量庞大的时候使用。
K近邻优点:不需要训练模型。
优化:可以利用交叉验证来提高预测能力。