(机器学习)——使用KNN进行水果分类(详解)
实验目标是:导入素材文件fruit_data.txt,使用SKlearn中的neighbors模块对水果数据进行分类,然后预测A、B两种水果的类别。
以下是待预测水果的样本数据:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/cea2cb50f73a8e094129484c8b575996.png)
其中,
mass:水果的重量
width:测量出的宽度
height:测量出的高度
color_score:颜色值
一.导入素材fruit_data.txt
这里使用numpy中的loadtxt()方法进行文本导入:
使用格式为:(这里只写我们需要用到的参数\doge)
np.loadtxt(file_name_path, usecols=None )
首先我把这个素材fruit_data.txt文件放到当前项目的文件夹中,
导入时以第一列用作knn训练的标记值(类别),以而后的列作为训练的特征数据。读取如下:
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
train_x = np.loadtxt('./fruit_data.txt', usecols = (1,2,3,4))
train_y = np.loadtxt('./fruit_data.txt', usecols = (0))
通过打印查看导入数据的呈现形式:
print(train_x)
print(train_y)
如下是训练集的特征数据:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/dfa8f7b882fe6918a5f63755700cfeb5.png)
如下是训练集的标记值数据:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/14e911d43b1902db22ef0dbdfb80804d.png)
二.导入测试集文件数据
需要自己手动建立一个txt文档,存放测试数据,在这里由于spyder没法将字符转换为浮点型数据,
会报如下错误,因而我将样本名A、B使用1、2来替代它们了(新手新手,苯方法hhh):
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7ab37dc5bd9a1c9d1d2be906443eeba5.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/50c39f552b674cbb333b759fb8a21f68.png)
同样,也是使用numpy的loadtxt()方法读入这些测试数据:
test_x = np.loadtxt('./fruit_test.txt', usecols = (1,2,3,4))
test_y = np.loadtxt('./fruit_test.txt', usecols = (0))
print(test_x)
print(test_y)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1172ac8593f59332f67b84f03caac8b1.png)
直到这里,我们已经把需要使用的数据全部导入完毕了,接下来就是对这些数据进行训练和测试了
三.使用KNN进行数据集训练和数据测试
首先我们需要初始化一个训练集,然后将待训练数据传入该训练集的fit()方法中进行训练,代码如下:
knn = KNeighborsClassifier()
knn.fit(train_x, train_y)
训练完毕后可以使用原训练集进行一番测试,看看当前的预测效果如何:
predict_result_01 = knn.predict(train_x)
print('真实结果:', train_y)
print('预测结果:', predict_result_01)
print('预算精确度', knn.score(train_x, train_y))
可以看到,这个测试准确率有一点低(流汗~),但是也还不错了(强颜欢笑),如下是我们使用原来用于训练的训练集进行测试得到的结果和精确度:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c7a77463bcba120ee9f73f377a7d5c65.png)
接下来我们对待测试数据进行测试:
predict_result_02 = knn.predict(test_x)
print('测试结果:', predict_result_02)
结果如下:待测试的两个样本数据都属于类型4
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/96cb99a651cc06a135280fce6ba19d8e.png)
截至目前,我们想要实现的使用KNN进行水果分类已经执行完毕。如果上述样本数据较少,
大家可能觉得偶然性较大的话,可以自己手动造一些数据,测试测试哈哈哈~