文章目录
1. KNN算法原理
- "英文:"
K-Nearest Neighbor
- "思想:"
对于任意n维输入向量,分别对应于特征空间中的一个点,输出为该特征向量所对应的类别标签或预测值
- "原理:"
1. 它的工作原理是利用训练数据对特征向量空间进行划分,并将划分结果作为最终算法模型
2. 输入没有标签的数据后,将这个没有标签的数据的每个特征与样本集中的数据对应的特征进行比较,
然后提取样本中特征最相近的数据(最近邻)的分类标签
2. KNN算法特点
1. 最基础、最简单
2. 我们只选择样本数据集中前k个最相似的数据,这就是KNN算法中K的由来(k<=20)
3. 优点:精度高、对异常值不敏感
4. 缺点:计算复杂度高、空间复杂度高
5. 也被称为惰性学习 lazy learning. 类似于开卷考试, 在已有数据中去找答案
6. 一般需要对数据归一化
3. K值
- "K值选择:"
1. k值过小,误差较小,但容易导致KNN算法的过拟合
2. k值过大,鲁棒性,模型容易发生欠拟合
3. 一般k值选得比较小,我们会在较小范围内选取k值,同时把测试集上准确率最高的那个确定为最终的算法超参数k
- "交叉验证:"
1. 将样本数据按照一定比例,拆分出训练用的数据和验证用的数据(比如6:4拆分出部分训练数据和验证数据)
2. 从选取一个较小的K值开始不断增加K的值
3. 然后计算验证集合的方差,最终找到一个比较合适的K值。
4. 数据处理
4.1 KDTree
- "目的:"
为了快速查找到k个近邻,我们可以考虑使用特殊的数据结构存储训练数据,用来减少搜索次数。
其中,KDTree就是最著名的一种。
4.2 数据归一化
- 原因
1. 在距离计算中我们需要计算预测样本与训练数据集中多个特征的距离,但不同特征之间数据差异较大,会造成预测错误。
2. 可以类比:欧氏距离与标准化欧式距离
3. 目的:使特征等价
4. 数据归一化,使不同特征属于同一数量级,之间的差异性减弱,有利于KNN的分类
- 数据归一化
一般的数据归一化是将数据映射在 [0,1] 中,公式如下:
X = X − X m i n X m a x − X m i n X=\frac{X-X_{min}}{X_{max}-X_{min}} X=Xmax−XminX−Xmin
5. 算法流程
1. 计算待预测样本与训练数据集中样本特征之间的欧式距离。
2. 按照距离递增的顺序排序。
3. 选取距离最近的K个样本以及所属类别的次数。
4. 返回前k个点所出现频率最高的类别作为预测分类结果。
6. Java代码
6.1 训练集,测试集
- 训练集iris.arff
@RELATION iris
@ATTRIBUTE sepallength REAL
@ATTRIBUTE sepalwidth REAL
@ATTRIBUTE petallength REAL
@ATTRIBUTE petalwidth REAL
@ATTRIBUTE class {
Iris-setosa,Iris-versicolor,Iris-virginica}
@DATA
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.4,3.7,1.5,0.2,Iris-setosa
4.8,3.4,1.6,0.2,Iris-setosa
4.8,3.0,1.4,0.1,Iris-setosa
4.3,3.0,1.1,0.1,Iris-setosa
5.8,4.0,1.2,0.2,Iris-setosa
5.7,4.4,1.5,0.4,Iris-setosa
5.4,3.9,1.3,0.4,Iris-setosa
5.1,3.5,1.4,0.3,Iris-setosa
5.7,3.8,1.7,0.3,Iris-setosa
5.1,3.8,1.5,0.3,Iris-setosa
5.4,3.4,1.7,0.2,Iris-setosa
5.1,3.7,1.5,0.4,Iris-setosa
4.6,3.6,1.0,0.2,Iris-setosa
5.1,3.3,1.7,0.5,Iris-setosa
4.8,3.4,1.9,0.2,Iris-setosa
5.0,3.0,1.6,0.2,Iris-setosa
5.0,3.4,1.6,0.4,Iris-setosa
5.2,3.5,1.5,0.2,Iris-setosa
5.2,3.4,1.4,0.2,Iris-setosa
4.7,3.2,1.6,0.2,Iris-setosa
4.8,3.1,1.6,0.2,Iris-setosa
5.4,3.4,1.5,0.4,Iris-setosa
5.2,4.1,1.5,0.1,Iris-setosa
5.5,4.2,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.0,3.2,1.2,0.2,Iris-setosa
5.5,3.5,1.3,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
4.4,3.0,1.3,0.2,Iris-setosa
5.1,3.4,1.5,0.2,Iris-setosa
5.0,3.5,1.3,0.3,Iris-setosa
4.5,2.3,1.3,0.3,Iris-setosa
4.4,3.2,1.3,0.2,Iris-setosa
5.0,3.5,1.6,0.6,Iris-setosa
5.1,3.8,1.9,0.4,Iris-setosa
4.8,3.0,1.4,0.3,Iris-setosa
5.1,3.8,1.6,0.2,Iris-setosa
4.6,3.2,1.4,0.2,Iris-setosa
5.3,3.7,1.5,0.2,Iris-setosa
5.0,3.3,1.4,0.2,Iris-setosa
7.0,3.2,4.7,1.4,Iris-versicolor
6.4,3.2,4.5,1.5,Iris-versicolor
6.9,3.1,4.9,1.5,Iris-versicolor
5.5,2.3,4.0,1.3,Iris-versicolor
6.5,2.8,4.6,1.5,Iris-versicolor
5.7,2.8,4.5,1.3,Iris-versicolor
6.3,3.3,4.7,1.6,Iris-versicolor
4.9,2.4,3.3,1.0,Iris-versicolor
6.6,2.9,4.6,1.3,Iris-versicolor
5.2,2.7,3.9,1.4,Iris-versicolor
5.0,2.0,3.5,1.0,Iris-versicolor
5.9,3.0,4.2,1.5,Iris-versicolor
6.0,2.2,4.0,1.0,Iris-versicolor
6.1,2.9,4.7,1.4,Iris-versicolor
5.6,2.9,3.6,1.3,Iris-versicolor
6.7,3.1,4.4,1.4,Iris-versicolor
5.6,3.0,4.5,1.5,Iris-versicolor
5.8,2.7,4.1,1.0,Iris-versicolor
6.2,2.2