KNN(上):如何根据打斗和接吻次数来划分电影类型?
想对电影的类型进行分类,统计了电影中打斗次数、接吻次数,还有其他的指标可以被统计到
希望当有一部新电影的时候自动分类它的类型,把打斗次数看成X轴,接吻次数看成Y轴,然后在二维的的坐标轴上,对这几部电影进行标记,对于未知电影A,坐标为(x,y),需要看下离电影A最近的都有哪些电影,大多属于哪个分类,那么电影A就属于哪个分类,实际,还需要确定一个K值,就是我们要观察离电影A最近的电影有多少个
KNN工作原理
简单说就是“近朱者赤近墨者黑”,分三步计算:
- 计算待分类物体与其他物体之间的距离
- 统计距离最近的K个邻居
- 对于K个最近的邻居,属于哪个分类最多,待分类物体就属于哪一类
K值如何选择
如果K值过小,相当于未分类物体与它邻居非常接近才行,但是如果邻居点是个噪声点,那么未分类物体的分类会产生误差,这样KNN分类会产生过拟合
如果K值过大,相当于距离过远的点会对未知物体的分类产生影响,虽然鲁棒性强,但是会产生欠拟合的情况
采用交叉验证的方式选择K值:把样本集中的大部分样本作为训练集,小部分用于预测,把K值选取在一个较小的范围内同时在验证集上准确率最高的那个最终确定为K值
距离如何计算
两个样本点之间的距离代表了两个样本之间的相似度,距离越大差异性越大。距离的计算方式:
- 欧式距离
- 曼哈顿距离
- 闵可夫斯基距离
- 切比雪夫距离
- 余弦距离
- 欧式距离,最常用的公式,在二维空间中,两点的欧式距离是 d = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 d=\sqrt{(x_1-y_1)^2+(x_2-y_2)^2} d=