首页 > 编程语言 >K近邻算法

K近邻算法

时间:2024-07-14 23:31:03浏览次数:14  
标签:iris 实例 近邻 算法 train test import sklearn

原理

        K近邻(KNN)算法属于监督学习分类算法,主要用于解决分类问题。

输入:训练数据集,其中x_{i}为实例的特征向量,y_{i}为实例类别。

输出:实例x所属的y类别。

步骤

  1. 选择参数 K。
  2. 计算未知实例与所有已知实例的距离。
  3. 选择最近的 K 个已知实例。
  4. 根据少数服从多数的原则进行投票,将未知实例归类为 K 个最近邻中最多数的类别。

总结:KNN算法没有明显的训练过程,训练阶段仅保存样本,训练开销为零。处理测试样本时才进行 KKK 值选择和距离计算,因此是一种懒惰学习算法。

        K近邻算法的三个要素:

  • 距离度量方法:用于计算测试样本与训练样本之间的相似度,常用的距离度量方法有欧氏距离、曼哈顿距离、明可夫斯基距离等。
  •  K值大小:决定选择多少个最近邻居。K值过小可能导致模型对噪声数据过于敏感,K值过大可能导致模型过于平滑,忽略了数据的局部结构。
  • 分类的决策准则:根据距离最近的 KKK 个邻居对测试样本进行分类——多数表决法、加权多数表决法、概率分布法。

Skearn中的API

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

def load_and_preprocess_data():
    # 加载数据集
    iris = load_iris()
    # 数据标准化
    standard = StandardScaler()
    X = standard.fit_transform(iris.data)
    return X, iris.target

def train_knn_classifier(x_train, y_train, n_neighbors=3):
    # 模型训练
    knn = KNeighborsClassifier(n_neighbors=n_neighbors)
    knn.fit(x_train, y_train)
    return knn

def evaluate_model(estimator, x_test, y_test):
    # 利用模型进行预测
    predictions = estimator.predict(x_test)
    # 打印分类报告和准确率
    print(classification_report(y_test, predictions))
    print(f"Accuracy: {accuracy_score(y_test, predictions):.2f}")

if __name__ == '__main__':
    # 1. 加载和预处理数据
    X, y = load_and_preprocess_data()
    # 2. 划分训练集和测试集
    x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    # 3. 训练模型
    estimator = train_knn_classifier(x_train, y_train)
    # 4. 评估模型
    evaluate_model(estimator, x_test, y_test)

标签:iris,实例,近邻,算法,train,test,import,sklearn
From: https://blog.csdn.net/weixin_74254879/article/details/140425127

相关文章

  • 【简单介绍下K-means聚类算法】
    ......
  • 算法金 | 深度学习图像增强方法总结
    图像增强方法在数字图像处理中占有重要地位,它能够有效提高图像的视觉效果,增强图像的细节信息,从而在医学、遥感、工业检测等多个领域发挥重要作用1.空间域增强方法空间域增强方法是通过直接对图像像素进行操作来实现图像增强的技术。以下是几种常见的空间域增强方法:1.1直方图......
  • Java实现堆排序算法详解及优化
    引言堆排序(HeapSort)是一种基于堆数据结构的比较排序算法。它具有良好的时间复杂度特性,在许多实际应用中表现出色。本文将详细讲解如何使用Java实现堆排序算法,并结合图解和实例代码,帮助您全面理解这一高级排序算法。同时,我们还将探讨堆排序的优化方法,以进一步提高其性能。......
  • 合版印刷拼版算法问题
    合版印刷拼版算法问题所谓的合版印刷,就是我们会将来自不同客户、不同订单的卡片,拼版到同一个版面,然后制版印刷。在合版印刷中,需要解决如下的问题。一、矩形拼版算法将若干尺寸不尽相同的小尺寸矩形拼版(排版)到一个大的矩形里。怎么样使得能够排版的小矩形更多?(版面的利用率更高?)......
  • 算法学习笔记(8.6)-编辑距离问题
    目录Question:动态规划思路:第一步:思考每轮的决策,定义状态,从而得到dp表第二步:找出最优子结构,进而推导出状态转移方程第三步:确定边界条件和状态转移顺序代码实现:图例:空间优化:代码如下编辑距离,也称为Levenshtein距离,指两个字符串之间互相转化的最少修改次数,通常用于在信......
  • 算法学习笔记(8.5)-零钱兑换问题二
    目录Question:动态规划思路:代码实现:空间优化代码Question:给定n种硬币,第i种硬币的面值为coins[i-1],目标金额为amt,每种硬币可以重复选取,问凑出目标金额的硬币组合数量。动态规划思路:相比与上一题,本体的目标是求组合数量,因此子问题变为:前i种硬币能够凑出金额a的组合数......
  • (网络流)最大流-增广路算法
    最大流概念(一般形式、一般模型):在一张有向图中,给定源点、汇点,每条边单位时间可以流x容量的水。有无限的水从源点流入,从汇点流出。求单位时间内,从汇点流出的水的最大值。(网络流)最大流-增广路算法核心思路:每次找到一条可以流水的路径,将其称为增广路。增广路的所以算法本质上都......
  • Day68 代码随想录打卡|回溯算法篇---子集
    题目(leecodeT78):给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。方法:本题为求子集问题,采用回溯算法解决,与之前的组合与分割问题我们最后收集的是树上的叶子节点不同。子集......
  • 算法学习day12(动态规划)
    一、不同的二叉搜索树二叉搜索树的性质:父节点比左边的孩子节点都大;比右边的孩子节点都小;由图片可知,dp[3]是可以由dp[2]和dp[1]得出来的。(二叉搜索树的种类和根节点的val有关)当val为1时,左边是一定没有节点的,因为左边的值都要比根节点小;只有右边会有n-val个节点。所以当va......
  • 拓展欧几里得算法
    877.扩展欧几里得算法-AcWing题库878.线性同余方程-AcWing题库#include<bits/stdc++.h>usingnamespacestd;intexgcd(inta,intb,int&x,int&y){if(!b){x=1,y=0;returna;}else{intt=exgcd(b,a%b,y,x);......