一、机器学习概述
机器学习(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)
参数名 | 类型/选项 | 默认值 | 作用 |
---|---|---|---|
| int | 5 | 近邻数K,决定投票的样本数量 |
|
|
| 权重分配方式: |
|
|
| 近邻搜索算法: |
| int | 2 | 闵可夫斯基距离的幂参数: |
| str或可调用对象 |
| 距离度量标准(如 |
| int或None | None | 并行计算线程数( |
法名 | 功能 | 示例 |
---|---|---|
| 存储训练数据(惰性学习) |
|
| 返回预测类别 |
|
| 返回样本属于各类别的概率(基于邻居类别的频率) |
|
| 计算准确率(分类)或R²分数(回归) |
|
| 返回K近邻的索引和距离 |
|
四、算法示例
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)