机器学习项目实战——06KNN算法之水果分类

数据集说明:

机器学习项目实战——06KNN算法之水果分类_第1张图片

一共58个数据样本

因为水果的名字是字符串,对其进行编码。

labelencoder = LabelEncoder()
data.iloc[:,0] = labelencoder.fit_transform(data.iloc[:,0])

对水果进行分类,最后预测正确值。一共有四类。

对于KNN算法,K的取值是需要自己设置的,sklearn中默认是5,水果分类实验中从1到30进行了选择,选取最好的那个k值再用于预测。

最终输出的是模型的得分。

整体代码:

from sklearn.neighbors import KNeighborsClassifier
import numpy as np
import pandas as pd
from sklearn.preprocessing import LabelEncoder
import matplotlib.pyplot as plt

data = pd.read_csv('fruit_data.csv')
# print(data)

labelencoder = LabelEncoder()
data.iloc[:,0] = labelencoder.fit_transform(data.iloc[:,0])
# print(data)

# print(labelencoder.classes_)

from sklearn.model_selection import train_test_split
# 切分数据集,stratify=y表示切分后训练集和测试集中的数据类型的比例跟切分前y中的比例一致
# 比如切分前y中0和1的比例为1:2,切分后y_train和y_test中0和1的比例也都是1:2
# 设置random_state,使用同样的随机方式来切分数据
x_train,x_test,y_train,y_test = train_test_split(data.iloc[:,1:], data.iloc[:,0], test_size=0.3, stratify=data.iloc[:,0], random_state=20)

# 保存不同k值测试集准确率
test_scores = []
# 保存不同k值训练集准确率
train_scores = []

# 设置30个k值
k = 30
for i in range(1,k):
    knn = KNeighborsClassifier(i)
    knn.fit(x_train,y_train)
    # 保存测试集准确率
    test_scores.append(knn.score(x_test,y_test))
    # 保存训练集准确率
    train_scores.append(knn.score(x_train,y_train))


plt.title('k-NN Varying number of neighbors')
plt.plot(range(1,k),test_scores,label="Test")
plt.plot(range(1,k),train_scores,label="Train")
plt.legend()
plt.xticks(range(1,k))
plt.xlabel('k')
plt.ylabel('accuracy')
plt.show()

# 选择一个最好的k值作为模型参数
k = np.argmax(test_scores)+1
knn = KNeighborsClassifier(k)
knn.fit(x_train,y_train)
print(k)
print(knn.score(x_test,y_test))

你可能感兴趣的:(机器学习,机器学习)