当前位置: 首页 > news >正文

机器学习及其KNN算法

一、机器学习概述

机器学习(Machine Learning, ML)是人工智能的核心分支,旨在通过算法让计算机从数据中自动学习规律并优化性能,而无需显式编程。这一技术领域起源于20世纪50年代,随着计算能力的提升和大数据时代的到来,在21世纪得到了迅猛发展。

1. 基本概念

机器学习通过数据训练模型,使其能够识别模式、做出预测或决策。与传统编程不同,机器学习系统不是通过直接编写规则,而是通过分析大量数据来"学习"如何完成任务。

2. 核心思想

其核心是"从经验中自动改进",这一思想模仿了人类的学习过程。机器学习系统通过不断调整内部参数,逐步提高在特定任务上的表现。

3. 关键三要素

机器学习的实现依赖于三大基本要素:

  • 数据:训练材料,包括结构化数据(如数据库表格)和非结构化数据(如文本、图像)
  • 模型:输入到输出的映射函数,如决策树、神经网络等
  • 算法:优化方法如梯度下降、随机梯度下降等

机器学习算法分类

1. 监督学习(Supervised Learning)

监督学习使用标注数据训练模型,需要提供输入数据和对应的正确输出(标签)。主要应用包括:

  • 分类:预测离散类别

    • 垃圾邮件识别(二分类)
    • 手写数字识别(多分类)
    • 医疗影像诊断(如识别肿瘤类型)
  • 回归:预测连续数值

    • 房价预测(基于面积、位置等特征)
    • 股票价格预测
    • 销售预测

常用算法:

  • 线性回归
  • 逻辑回归
  • 支持向量机(SVM)
  • 决策树
  • 随机森林

2. 无监督学习(Unsupervised Learning)

无监督学习从无标签数据中发现隐藏的结构和模式。主要应用包括:

  • 聚类

    • K-Means:客户细分、文档分类
    • 层次聚类:生物学的物种分类
    • DBSCAN:异常检测
  • 降维

    • 主成分分析(PCA):数据可视化、特征提取
    • t-SNE:高维数据可视化
    • 自编码器:图像压缩
  • 关联规则学习

    • 购物篮分析(啤酒与尿布)
    • 推荐系统

3. 强化学习(Reinforcement Learning)

强化学习通过环境交互学习最优策略,其核心是"试错学习"。主要特点包括:

  • 应用场景

    • 游戏AI(AlphaGo、星际争霸AI)
    • 机器人控制(行走、抓取)
    • 自动驾驶决策
    • 金融交易策略
  • 关键概念

    • 智能体(Agent)
    • 环境(Environment)
    • 奖励(Reward)
    • 策略(Policy)
  • 算法分类

    • 基于价值的方法(Q-Learning)
    • 基于策略的方法(Policy Gradients)
    • Actor-Critic方法

机器学习库

在Python中进行机器学习开发时,Scikit-learn是最常用的机器学习库之一。它提供了各种监督学习和无监督学习算法,以及数据预处理、模型评估等工具,是机器学习入门和实践的最佳选择

pip install scikit-learn ==1.0.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
#篇使用版本为1.0.2
#导入方法如下
import sklearn

二、KNN(K-Nearest Neighbors,K近邻)算法

1.核心思想​

KNN是一种基于实例的监督学习算法,其核心假设是“相似的数据点在特征空间中彼此靠近”。通过计算待预测样本与训练集中所有样本的距离,选择最近的K个邻居,根据这些邻居的类别(分类任务)或数值(回归任务)进行预测。本篇以分类为主。

算法步骤​

数据准备

标准化/归一化特征:消除量纲差异对距离计算的影响(如使用StandardScaler)

  • 详细步骤:
    1. 计算每个特征的均值(μ)和标准差(σ)
    2. 对每个特征值x进行变换:(x-μ)/σ
    3. 示例:若特征A的范围是0-1000,特征B的范围是0-1,标准化后两个特征都服从均值为0、标准差为1的分布
  • 应用场景:当特征的单位不同(如身高cm vs 体重kg)或数值范围差异较大时

距离计算

常用距离度量:

欧氏距离(默认):适用于连续特征

  • 公式:d(x,y)=√(∑(x_i-y_i)^2)
  • 几何解释:两点在n维空间中的直线距离
  • 示例:在二维空间中,点(1,3)和(4,7)的距离为√((1-4)^2 + (3-7)^2)=5

曼哈顿距离:适用于网格路径数据

  • 公式:d(x,y)=∑|x_i-y_i|
  • 别称:城市街区距离
  • 适用场景:棋盘格移动、城市道路规划等网格状路径系统
  • 示例:在二维网格中,(1,3)到(4,7)的距离为|1-4| + |3-7|=7

选择K个最近邻

按距离排序,选取前K个样本

  • 关键步骤:
    1. 计算待分类样本与所有训练样本的距离
    2. 将所有距离按从小到大排序
    3. 选择距离最小的K个样本
  • 注意事项:K值通常取奇数(如3/5/7)以避免平票情况

投票决策

统计K个邻居的类别频率,将待分类样本划入频率最高的类别

  • 具体流程:
    1. 统计K个邻居中每个类别出现的次数
    2. 选择出现次数最多的类别作为预测结果
    3. 平票处理:可随机选择或考虑更小的K值
  • 扩展:也可使用加权投票,距离近的邻居投票权重更大

数据准备

标准化/归一化特征:消除量纲差异对距离计算的影响(如使用StandardScaler)

  • 详细步骤:
    1. 计算每个特征的均值(μ)和标准差(σ)
    2. 对每个特征值x进行变换:(x-μ)/σ
    3. 示例:若特征A的范围是0-1000,特征B的范围是0-1,标准化后两个特征都服从均值为0、标准差为1的分布
  • 应用场景:当特征的单位不同(如身高cm vs 体重kg)或数值范围差异较大时

距离计算

常用距离度量:

欧氏距离(默认):适用于连续特征

  • 公式:
  • 几何解释:两点在n维空间中的直线距离
  • 示例:在二维空间中,点(1,3)和(4,7)的距离为√((1-4)^2 + (3-7)^2)=5

曼哈顿距离:适用于网格路径数据

  • 公式:
  • 别称:城市街区距离
  • 适用场景:棋盘格移动、城市道路规划等网格状路径系统
  • 示例:在二维网格中,(1,3)到(4,7)的距离为|1-4| + |3-7|=7

选择K个最近邻

按距离排序,选取前K个样本

  • 关键步骤:
    1. 计算待分类样本与所有训练样本的距离
    2. 将所有距离按从小到大排序
    3. 选择距离最小的K个样本
  • 注意事项:K值通常取奇数(如3/5/7)以避免平票情况

投票决策

统计K个邻居的类别频率,将待分类样本划入频率最高的类别

  • 具体流程:
    1. 统计K个邻居中每个类别出现的次数
    2. 选择出现次数最多的类别作为预测结果
    3. 平票处理:可随机选择或考虑更小的K值
  • 扩展:也可使用加权投票,距离近的邻居投票权重更大

关键参数与优化​

  • 关键参数与优化

    K值选择

    K值的选择直接影响KNN模型的性能:

  • K值过小(如K=1)
    • 模型会过于关注局部噪声点,导致过拟合
    • 决策边界变得非常复杂且不规则
    • 示例:在图像分类中,K=1可能导致对个别异常像素过于敏感
  • K值过大
    • 模型会忽略数据的局部特征,导致欠拟合
    • 决策边界过度平滑,可能错过重要模式
    • 示例:在房价预测中,过大的K值可能使不同社区的房价差异被平均化
    • 优化方法

    • 交叉验证:
      • 采用k折交叉验证(如5折或10折)评估不同K值
      • 网格搜索:系统性地测试K值范围(如1-20)
    • 经验法则:
      • K≈√n(n为训练样本数)
      • 通常选择奇数K值以避免平票情况
      • 对于分类问题,初始可尝试K=3,5,7等小值

三、knn算法的运用

class sklearn.neighbors.KNeighborsClassifier( n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None)

参数名

类型/选项

默认值

作用

n_neighbors

int

5

近邻数K,决定投票的样本数量

weights

'uniform''distance'或可调用对象

'uniform'

权重分配方式:
'uniform':等权重投票
'distance':按距离反比加权

algorithm

'auto''ball_tree''kd_tree''brute'

'auto'

近邻搜索算法:
'ball_tree'/'kd_tree':树结构加速搜索(维度<20时高效)
'brute':暴力搜索(适合小数据集)

p

int

2

闵可夫斯基距离的幂参数:
p=1:曼哈顿距离
p=2:欧氏距离

metric

str或可调用对象

'minkowski'

距离度量标准(如'cosine''euclidean'

n_jobs

int或None

None

并行计算线程数(-1表示使用所有CPU核心)

法名

功能

示例

fit(X, y)

存储训练数据(惰性学习)

knn.fit(X_train, y_train)

predict(X)

返回预测类别

y_pred = knn.predict(X_test)

predict_proba(X)

返回样本属于各类别的概率(基于邻居类别的频率)

prob = knn.predict_proba([[1.5]])→ [[0.6, 0.4]]

score(X, y)

计算准确率(分类)或R²分数(回归)

accuracy = knn.score(X_test, y_test)

kneighbors(X)

返回K近邻的索引和距离

dist, indices = knn.kneighbors([[0.5]])

四、算法示例

from matplotlib import pyplot as plt
import numpy as np#knn算法预测
from sklearn.neighbors import KNeighborsClassifier
data = np.loadtxt('datingTestSet2.txt', delimiter='\t')
neigh = KNeighborsClassifier(n_neighbors=5)
x=data[:800,:-1]
y=data[:800,-1]
neigh.fit(x,y)
print(neigh.score(x,y))#准确率,自测
c1=data[800:,:-1]
c2=data[800:,-1]
right=neigh.score(c1,c2)
print(right)

http://www.dtcms.com/a/321514.html

相关文章:

  • 静态路由主备切换
  • 力扣-189.轮转数组
  • MetaBit基金会加码投资图灵协议,深化去中心化金融与元宇宙生态合作
  • mysql复制连接下的所有表+一次性拷贝到自己的库
  • 本地开发penpot源码支持AI原型设计(一)
  • node.js 学习笔记2 进程/线程、fs
  • PCB焊盘脱落的补救办法与猎板制造优势解析
  • 活到老学到老之使用jenv管理多个java版本
  • 微型导轨在半导体制造中有哪些高精密应用场景?
  • 【AI工具】解放双手,操控浏览器的工具对比,来了
  • 基于深度学习的nlp
  • ctfshow_萌新web9-web13-----rce
  • Java面试初中级:线程池的主要参数有哪些?
  • GridKernalGateway
  • 谷粒商城:检索服务
  • WSL 安装 Ubuntu
  • 50系显卡ubuntu20.04安装显卡驱动,解决gazebo不调用显卡的问题
  • 接口自动化-YAML
  • 【其他分类】Showrunner AI版的Netflix 互动故事创作平台 进行动画生成与微调、角色场景创建
  • A100用transformers推理gpt-oss
  • 【无标题】无名管道
  • (第二篇)spring cloud之Eureka注册中心
  • JDK、eclipse的安装,配置JDK、Tomcat并使用eclipse创建项目
  • SpringBoot 处理 RESTful 服务中的异常与错误
  • 我和 ChatGPT:一次用 AI 反观自己的技术成长之旅
  • Android 中解决 Button 按钮背景色设置无效的问题
  • Redis 7主从复制与哨兵模式搭建
  • k8s-nfs实现创建sc的两种方式
  • ConcurrentDictionary 详解:.NET 中的线程安全字典
  • 并发编程(五)ThreadLocal