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

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日

相关文章

  • JS中数组随机排序实现方法(原地算法sort/shuffle算法)

    JS中实现数组随机排序有两种常见方法:原地随机排序算法和使用shuffle算法。 原地随机排序算法 原地随机排序算法(in-place shuffle algorithm)是将数组中元素随机地乱序,同时保持每个元素之间的相对位置不变。算法的时间复杂度是O(n),空间复杂度是O(1),因为所有的操作都是在原数组上进行。 实现步骤 获取数组长度 从数组的最后一个…

    算法与数据结构 2023年5月19日
    00
  • C语言 实现归并排序算法

    C语言实现归并排序算法的攻略如下: 展示归并排序算法思路 先将待排序的序列拆分成若干小规模子序列,直到每个子序列可以直接排序为止。 然后对每个子序列进行排序,合并成新的有序序列。 重复第二步,直到只剩下一个排序完毕的序列。 C语言代码实现 下面是一份C语言实现归并排序算法的代码,代码内部有详细的注释,可以帮助理解代码: #include <stdio.…

    算法与数据结构 2023年5月19日
    00
  • JavaScript中的冒泡排序法

    JavaScript中的冒泡排序法 冒泡排序法就是通过比较任意两个相邻的元素,然后循环遍历整个数组,逐步将最大(或最小)的数移到最后一位。当没有相邻的元素需要互换位置的时候即可完成排序。冒泡排序法是常用的简单排序算法,虽然时间复杂度比高级算法如快速排序、堆排序等要高,但是对于小的数据集合,其性能表现要好于其他排序算法。 以下是冒泡排序法的具体实现: func…

    算法与数据结构 2023年5月19日
    00
  • python 如何在list中找Topk的数值和索引

    对于如何在Python的list中找Topk的数值和索引,可以采用以下方法: 方法一:使用sorted函数排序 可以使用Python内置的sorted函数对list进行排序,然后取前k个元素,同时得到它们的索引。具体代码如下: lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] k = 3 # 记录每个元素的索引和值 lst_wi…

    算法与数据结构 2023年5月19日
    00
  • php排序算法(冒泡排序,快速排序)

    PHP排序算法是常见的编程问题,其中冒泡排序和快速排序是两种常见的算法。下面我会详细讲解这两种算法的原理和实现方法。 冒泡排序 冒泡排序是一种基本的排序算法,其原理是反复遍历要排序的元素,比较相邻元素的大小,若顺序不对则交换位置,一直重复该过程直到所有元素都按照升序排好。 冒泡排序的实现过程可以分为两个步骤: 外层循环控制排序的趟数,循环次数为 $n-1$ …

    算法与数据结构 2023年5月19日
    00
  • C语言 冒泡排序算法详解及实例

    冒泡排序算法详解及实例 什么是冒泡排序算法 冒泡排序是一种很基础的排序算法,它通过从序列的一端开始,依次比较相邻两个元素的大小,如果它们的顺序不对,就交换它们的位置,直到把整个序列排序完成。冒泡排序算法的时间复杂度为O(n^2),所以它并不适合排序规模很大的序列。 冒泡排序算法的实现 冒泡排序算法的实现很简单,其核心代码如下: void bubble_sor…

    算法与数据结构 2023年5月19日
    00
  • C语言 奇偶排序算法详解及实例代码

    C语言奇偶排序算法详解及实例代码 本篇文章将详细讲解C语言中奇偶排序算法的原理、实现方法及具体的实例代码,并通过两个示例说明其使用方法。 原理介绍 奇偶排序算法又叫交替排序算法,是一种简单但较慢的排序算法,通常用于小型数据集中的排序。该算法通过使用两个线程分别对奇数位置和偶数位置的元素进行比较和交换来实现排序。 该算法的原理如下: 从头到尾扫描一遍待排序数组…

    算法与数据结构 2023年5月19日
    00
  • C语言常见排序算法之插入排序(直接插入排序,希尔排序)

    接下来我将为大家详细讲解“C语言常见排序算法之插入排序(直接插入排序, 希尔排序)”。 直接插入排序 算法思路 直接插入排序算法的实现思路是:将一个无序的数据序列分为一个有序子序列和一个无序子序列两部分,将无序子序列的元素一个一个插入到有序子序列中,直到插入完所有元素,最终形成一个新的有序序列。在具体编写代码时,我们会将数据序列看作是一个数组来进行操作。 代…

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