[机器学习]KNN算法

ML-kNN 多标签k近邻算法 MLL Week 1 ML-kNN 多标签k近邻算法 MLL Week 1ML-kNN 多标签k近邻算法 MLL Week 1 传统kNN 多标签kNN  学习张敏灵老师的《ML-kNN: a lazy learning approach to multi-label learning》的学习笔记。传统kNN  k近邻算法(k-Nearest Neighbour, KNN)是机器学习中最基础,最简单的常用算法之一。其思想 阅读详情

1 KNN算法简介

  • KNN算法思想:如果一个样本在特征空间中的K个最相似的样本中的大多数属于某一个类别,则该样本也属于这个类别。

  • K值过小:用较小领域中的训练实例进行预测。
    • 容易受到异常点的影响
    • K值的减小意味着整体模型变得复杂,容易发生过拟合
  • K值过大:用较大邻域中的训练实例进行预测。
    • 受到样本均衡的的问题
    • K值的增大意味着整体的模型变得简单,欠拟合

  • K值调优的方法:交叉验证、网格搜索;选择奇数,不要选择类别个数的整数倍;5,7()
  • 分类问题&回归问题

2 KNN算法API实现

from sklearn.neighbors import KNeighborsClassifier

def dm01_knnapi_classifier():
    estimator=KNeighborsClassifier(n_neighbors=1)
    X=[[0],[1],[2],[3]]
    y=[0,0,1,1]
    estimator.fit(X,y)
    myret=estimator.predict([[4]])
    print('myret->',myret)

dm01_knnapi_classifier()

 

from sklearn.neighbors import KNeighborsRegressor
def dm02_knnapi_regressor():
    estimator=KNeighborsRegressor(n_neighbors=2)
    X=[[0,0,1],
       [1,1,0],
       [3,10,10],
       [4,11,12]]
    y=[0.1,0.2,0.3,0.4]
    estimator.fit(X,y)
    myret=estimator.predict([[3,11,10]])
    print('myret->',myret)
dm02_knnapi_regressor()

3 距离度量

3.1 欧氏距离(MSE,L2)

3.2 曼哈顿距离(MAE,L1)

  • 也称“城市街区距离”,曼哈顿城市特点:横平竖直。

3.3 切比雪夫距离(Chebyshev Distance)

3.4 闵可夫斯基距离(Minkowski Distance)

4 特征预处理

  • 归一化易受异常值影响
  • 自然界中数据符合高斯分布

# 归一化
from sklearn.preprocessing import  MinMaxScaler
def dm01_MinMaxScaler():
    data=[
        [90,2,10,40],
        [60,4,15,45],
        [75,3,13,46]
    ]
    # 初始化归一化对象
    transform=MinMaxScaler()
    # 对原始特征进行变换
    # data=transformer.fit_transform(data)
    # 求最大值、最小值
    transform.fit(data)
    data=transform.transform(data)
    print(data)
dm01_MinMaxScaler()

# 标准化
from sklearn.preprocessing import StandardScaler
def dm03_StandardScale():
    data=[
        [90,2,10,40],
        [60,4,15,45],
        [75,3,13,46]
    ]
    # 初始化标准化对象
    transformer=StandardScaler()
    
    # 对原始特征进行变换
    data=transformer.fit_transform(data)
    # 打印归一化后的结果
    print(data)
    # 打印每一列数据的均值和标准差
    print('transfer.mean-->',transformer.mean_)
    print('transfer.var-->',transformer.var_)
dm03_StandardScale()

5 [案例]Iris分类

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

# 加载数据集
dataset = load_iris()

# 划分数据集
x_train, x_test, y_train, y_test = train_test_split(
    dataset.data, dataset.target, test_size=0.2, random_state=0
)

# 数据标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

# 模型训练
knn = KNeighborsClassifier()

# 使用交叉验证网格搜索进行超参数调优
knn = GridSearchCV(estimator=knn, param_grid={'n_neighbors': [1, 3, 5, 7]}, cv=5)
knn.fit(x_train, y_train)
print('knn.best_estimator_ --->', knn.best_estimator_)

# 模型评估
knn_score = knn.score(x_test, y_test)
print('knn_score --->', knn_score)

# 模型预测
new_data = [[0.5, 1.2, 2.4, 5.2]]
new_data = transfer.transform(new_data)
print('预测值为 --->', knn.predict(new_data))
print('预测结果概率分布 --->', knn.predict_proba(new_data))

 

6 超参数选择方法

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

# 加载数据集
dataset = load_iris()

# 划分数据集
x_train, x_test, y_train, y_test = train_test_split(
    dataset.data, dataset.target, test_size=0.2, random_state=0
)

# 数据标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

# 模型训练
knn = KNeighborsClassifier()

# 使用交叉验证网格搜索进行超参数调优
knn = GridSearchCV(estimator=knn, param_grid={'n_neighbors': [1, 3, 5, 7]}, cv=5)
knn.fit(x_train, y_train)
print('knn.best_estimator_ --->', knn.best_estimator_)

# 模型评估
knn_score = knn.score(x_test, y_test)
print('knn_score --->', knn_score)

# 模型预测
new_data = [[0.5, 1.2, 2.4, 5.2]]
new_data = transfer.transform(new_data)
print('预测值为 --->', knn.predict(new_data))
print('预测结果概率分布 --->', knn.predict_proba(new_data))

7 [案例]手写数字识别

import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler,MinMaxScaler
from sklearn.neighbors import KNeighborsClassifier
import joblib
import matplotlib.pyplot as plt

# 加载数据
dataset = pd.read_csv('手写数字识别.csv')

# 分割数据集
x = dataset.iloc[:, 1:].values
y = dataset.iloc[:, 0].values
x_train, x_test, y_train, y_test = train_test_split(
    x, y, test_size=0.2, stratify=y, random_state=0
)

# 数据归一化
transfer = MinMaxScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

# 模型训练
knn = KNeighborsClassifier()

# 使用交叉验证网格搜索进行超参数调优
knn = GridSearchCV(estimator=knn, param_grid={'n_neighbors': [3, 5, 7]}, cv=5)
knn.fit(x_train, y_train)
print('knn.best_estimator_', knn.best_estimator_)

# 模型评估
acc = knn.score(x_test, y_test)
print('acc', acc)

# 模型保存
joblib.dump(knn, 'knn.pth')

# 加载模型
knn = joblib.load('knn.pth')

# 读取图片(自动用归一化)
img = plt.imread('demo.png')

# 图片数据处理
img_data = img.reshape(1, -1)
img_pred = knn.predict(img_data)
print('img_pred', img_pred) 

机器学习(一):K-近邻算法(KNN)分类与回归 这是自己的第一篇机器学习的文章,单纯做自己的学习笔记,一起加油进步 K-近邻 算法(KNN) 阅读详情

相关推荐

机器学习经典算法:K近邻算法(KNN)

K近邻算法(KNN)是一种基于距离的机器学习算法,通过寻找离目标点最近的K个邻居并综合其信息完成分类或回归。它简单直观,无需训练,但计算成本较高,对K值和数据分布敏感。

Norah 的技术博客 1286

机器学习算法分类概要汇总(一)ML-KNN算法(含代码)

笔者结合机器学习过程中利用MATLAB编程所实现的一些算法来对一些常见算法进行了函数封装便于初学人士进行参考和利用,这里简要介绍算法的概念和主要方法,适用于初学者去理解算法!注意!是理解算法,本文主要以例子来讲述算法,更加注重实际应用。更加详细算法的实现请见其他博客。 一、ML-KNN算法 算法概要介绍。 多标签学习算法是基于KNN算法的一种改进算法,这里大概介绍一下ML—KNN算法的实现过程,结合一种例子方便不了解的人士来学习,直接上例子,便于大家去理解, 问题引出 先给出一列三维样本特征及其三维坐标点

lvoutongyi的博客 3482

【机器学习】K-近邻算法(KNN)全面解析

K-近邻算法(K-Nearest Neighbors, KNN)是一种基于实例的学习方法,属于监督学习范畴。它的工作原理简单直观:给定一个训练数据集,对新的输入实例,KNN算法通过计算其与训练集中每个实例的距离,找出距离最近的K个邻居,然后根据这些邻居的类别(对于分类任务)或值(对于回归任务)来预测新实例的类别或值。KNN因其简单高效和无需训练过程的特点,在众多领域中得到广泛应用,如模式识别、推荐系统、图像分类等。KNN算法的核心思想是“物以类聚”,即相似的数据应有相似的输出。

鑫宝的博客 6640

机器学习——K-近邻算法(KNN)

K-近邻算法(K-Nearest Neighbors, 简称 KNN)是一种基于实例的机器学习算法,广泛应用于分类和回归任务。它通过计算数据点之间的相似度(通常是距离度量),然后预测新的数据点的标签或数值。在图像分类任务中,KNN 可以通过计算图像特征向量之间的距离来分类,例如手写数字识别。KNN 可用于垃圾邮件检测,通过比较新邮件和历史邮件的相似性,判断其类别。原则,根据 kkk 个最近邻居的类别进行投票,选出出现最多的类别。基于用户相似度的推荐系统中,KNN 常用于查找兴趣相似的用户群体。

CYTLOVELY的博客 4924

【机器学习实战 Task1】 (KNN)k近邻算法的应用

1 背景 1.1 k近邻算法的概述 (1)k近邻算法的简介 k-近邻算法是属于一个非常有效且易于掌握的机器学习算法,简单的说就是采用测量不同特征值之间距离的方法对数据进行分类的一个算法。 (2)k近邻算法的工作原理 给定一个样本的集合,这里称为训练集,并且样本中每个数据都包含标签。对于新输入的一个不包含标签的数据,通过计算这个新的数据与每一个样本之间的距离,选取前k个,通常k小于20,以k个剧里最近的数据的标签中出现次数最多的标签作为该新加入的数据标签。 (3)k近邻算法的案例 当前统计了6部

202xxx的博客 8723

机器学习(一) K-近邻算法(KNN)

K-近邻算法(KNN)详解机器学习(一):K-近邻算法(KNN)概述K-近邻算法的具体应用K-近邻算法的具体代码使用K-邻近算法实现手写识别系统插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 机器学习(一): K-近邻算法(KNN)概述 K-近邻算法采用测量不同特征值之间的距离方法进行分类

Scracs的博客 1007

OpenCV机器学习(4)k-近邻算法(k-Nearest Neighbors, KNN)cv::ml::KNearest类

cv::ml::KNearest 是 OpenCV 机器学习模块中的一部分,它提供了实现 k-近邻算法(k-Nearest Neighbors, KNN)的方法。KNN 是一种简单但功能强大的分类和回归算法,基于实例的学习方法,即根据最近邻的类别来预测新样本的类别。

jndingxin的专栏 775

机器学习实战k-邻近算法(kNN)简单实施代码解读

一.概念k-邻近算法是最简单的机器学习算法之一。k-邻近算法采用测量不同特征值之间的距离(具体说是欧氏距离)的方法进行分类。输入待分类的数据后,计算输入特征与样本集数据对应特征的距离,选择样本集中与输入特征距离最小的前k个样本,统计这k个样本数据中出现次数最多的类别作为新数据的分类。二.kNN的简单实施代码及注释from numpy import * import operatordef creat

SCUT_Arucee的博客 3270

ML-kNN 多标签k近邻算法

学习张敏灵老师的《ML-kNN: a lazy learning approach to multi-label learning》的学习笔记。 传统kNN   k近邻算法(k-Nearest Neighbour, KNN)是机器学习中最基础,最简单的常用算法之一。其思想非常直接:如果一个样本在特征空间中的k个最相似(即特征空间中距离最邻近)的样本中的大多数属于某一个类别,则该

xiaopihaierletian的博客 6059

机器学习笔记九:K近邻算法(KNN)

KNN原理和实战

谢小小XH 7248

Visio 2013安装遇阻?手把手教你搞定注册表权限错误1402(附64位系统特殊处理)

本文详细解析了Visio 2013安装过程中常见的注册表权限错误1402问题,特别是在64位系统下的特殊处理方法。通过分步指导如何修改注册表权限、处理Wow6432Node分支以及使用高级工具如subinacl,帮助用户顺利完成安装并避免常见连带问题。

t8u9v0w1x的博客 546

ML-kNN 多标签k近邻算法 MLL (转)

http://blog.youkuaiyun.com/Kodoo/article/details/49905877 ML-kNN 多标签k近邻算法 MLL Week 1 ML-kNN 多标签k近邻算法 MLL Week 1 传统kNN多标签kNN   学习张敏灵老师的《ML-kNN: a lazy learning approach

csdn_chuxuezhe的博客 2603

【机器视觉】Halcon 最新版本安装教程(HALCON 24.11.1.1 Progress-Steady)

注:如果使用评估版本,下载前先了解最新评估授权密钥所支持的版本。。近几年不同版本安装过程类似,均可参考本教程。

OpenSeek的博客 3万+

Machine Learning机器学习之K近邻算法(K-Nearest Neighbors,KNN)

K近邻算法最早由美国的科学家Thomas Cover 和 Peter Hart 在 1967 年提出,并且在之后的几十年中得到了广泛的研究和应用。KNN 算法是一种基于实例的学习方法,它不像其他算法一样需要对数据进行假设或者参数拟合,而是直接利用已知的数据样本进行预测。KNN 算法是一种简单有效的分类和回归算法,算法的核心思想是“近朱者赤,近墨者黑”,即认为与新样本距离较近的训练样本更可能具有相同的类别或者输出。它的基本假设是“相似的样本在特征空间中具有相似的类别”。

a910247的博客 1024

避坑指南:STM32CubeMX安装后,你的第一个工程为什么中文全是乱码?

本文详细解析了STM32CubeMX安装后中文乱码问题的根源及解决方案。从诊断乱码现象到分析编码冲突背景,提供了新项目UTF-8化、旧项目GBK兼容及版本降级等多种实用方案,帮助开发者彻底解决这一常见问题。

weixin_30699955的博客 475

FPGA矩阵键盘计算器Verilog实现与Quartus仿真全流程解析

本文详细解析了基于FPGA和Verilog的矩阵键盘计算器实现全流程,包括矩阵键盘扫描、状态机设计、算术运算逻辑及数码管显示驱动。通过Quartus仿真与Testbench测试,确保设计稳定性与准确性,适合数字逻辑设计初学者学习FPGA开发与硬件描述语言应用。

chair的专栏 743

【机器学习实验一】k近邻算法(KNN)

【机器学习实验一】k近邻算法(KNN) 一、配置环境 ​ 看了很多教程,最终决定安装Anaconda+Pycharm的环境。因为Anaconda中包含了很多库,使用的时候就不用另外手动安装了。而Pycharm作为一款针对Python的编辑器,配置简单,功能强大,使用起来省时省心,对初学者友好,这也是编程验室推荐新手使用Pycharm的原因。 基础安装教程大家可参考:​Python环境的安装(Anaconda+Jupyter notebook+Pycharm) - 知乎 如果大家决定安装Anaconda+Py

qq_47321558的博客 1805

OpenCV实战:5分钟搞定图像拼接(附Python代码)

本文通过OpenCV实战教程,详细讲解如何使用Python在5分钟内完成图像拼接。重点介绍`findHomography`函数和单应性矩阵的应用,提供完整的代码示例和常见问题解决方案,帮助开发者快速掌握图像拼接技术。

weixin_26833503的博客 121

机器学习——KNN邻近算法

一. KNN算法介绍 KNN 算法概述 Cover和Hart在1968年提出了最初的邻近算法。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。KNN是一种分类(classification)算法,它输入基于实例的学习(instance-based learning),属于懒惰学习(lazy learning)即KNN没有显式的学习过程,也就是说没有训练...

阿鹏的摇滚小站 1383

基于NAS的OpenClaw部署方案:家庭服务器架构设计

本文提出了一种基于NAS的家庭服务器架构方案,用于部署OpenClaw AI系统。文章分析了NAS作为部署平台的六大优势:集中化数据管理、大容量存储、多用户并发访问、7×24小时稳定运行、低功耗设计以及丰富的扩展能力。针对不同用户需求,详细对比了主流NAS型号(如Synology DS923+、QNAP TS-870等)和DIY方案的硬件配置,并给出了最低/推荐配置标准。在部署方案部分,重点介绍了Synology DSM和TrueNAS两种系统的初始化步骤,以及通过Docker容器安装Python、Redi

博客 2509

【YOLO11改进 - 特征融合】利用Hyper-YOLO 的混合聚合网络(MANet)改进yolo11,提升基础网络的特征提取能力

【YOLO11改进 - 特征融合】利用Hyper-YOLO 的混合聚合网络(MANet)改进yolo11,提升基础网络的特征提取能力

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 905

机器学习笔记 十四:k-近邻算法(kNN)的实现

最近邻 (k-Nearest Neighbors, KNN) 算法是一种分类算法, 1968年由 Cover和 Hart 提出, 应用场景有字符识别、 文本分类、 图像识别等领域。该算法的思想是: 一个样本与数据集中的k个样本最相似, 如果这k个样本中的大多数属于某一个类别, 则该样本也属于这个类别。数据集来源于相亲分类数据,帮助需要的人进行配对。 ...

amyniez的博客,欢迎交流讨论 1294

最优化方法与数学建模

在本篇博客中,我们将探讨最优化方法在数学建模中的应用。首先,我们将介绍几种常见的最优化方法,如梯度下降、牛顿法和遗传算法。接着,我们将详细阐述这些方法的原理和算法。最后,我们将通过一个数学建模案例,展示如何使用Matlab实现这些方法。本文旨在为大家提供一个清晰的思路,以便更好地理解和应用最优化方法。

YOLO 439

机器学习之 KNN 算法学习总结

知识掌握:深入理解了 KNN 算法的原理和实现流程,掌握了欧式距离、曼哈顿距离等距离度量方法,学会了使用交叉验证选择最优 K 值,能够运用 sklearn 库实现基于 KNN 的分类任务。实践能力:通过电影分类和鸢尾花分类案例,提升了将理论知识应用于实际问题的能力,熟悉了数据集加载、划分、模型训练、评估和预测的完整流程。算法特点认知:认识到 KNN 算法是一种 “惰性学习” 算法,不需要预先训练模型,而是在预测时进行计算,其性能受 K 值和距离度量方式影响较大,在实际应用中需合理选择参数。

2201_76007872的博客 2206

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

多标签学习ML-KNN算法

文章目录 Ml-KNN: A Lazy Learning Approach to Multi-Label Learning Pattern Recognition 40 (2007) 2038 – 2048 1 MLKNN简介 2 评价指标 2.1 海明损失(Hamming loss,HL) 2.2 1-错误率(One-error,OE) 2.3 覆盖率(...

但求心安的博客 6049

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: [机器学习]概述
下一篇: [机器学习]线性回归算法
Letmooning
博客等级 码龄2年 503粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值