KNN算法实现鸢尾花分类

KNN算法实现鸢尾花分类

KNN算法是一种常用的分类算法,它的主要思想是根据样本间的距离来进行分类。本次使用KNN算法对鸢尾花数据集进行分类。

数据集介绍

鸢尾花数据集是机器学习领域中广泛使用的一个数据集,它包含三个品种的鸢尾花,分别是Setosa(山鸢尾)、Versicolor(杂色鸢尾)和Virginica(维吉尼亚鸢尾)。每个样本包含四个特征,分别是花萼长度、花萼宽度、花瓣长度和花瓣宽度。在本文中,只使用前两个特征进行分类。

数据集预处理

首先,加载鸢尾花数据集,并选取前两个特征作为输入数据:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets

# 加载数据集
iris = datasets.load_iris()
X = iris.data[:, :2]  # 只选取前两个特征
y = iris.target

数据集划分

接下来,将数据集划分为训练集和测试集。使用sklearn库中的train_test_split函数来实现自动划分训练集和测试集:

from sklearn.model_selection import train_test_split

# 自动划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

其中,test_size表示测试集占总数据集的比例,random_state为随机数种子,设置相同的随机数种子可以保证多次运行结果相同。

KNN模型训练

KNN算法的原理很简单,就是根据样本间的距离来进行分类。使用sklearn库中的KNeighborsClassifier类来训练KNN模型:

from sklearn.neighbors import KNeighborsClassifier

# 训练KNN模型
k = 3
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, y_train)

其中,k表示KNN算法中的K值,n_neighbors表示KNN算法中最近邻居的个数。

KNN模型预测

KNN模型训练完成后,使用该模型对训练集和测试集进行预测:

# 预测训练集和测试集
y_train_pred = knn.predict(X_train)
y_test_pred = knn.predict(X_test)

计算准确率

完成预测后,需要计算训练集和测试集的准确率:

from sklearn.metrics import accuracy_score

# 计算训练集和测试集准确率
train_acc = accuracy_score(y_train, y_train_pred)
test_acc = accuracy_score(y_test, y_test_pred)
print('训练集准确率: %.2f%%' %(train_acc*100))
print('测试集准确率: %.2f%%' %(test_acc*100))

其中,accuracy_score函数用于计算准确率,y_trainy_test为真实标签,y_train_predy_test_pred为预测标签。

可视化结果

最后,使用matplotlib库绘制散点图来可视化分类结果:

# 绘制散点图
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('KNN classification (k=%i)' % k)
plt.show()

其中,X[:, 0]X[:, 1]表示选取的两个特征,c=y表示按照真实标签进行颜色分类,cmap=plt.cm.Paired表示使用Paired颜色映射。

运行结果

KNN算法实现鸢尾花分类_第1张图片KNN算法实现鸢尾花分类_第2张图片

总结

本次使用KNN算法对鸢尾花数据集进行了分类,实现了自动划分训练集和测试集、训练KNN模型、预测和计算准确率、可视化结果。KNN算法简单易懂,容易实现,但是当数据集较大时,计算距离的时间复杂度较高,需要选择合适的K值和距离计算方法来提高分类效果。

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