基于weka的数据库挖掘➖分类方法KNN分类
关于作者
- 作者介绍
🍓 博客主页:作者主页
🍓 简介:JAVA领域优质创作者🥇、一名初入职场小白🎓、曾在校期间参加各种省赛、国赛,斩获一系列荣誉🏆
🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨💻
K最近邻(K-nearest neighbors,kNN)算法是一种常用的基于实例的监督学习算法,用于分类和回归问题。kNN算法基于一个简单的假设:与某个样本距离最近的k个训练样本具有相似的特征和标签。
kNN算法思想:
-
准备训练数据集:收集带有标签的训练样本数据,其中每个样本都有一组特征和对应的标签。
-
选择k值:确定要考虑的最近邻居的数量k。k的选择是一个重要的参数,它会影响算法的性能。
-
计算距离:对于待分类的样本,使用某种距离度量(例如欧氏距离、曼哈顿距离等)来计算它与训练集中每个样本之间的距离。
-
找到最近的k个样本:根据计算的距离,选择与待分类样本最近的k个训练样本。
-
投票或取平均:对于分类问题,通过多数表决的方式确定待分类样本的标签。即,选择k个最近邻中出现次数最多的标签作为待分类样本的标签。对于回归问题,通过取k个最近邻样本标签的平均值作为待分类样本的预测值。
具体实现:
1.打开weka进入explorer 界面,加载天气数据集glass.arff,然后切换到classify标签页。
单击choose依次选择 weka->classifiers->lazy->IBk
,IBk
是一种KNN分类器。IBk
的参数值保持默认,使用交叉验证的方式测试该分类器的性能。
2.点击start,得到如下结果:
3.下面将大小不等的噪声数据,加入到玻璃数据集中,观察对分类器性能的影响。
通过 weka->filters->unsupervised->attribute
中的 AddNoise
过滤器,将玻璃数据集中一定比例的类别标签翻转为其他的类别标签,这就是加入噪声数据,即将正确的类别标签改成错误的。但是我们只希望在训练数据中加入噪声数据,测试数据中不加噪声数据,所以需要先选择 FilteredClassifier
分类器,它的功能是只让 Addnoise
对训练数据加入噪声。具体操作如下:
选择choose-weka-meta-FilteredClassifier
单击如下位置,弹出 FilteredClassifier
参数设置窗口如下,设置分类器为 KNN(IBk)
,添加噪声的算法 Addnoise
修改AddNoise
过滤器的分类噪声百分比percent参数,从0%,10%一直到50%,设置完后,单击start按钮启动训练和评估,观察分类的准确率如何变化。
噪声百分比 | K=1 |
---|---|
0 | 70.5607 % |
10 | 61.2157 % |
20 | 52.8037 % |
30 | 45.7944 % |
40 | 36.9159 % |
50 | 33.1776 % |
KNN算法的优点包括简单易理解、无需训练过程、适用于多类别问题等。然而,它也有一些缺点,包括计算复杂度高、对数据特征缩放敏感、需要大量的存储空间等。
注意:
-
特征选择:选择合适的特征对算法的性能至关重要。不相关或冗余的特征可能会影响分类结果。
-
距离度量:选择适合问题的距离度量方法。常用的度量包括欧氏距离、曼哈顿距离、余弦相似度等。
-
k值选择:选择合适的k值对算法的性能有重要影响。较小的k值可能会导致过拟合,而较大的k值可能会导致欠拟合。
-
数据预处理:对数据进行预处理,例如特征缩放、归一化或标准化,可以提高算法的性能。