python实现kNN算法

Python实现kNN算法的完整攻略

kNN算法是一种常用的机器学习算法,用于分类和回归问题。本文将详细讲解Python实现kNN算法的整个攻略,包括算法原理、实现过程和示例。

算法原理

kNN算法的基本思想是通过计算待分类样本与训练集中所有样本距离,选取距离近的k个样本,根据这k个样本的类别进行投票,将待分类样本归票数多的类别。在回归中,kNN算法的基本思想是通过计算待预测样本与训练集中所有样本的距离,选取距离最近的k个样本,根据这k个样本的值进行平均或加权平均,得到待预测样本的测值。

具体来说算法分为以下几个步骤:

  1. 计算待分类样本与训练集中所有样本的距离。
  2. 选取距离最近的k个样本。
  3. 根据这k个样本的类别进行投票,将待分类样本归为数最多的类别。
  4. 在回归问题中,根据这k个样本的值进行平均或加权平均,得到待预测样本的预测值。

实现过程

以下是使用Python实现kNN算法的示例代码:

import numpy as np
from collections import Counter

def euclidean_distance(x1, x2):
    return np.sqrt(np.sum((x1 - x2)**2))

class KNN:
    def __init__(self, k=3):
        self.k = k

    def fit(self X, y):
        self.X_train = X
        self.y_train = y

    def predict(self, X):
        y_pred = [self._predict(x) for x in X]
        return np.array(y_pred)

    def _predict(self, x):
        distances = [euclidean_distance(x, x_train) for x_train in self.X_train]
        k_indices = np.argsort(distances)[:self.k]
        k_nearest_labels = [self.y_train[i] for i in k_indices]
        most_common = Counter(k_nearest_labels).most_common(1)
        return most_common[0][0]

上述代码中,首先定义了一个euclidean_distance函数,用于计算欧几里得距离。然后定义了一个KNN类,包含fit和predict两个方法。在fit中,将训练集和y保存为类属性。在predict方法中,遍历待分类样本X,调用_predict方法进行预测。在_predict方法中,计算待分类样本与训练集中所有样本的距离,选取距离最近的k个样本,根据这k个样本的类别投票,将待分类样本归为票数最多的类别。

示例1

以下是使用kNN算法进行分类的示例代码:

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

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 数据预处理
scaler = StandardScaler()
X = scaler.fit_transform(X)

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

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

# 预测测试集
y_pred = knn.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)

上述代码中,首先使用load_iris函数加载鸢尾花数据集。然后使用StandardScaler对数据进行预处理,将数据进行标准化。接着使用train_test_split函数将数据集划分为训练集和测试集。然后使用KNN类训练模型,并使用predict方法预测测试集。最后使用accuracy_score计算准确率。

示例2

以下是使用kNN算法进行回归的示例代码:

import numpy as np
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import StandardScaler

# 加载数据集
boston = load_boston()
X = boston.data
y = boston.target

# 数据预处理
scaler = StandardScaler()
X = scaler.fit_transform(X)

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

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

# 预测测试集
y_pred = knn.predict(X_test)

# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print('MSE:', mse)

上述代码中,首先使用load_boston函数加载波士顿房价数据集。然后使用StandardScaler对数据进行预处理,将数据进行标准化。接着使用train_test_split函数将数据集划分为训练集和测试集。然后使用KNN类训练模型,并使用predict方法预测测试集。最后使用mean_squared_error函数计算均方误差。

总结

本文详细讲解了Python实现kNN算法的整个攻略,包括算法原理、实现过程和示例。kNN算是一种常用的机器学习算法,可以用于分类和回归问题。在Python中,可以使用numpy和collections模块实现kNN算法,实现程上述所示。通过示例看到kNN算法在实际应用中的灵活性和实用性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现kNN算法 - Python技术站

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

相关文章

  • python判断一个对象是否可迭代的例子

    判断一个对象是否可迭代是Python中常见的一个问题,下面来详细说明如何判断一个对象是否可迭代。 能否使用 for 循环遍历 使用 for 循环可以遍历一个可迭代对象,所以判断一个对象是否可迭代,可以尝试使用 for 循环来遍历这个对象。如果能够正常遍历,就说明这个对象可迭代。 下面是一个示例代码: items = [2, 4, 6] for item in…

    python 2023年6月3日
    00
  • 测试、预发布后用python检测网页是否有日常链接

    测试、预发布后用Python检测网页是否有日常链接攻略 在测试、预发布环境中,我们需要检测网页是否有日常链接。本攻略将介绍如何使用Python检测网页是否有日常链接,包括获取网页源代码、解析HTML、检测链接等操作。 步骤1:获取网页源代码 在Python中,我们可以使用requests库获取网页源代码。以下是获取网页源代码的示例代码: import req…

    python 2023年5月15日
    00
  • python selenium 获取标签的属性值、内容、状态方法

    Python Selenium 获取标签的属性值、内容、状态方法 在使用Python Selenium进行web自动化测试时,我们有时需要获取一些元素的属性值、内容或状态。在本篇文章中,我们将介绍如何使用Python Selenium获取这些信息的方法。 获取标签属性值 我们可以使用get_attribute()方法来获取元素的属性值,方法的参数为要获取的属…

    python 2023年6月3日
    00
  • Python学习_几种存取xls/xlsx文件的方法总结

    那我来为您详细讲解一下关于 “Python学习_几种存取xls/xlsx文件的方法总结” 的完整实例教程。 1.简介 在Python的数据处理中,xls/xlsx格式的文件是比较常见的,因此掌握对它的读写操作是必要的。在本教程中,我们将对几种不同的Python库以及它们提供的方法进行总结,帮助大家选择适合自己需求的方法。 2.几种库的介绍 2.1 xlrd …

    python 2023年5月13日
    00
  • Python中的元类编程入门指引

    下面我会详细讲解关于“Python中的元类编程入门指引”的完整攻略。 元类的定义 元类(Metaclass)在Python中是一种高级的编程技巧,它指的是类的类,即类是从元类生成的对象。元类掌管着创建类的一整套流程,也就是说,元类可以控制实例化、属性、方法等的创建过程。 通常情况下,我们使用的都是Python内置的type这个元类,每当我们定义一个类时,Py…

    python 2023年6月2日
    00
  • python实现创建新列表和新字典,并使元素及键值对全部变成小写

    创建新列表和新字典并把其中的元素和键值对都变为小写可以分别使用以下两种方法实现: 1.创建新列表并把其中的元素都变为小写: 首先,需要定义一个原始列表original_list,然后使用列表推导式创建一个新列表new_list。在列表推导式中,对于原始列表中的每一个元素,我们都使用字符串的lower()方法把它转换为小写形式。 original_list =…

    python 2023年5月13日
    00
  • Pycharm简单使用教程(入门小结)

    Pycharm简单使用教程(入门小结) 简介 Pycharm是一款适用于Python开发的集成开发环境,可以帮助开发者快速高效地进行Python代码的编写、调试和测试。本篇教程将介绍Pycharm的基础操作,帮助Python初学者更好地理解和使用Pycharm。 安装 Pycharm的安装非常简单,只需要下载相应版本的安装包,然后安装即可。可以到Pychar…

    python 2023年5月30日
    00
  • Python模仿POST提交HTTP数据及使用Cookie值的方法

    首先,我们需要了解一下Python中进行POST提交HTTP数据的基本方法。 Python模拟POST提交HTTP数据的基本方法 要实现POST提交HTTP数据,可以使用Python中的requests库。requests库是Python HTTP库的一种,它允许您以简单而优雅的方式发送HTTP/1.1请求。 首先需要安装requests库: pip ins…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部