云计算百科
云计算领域专业知识百科平台

机器学习及其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)

  • 详细步骤:
  • 计算每个特征的均值(μ)和标准差(σ)
  • 对每个特征值x进行变换:(x-μ)/σ
  • 示例:若特征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个样本

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

投票决策

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

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

数据准备

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

  • 详细步骤:
  • 计算每个特征的均值(μ)和标准差(σ)
  • 对每个特征值x进行变换:(x-μ)/σ
  • 示例:若特征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个样本

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

投票决策

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

  • 具体流程:
  • 统计K个邻居中每个类别出现的次数
  • 选择出现次数最多的类别作为预测结果
  • 平票处理:可随机选择或考虑更小的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)

赞(0)
未经允许不得转载:网硕互联帮助中心 » 机器学习及其KNN算法
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!