参考文章:
《Python大战机器学习》(不好,就是官方文档的中文版再加上几个简单的例子)
数据挖掘十大算法–K近邻算法
机器学习笔记—KNN算法
常用样本相似性和距离度量方法
KNN(K近邻法)
输入为实例的特征向量,计算新数据与训练数据之间的距离,选取K个距离最近的数据进行分类或回归判断
对于分类问题:输出为实例的类别。分类时,对于新的实例,根据其k个最近邻的训练实例的类别,通过多数表决等方式进行预测。
对于回归问题:输出为实例的值。回归时,对于新的实例,取其k个最近邻的训练实例的平均值为预测值。
neighbors-based (基于邻居的) 监督学习分为两种: classification (分类)针对的是具有离散标签的数据,regression (回归)针对的是具有连续标签的数据。
不具有显示的学习过程,只是利用训练数据集对特征向量空间的划分,并作为其分类的模型
三要素:K如何选择、距离如何度量、分类决策的规则
K选取
- k=1,最邻近算法
- k较小,在较小的邻域中训练实例,近似误差会减小,但估计误差会增大。预测结果对近邻点非常敏感,模型整体变复杂,易过拟合
- k较大,在较大的邻域中训练实例,近似误差会增大,但估计误差会减小。模型变简单,容易忽略实例中大量有用信息
应用中,k值一般取一个较小的数值。通常采用叉验证法来选取最优的k值就是比较不同k值时的交叉验证平均误差率,选择误差率最小的那个大值。例如选择k= 1,2.3.对每个k=i做若干次交叉验证,计算出平均误差,然后比较、选出最小的那个
距离度量
- 特征在训练前必须量化为数值特征
- 每个参数对距离的计算的影响不同,应采取归一化处理
距离Lp分类:欧氏距离、曼哈顿距离、汉明距离等
一般,连续变量选择欧式距离作为度量,像文本分类这种离散的使用汉明距离
分类决策规则
通常使用多数表决(经验风险最小化),也可使用基于距离远近进行加权投票(距离越近权重越大)
import numpy as np
from sklearn.datasets imp