python实现kNN算法

yizhihongxing

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模拟预测新型冠状病毒肺炎数据的完整攻略。 1. 收集数据 首先,我们需要收集新型冠状病毒肺炎的数据。数据可以从多个来源收集,比如政府公开数据、社交媒体、百度指数等。在这里,我们以丁香园实时疫情数据为例。 2. 数据处理 接下来,我们需要对收集到的数据进行处理和清洗。比如,我们可以使用Python的pandas库读取数据,并进行数…

    python 2023年6月3日
    00
  • 详解Python lambda函数

    下面是Python lambda函数的完整攻略。 Python lambda函数 Python中的lambda函数是一种匿名函数,它通常用于简单的函数定义,可以用于需要函数对象的任何地方。lambda函数的主要特点是它是匿名的,即没有具体的名称。 基本语法 lambda函数的基本语法如下: lambda arguments: expression 其中,ar…

    python-answer 2023年3月25日
    00
  • JS中正则表达式全局匹配正斜杠的方法

    在JavaScript中,正则表达式是一种强大的工具,可以用于字符串匹配和替换。有时候,我们需要在正则表达式中匹配正斜杠(/)字符。由于正斜杠是正则表达式的特殊字符,因此需要使用转义字符来匹配它。以下是“JS中正则表达式全局匹配正斜杠的方法”的完整攻略: 使用反斜杠转义正斜杠 在正则表达式中,可以使用反斜杠(\)来转义正斜杠。以下是示例代码: var str…

    python 2023年5月14日
    00
  • Python标准库re的使用举例(正则化匹配)

    Python标准库re的使用举例(正则化匹配) Python标准库re是一个用于正则表达式操作的模块,提供了多个函数用于正则表达式的配、查找、替换和分割字符串。本文将详细介绍re模块的常用函数及其使用方法,并提供两个示例说明。 re模块常用函数 在Python中,re模块供了多个函数用于正则表达式的配、查找、替换和分割字符串。下面是一些常用的: re.mat…

    python 2023年5月14日
    00
  • Python基础之文本常量与字符串模板

    Python基础之文本常量与字符串模板 文本常量 文本常量是指在程序中使用的不可修改的文本值,通常被称为字符串(string)。在Python中,文本常量可以用单引号或双引号括起来。 # 使用单引号表示文本常量 s1 = ‘hello’ # 使用双引号表示文本常量 s2 = "world" 在Python中,字符串可以进行一系列的操作,比…

    python 2023年6月5日
    00
  • Python正则获取、过滤或者替换HTML标签的方法

    以下是“Python正则获取、过滤或者替换HTML标签的方法”的完整攻略: 一、问题描述 在Python中,我们经常需要处理HTML文本,包括获取、过滤或者替换HTML标签。本文将详细讲解Python正则获取、过滤或者替换HTML标签的方法,并提供两个示例说明。 二、解决方案 2.1 获取HTML标签 在Python中,我们可以使用正则表达式获取HTML标签…

    python 2023年5月14日
    00
  • Python中有哪些关键字及关键字的用法

    Python中有35个关键字,这些关键字被用于识别Python语言中的特定语法结构或者命名空间中特定的名称。下面逐一介绍这些关键字以及它们的用法: False:表示布尔值假 None:表示不存在的对象,经常用于默认参数或者判断是否有返回值。 True:表示布尔值真 and:逻辑与操作符,如果两个操作数都为真,则返回True,否则返回False。 as:用于创…

    python 2023年5月13日
    00
  • Python – Kivy 框架 – Spinner 值列表

    【问题标题】:Python – Kivy framework – Spinner values listPython – Kivy 框架 – Spinner 值列表 【发布时间】:2023-04-06 01:19:01 【问题描述】: 我很难添加从数据库中提取的值(语言)列表,并希望它在 Spinner 小部件中作为值列表可用。 python部分: def …

    Python开发 2023年4月6日
    00
合作推广
合作推广
分享本页
返回顶部