python KNN算法实现鸢尾花数据集分类

yizhihongxing

Python实现KNN算法对鸢尾花数据集进行分类

介绍

KNN(K-Nearest-Neighbor)算法是一种非常常用且简单的分类算法之一。它的基本思想是把未知数据的标签与训练集中最邻近的K个数据的标签相比较,得票最多的标签就是未知数据的标签。本文将介绍如何使用Python实现对鸢尾花数据集进行KNN分类。

步骤

  1. 加载数据

首先,我们需要加载鸢尾花数据集。sklearn库中提供了该数据集,我们可以使用load_iris()函数进行加载。

from sklearn.datasets import load_iris

iris = load_iris()
X = iris.data       # 特征矩阵
y = iris.target     # 标签数组
  1. 数据预处理

为了保证KNN算法的准确性,我们需要对数据进行预处理。这里我们采用Z-score标准化方法对特征矩阵进行归一化处理。

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X = scaler.fit_transform(X)
  1. 分割训练集和测试集

为了避免过拟合,我们需要将数据集分为训练集和测试集。我们使用train_test_split函数来将数据集随机划分成70%的训练集和30%的测试集。

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
  1. 训练模型

现在我们可以开始训练模型了。KNN算法只有一个参数——K值。对于这个参数,我们需要进行调参。在本次实验中,我们使用交叉验证法来训练模型并选择最佳的K值。

from sklearn.model_selection import cross_val_score
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt

k_range = range(1, 31)
scores = []
for k in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)
    score = cross_val_score(knn, X_train, y_train, cv=10, scoring='accuracy').mean()
    scores.append(score)

plt.plot(k_range, scores)
plt.xlabel('K')
plt.ylabel('Accuracy')
plt.show()

运行以上代码后,我们会得到一个准确率随着K值变化的折线图。基于该图,我们可以选择最优的K值作为KNN模型的参数。

  1. 预测

在得到最优的K值后,我们可以开始对测试集进行预测了。在本次实验中,我们选择K=5进行预测。

knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
  1. 评价模型

最后,我们需要评价模型的准确率。我们可以使用scikit-learn库中的accuracy_score函数来评价模型的准确率。

from sklearn.metrics import accuracy_score

score = accuracy_score(y_test, y_pred)
print('Accuracy:', score)

示例

下面我们给出两个使用Python实现KNN算法的鸢尾花数据集分类示例。

示例一

在此示例中,我们将调节K值,并输出最优的K值和其对应的准确率。完整代码如下:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

iris = load_iris()
X = iris.data
y = iris.target

k_range = range(1, 31)
max_score = 0
max_k = 0

for k in k_range:
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
    knn = KNeighborsClassifier(n_neighbors=k)
    knn.fit(X_train, y_train)
    y_pred = knn.predict(X_test)
    score = accuracy_score(y_test, y_pred)

    if score > max_score:
        max_score = score
        max_k = k

print('The best accuracy:', max_score, 'with the best k:', max_k)

在运行以上代码后,我们会输出最优的K值和其对应的准确率。

示例二

在此示例中,我们将训练KNN模型,并使用该模型对测试集进行预测。完整代码如下:

from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

iris = load_iris()
X = iris.data
y = iris.target

scaler = StandardScaler()
X = scaler.fit_transform(X)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)

print('Accuracy:', accuracy_score(y_test, y_pred))

在运行以上代码后,我们会输出模型的准确率。

结论

本文介绍了如何使用Python实现对鸢尾花数据集进行KNN分类,并给出了两个具体实现示例。KNN算法简单、易于理解,它虽然不如其他一些机器学习算法精度高,但在某些问题上表现出色。我们可以通过模型调优和数据预处理等手段来提高算法的准确性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python KNN算法实现鸢尾花数据集分类 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python实现查找数组中任意第k大的数字算法示例

    Python实现查找数组中任意第k大的数字算法示例 本文将介绍如何使用Python语言实现查找数组中任意第k大的数字算法,并提供两个示例进行说明。 算法概述 查找数组中任意第k大的数字算法通常采用快速排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再按此方法对这两部分记录分别进行快速排序…

    算法与数据结构 2023年5月19日
    00
  • Go归并排序算法的实现方法

    Go归并排序算法的实现方法 简介 归并排序(Merge Sort)是一种经典的分治算法,它将一个大问题分解为若干个小问题,通过递归将小问题排好序,最后再将小问题合并起来,得到排序的结果。 归并排序的最坏时间复杂度为$ O(nlogn)$,且具有稳定性,是较为优秀的排序算法之一。 实现方法 归并排序的实现分为两个步骤,分别是分解和合并: 分解 分解过程需要递归…

    算法与数据结构 2023年5月19日
    00
  • javascript冒泡排序小结

    JavaScript冒泡排序小结 什么是冒泡排序 冒泡排序是一种经典排序算法,它重复地走访过要排序的数列,每次比较相邻的两个元素,如果顺序不对则交换它们,直到没有需要交换的元素为止。 冒泡排序的步骤 冒泡排序的主要步骤如下: 比较相邻的元素。如果第一个比第二个大,就交换它们; 对每一对相邻的元素做同样的工作,从开始的第一对到结尾的最后一对,这样在最后的元素应…

    算法与数据结构 2023年5月19日
    00
  • C++ 基本算法 冒泡法、交换法、选择法、实现代码集合

    C++ 基本算法 冒泡法、交换法、选择法 在编程中,基本算法是非常重要的。本文将介绍C++中基本算法的三种实现方式:冒泡排序、交换排序、选择排序,并附上相应的实现代码集合以及示例说明。 冒泡排序 冒泡排序,顾名思义,就像水中的气泡一样,从底部慢慢上升。在排序过程中,每次比较相邻两个元素的大小,如果发现顺序不对,就进行交换,直到所有元素都排列好。冒泡排序的时间…

    算法与数据结构 2023年5月19日
    00
  • Java算法之重新排列数组例题

    下面是我对“Java算法之重新排列数组例题”的完整攻略: 题目描述 对于一个给定的整数数组,让其中的偶数放在奇数之前,保持它们原有的相对顺序不变。例如,对于数组[1,2,3,4],需要修改为[1,3,2,4]。 思路分析 对于这个问题,我们可以利用双指针的思路解决。定义两个指针left和right,分别指向数组的头部和尾部。当left指向的数为偶数并且它在r…

    算法与数据结构 2023年5月19日
    00
  • java实现对map的字典序排序操作示例

    下面是Java实现对Map的字典序排序操作的完整攻略: 1. 根据键(Key)排序 1.1 实现方式一 Map<String, String> map = new HashMap<>(); map.put("b", "2"); map.put("c", "3&quo…

    算法与数据结构 2023年5月19日
    00
  • 图解Java中归并排序算法的原理与实现

    图解Java中归并排序算法的原理与实现 什么是归并排序 归并排序是一种经典的排序算法,它的基本思想是通过将待排序序列不停地划分成两个子序列,将每个子序列排序后再将其合并,直到最终合并为一个有序的序列。 归并排序的原理 划分过程 首先将待排序序列分为两个长度相等的子序列,然后对每个子序列进行排序。 合并过程 合并两个有序的子序列,生成一个有序的子序列。重复此过…

    算法与数据结构 2023年5月19日
    00
  • C语言的冒泡排序和快速排序算法使用实例

    C语言的冒泡排序和快速排序算法使用实例 什么是排序算法 排序算法是一种将一组数据按照特定顺序排列的算法。常见的排序算法包括冒泡排序、快速排序、插入排序、选择排序等。 冒泡排序 冒泡排序是一种简单的排序算法,它重复地走访过要排序的元素,依次比较相邻两个元素,如果它们的顺序错误就交换它们的位置。重复这个过程,直到没有再需要交换的元素,即排序完成。 以下是 C 语…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部