k邻近算法-分类
算法简介
k邻近算法是最简单的算法之一,该算法的思路是:在特征空间中,如果一个样本附近的k个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别。该算法主要用于解决分类问题,无论是二分类或者是多分类都可以应用。
本文主要记录实际操作,想了解具体的算法原理可以自己查找,或者可以参考这篇博客:KNN原理小结
数据来源
玻璃分类(Kaggle):https://www.kaggle.com/uciml/glass
该数据按照玻璃的组成成分(RI,Na,Mg,Al,SI,K,Ca,Ba,Fe)的不同划分了7种玻璃,每种玻璃(Type)以数字1~7来命名。
依照这些数据建立一个knn多分类模型。
数据挖掘
1.导入第三方库
1 |
|
依次导入建模需要的各个模块,除了前四个库是数据挖掘必要的第三方库之外,重点说一下accuracy_score:
sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)
normalize:默认值为True,返回正确分类的比例;如果为False,返回正确分类的样本数
分类准确率分数是指所有分类正确的百分比。分类准确率这一衡量分类器的标准比较容易理解,但是它不能告诉你响应值的潜在分布,并且它也不能告诉你分类器犯错的类型。不过我只是简单地建立一个多分类模型,够用了。
2.读取文件
1 |
|
因为之前每次下载数据之后都要将文件转移到python根目录里面,或者到下载文件夹里面去读取,很麻烦。所以我通过winreg库,来设立绝对桌面路径,这样只要把数据下载到桌面上,或者粘到桌面上的特定文件夹里面去读取就好了,不会跟其它数据搞混。
3.建模
1 |
|
划分列索引为特征值和目标分类值,并将数据划分成训练集和测试集。
1 |
|
引入knn算法,并将算法中的邻居值设为1,并进行建模,得到结果。
4.评分
1 |
|
利用knn.predict来对测试值进行预测,并与之前划分的测试标签进行比较评分,来看看模型准确度。
结果为0.72,也就是说测试结果与预测结果有72%是符合的,或者说该模型准度评分为72分。
5.简单的调参
之前设立的邻居参数为1,接下来依次测试不同的参数,看看最优的邻居参数是多少。
1 |
|
1 |
|
结果如下:
可以看出在参数依次选择1~20的过程中,最佳邻近参数为1,4,5;模型的最佳精度评分是72分。
6.总结
其实整个过程下来,与其说是在建模,倒不如说是体会了一遍建模的流程。而且k邻近算法不是很复杂的算法,暂时也没有涉及到数据标准化或者归一化的一些操作,不过还是有一些问题可以讨论:
1.这个算法可不可以用于文本类数据的分类,如果可以的话,如何使用?
(我之前尝试了一些文本类的数据,但是都会报错,不管是将数据类型转换成float,还是将文本元素转换为ASC码,都不能成功建模)2.knn算法邻近参数越小精度越高吗?对于其它数据的泛化能力呢?
3.有没有更全面的调参方法来提高模型精度?
4.knn算法可以用于回归类问题吗?
有很多地方做的不是很好,欢迎网友来提出建议,也希望可以遇到些朋友来一起交流讨论。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!