欢迎来到机器学习的世界

初识机器学习

很多时候,学习它并不一定就是一件痛苦的事情,如果你觉得痛苦,也许只是方法不对。跳出这些知识本身,在更高的层面深入理解融会贯通,才能真正学好机器学习。

算法就是训练过程中如何根据数据找到这个模型的方法。

训练就是利用算法进行学习找到模型的过程。

不同于训练,学习更大意义上是说在训练过程中如何去缩小误差,进行负反馈迭代的一个过程。

机器学习的技术栈

机器学习概述

机器学习基础知识

把所有特征用一个矩阵x来表示,类别用一个列向量y来表示,机器学习就是在它们两者之间找到一个函数变换关系f,能够描述从x到y的一个映射关系。

机器学习的训练过程就是根据样本点找到这个分类函数及其参数的过程,如果再有新的样本点,我们可以通过计算得到它们的位置,从而判断它们的类别了。

结构化数据可以直接用数字表示,非结构化数据为文本、声音、图像等不能用数字表示,非结构化数据可以通过寻找特征来实现结构化(如鸢尾花数据集)或者把每个像素点看作一个特征直接处理。

机器学习的主要任务

监督学习

非监督学习

降维的目的是在于不丢失太多信息的情况下尽量的简化数据,比如特征之间可能存在很大的关联关系,因此可以把多个特征合并为一个特征,也就是所谓的特征提取,就实现了信息的压缩。

半监督学习

文本的文档分类,就比较适合于半监督学习。

强化学习

强化学习是根据观测环境,估计它的状态,再执行操作,从而获得汇报或惩罚。(应用:AlphaGo)

批量学习

训练学习

基于实例的学习

基于模型的学习

机器学习的误区和局限

快速掌握四大必备工具

Anaconda命令行操作

conda -V 查看版本

conda update conda 更新conda软件包

conda env list 查看虚拟环境

conda create -n 虚拟环境名 python(=3.x) 创建虚拟环境并配置python环境

conda activate 虚拟环境名 激活虚拟环境使用

conda deactivate 退出虚拟环境

conda list 列出当前环境下的所有下载包及其依赖关系

conda install numpy 安装numpy库及其依赖关系

conda search numpy 搜索numpy库的所有版本

conda uninstall/remove numpy 卸载numpy库及其依赖关系

conda remove -n 虚拟环境名 –ALL(先退出虚拟环境才能删除)

jupyter notebook 打开jupyter notebook进行使用

Ctrl+C 关闭jupyter notebook进程

Jupyter的基础使用

一、快捷键操作

Run Selected Cell 运行选择块并且移动(Shift+Enter)

Run Selected Cell and Insert Below 运行选择块并且往下插入新块(Alt+Enter)

Run Selected Cell and Do not Advance 运行选择块但不移动(Ctrl+Enter)

A 按A键往上插入块,B 按B键往下插入块。

二、Markdown模式

M 按M键切换Markdown模式,Y 按Y键退出Markdown模式。

Jupyter的高级使用(魔法命令)

writefile pycat run

生成test.py,放入第2-3行的代码。

显示test.py中的内容,如下所示。

直接运行test.py,运行结果如下。

调用test.py中的Test函数的两种方式,运行结果如下。

timeit time

whos lsmagic magic

%whos 可以将前面引入的包定义函数变量都打印出来,同时可以看到对应的值。

%lsmagic 查看更多魔法命令。

%magic 查看更多魔法命令的用法。

Numpy基础

导入Numpy

Numpy与原生Python的性能对比

数组x是由 1~n数字组成

求数组x的中所有数的平方之和,令n=1000000.

Python原生语法实现

List列表不限定数据类型,只是将存储的数据看成是数组或者多维数组,并没有将其看成是向量或矩阵,因而也没有通过相应的运算。

Numpy实现

List列表限定数据类型,在处理数据时更加高效,且具有向量或矩阵的运算。

Numpy的数组创建

导入numpy

创建Numpy数组

Numpy数组的属性

.ndim表示数组的维度数量。

.shape表示数组的形状或维度。

.size表示数组的总个数。

.dtype表示数组中元素类型。

创建数组的便捷函数(ndarray对象及其创建)

ones

默认创建的是浮点型,可通过添加dtype=’int64’指定数据类型为int64。

zeros

full

empty

创建空数组,数组值未被初始化,都是系统随机分配的。

arange

利用arange创建等差数组。

linspace

利用linspace创建等差数组,起始为0,终点为10,数组个数为5。

random

生成0~1之间的随机数。

rand

randint

59行:生成0~5之间的随机数,不包含5

62行:生成5~10之间的随机数,不包含10

seed

设置seed随机种子,保证随机的情况下,又不会使每次随机结果不一致。

randn

返回具有标准正态分布的随机数,均值为0,标准差为1。使用方式和rand一样,只是取值范围不同。

normal

可以设置均值和方差,生成具有高斯分布的随机数据。不设置参数,则同randn。

76行:生成均值为10,标准差为2,数组元素个数为20的随机数数组。

uniform

返回的是具有均匀分布的随机数据。

Numpy数组的基础索引

基础索引

一维数组

二维数组

X为A的子数组,X = A[:2,:3],正常来说,X和A互为引用关系。

为避免一方修改原数组或子数组会数据改变的情况,应改为X = A[:2,:3].copy()。

Numpy数组的合并与拆分

数组的合并

np.vstack代表行合并,np.hstack代表列合并。

np.concatenate((X,B),axis=0)代表行合并,np.concatenate((X,B),axis=1)代表列合并。

数组的拆分

np.vsplit代表行分拆,np.hsplit代表列分拆。

Numpy数组的矩阵运算

Numpy的矩阵运算有何不同

一元运算

二元运算

矩阵运算

Numpy数组的统计运算

最大最小值

常见统计量

补充内容

Numpy中的arg运算

argmax重点在自变量,而非函数值。

最大值 最小值

排序

使用索引

partition 分区

高维情况

Numpy中的神奇索引和比较

神奇索引

神奇索引用于二维数组

比较

比较结果和神奇索引的使用

比较的更多应用

与& 或| 非~

Matplotlib基础语法

绘制plot曲线

绘制scatter散点图

“近朱者赤,近墨者黑”的KNN算法

本章总览

KNN算法(K最近邻分类算法),也称为k-Nearest Neighbors或KNN,是一种基础且广泛使用的机器学习算法,主要用于分类和回归任务。

‌该方法的思路是:在特征空间中,如果一个样本附近的k个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别。

KNN算法核心思想和原理

KNN分类任务代码实现

演示KNN算法原理

KNN 预测的过程

scikit-learn中的KNN算法

数据集划分:训练集与预测集

生成数据集

划分数据集

sklearn划分数据集

模型评价

1、加载数据集

2、拆分数据集

3、预测

4、评价

超参数

加载数据

超参数

sklearn 超参数搜索

特征归一化

特征归一化是为了消除数据特征的量纲之间的影响,使得不同特征具备一定程度上的可比性,能够同时反映每个特征的重要程度。

最大最小值归一化

受特殊值影响较大。

零均值归一化

scikit-learn 中的StandardScaler

使用归一化

注意事项

对于原始的数据集,通常情况下,首先需要拆分成训练集和测试卷,对训练集进行归一化操作。假如我们使用零均值归一化的方式,那么首先要求得训练集的均值train_nean和标准差train_standard,再继续进行归一化的操作,得到结果用于训练模型。但在模型评测时,测试集也需要进行归一化处理,此处进行操作不是使用测试集均值test_nean和标准差test_standard,而是要用训练集的均值train_nean和标准差train_standard计算归一化数据。

KNN回归任务代码实现

KNN分类模型转化回归模型

KNN回归 Scikit learn 实现

Boston 数据集

归一化

KNN优缺点和适用条件

“大禹治水,庖丁解牛”的线性算法

本章总览

如果说KNN体现了人们对空间距离的理解,那么线性算法则体现了人们对事物趋势上的一种认识。

线性回归、多项式回归主要是做预测工作,逻辑回归主要是做分类工作。

大禹治水——回归任务;庖丁解牛——分类任务。

线性回归核心思想和原理

*奥卡姆剃刀原理:如无必要,勿增实体,即简单有效原理。

KNN算法更擅长处理空间关系,因此多用于分类任务;线性算法更擅长处理顺序关系,因此多用于回归任务。

一元线性回归

多元线性回归

线性代数是能帮助我们很好的解决数据维度扩展下,数学的简介的这样一种表示。

多项式回归

原理上,先假定一条带有参数的线,好比是候选人,然后确定一个标准,比如训练数据和候选直线之间的距离,同时也是一个误差,然后对这个误差求和得到损失函数,之后用最优化分析求解,类似于大选计票过程一样,求得参数值就是我们的模型了。

逻辑回归核心思想和原理

逻辑回归用于分类任务,一般用于二分类任务。

通过逻辑函数,能够把线性分布变换成非线性分布,便于处理。

给定样本数据集x和y,找到一组参数w来拟合它,也就是一个最优化问题。

线性回归代码实现

一元线性回归

一元线性回归公式实现

sklearn实现一元线性回归

sklearn 实现多元线性回归

归一化?

模型评价:MSE、RMSE、MAE和R2

加载数据集

sklearn实现一元线性回归

MSE和RMSE的区别在于前者对量纲不敏感,后者对量纲敏感。

MAE

R2

R2越大,模型拟合效果越好。

在回归模型中,损失函数一般使用MAE、MSE、RMSE,性能评估指标一般使用R2。

多项式回归代码实现

构造非线性数据

线性回归

多项式回归

scikit-learn中的PolynomialFeatures

逻辑回归算法

损失函数是分段函数,由其构成的方程为超越方程,故逻辑回归函数没有解析解。

弹性网络是LASSO回归和Ridge回归的结合,通过参数λ和ρ来平衡二者之间的比例关系。

线性逻辑回归代码实现

数据集

sklearn中的逻辑回归

超参数

多分类策略

复杂逻辑回归及代码实现

线性逻辑回归(线性可分,显然不满足)

多项式逻辑回归(非线性数据)

多分类OVR和OVO代码实现

线性算法优缺点和适用条件

算法对比

优缺点对比

算法流程

“解一卷而众篇明”之核心概念精讲

本章总览

损失函数是机器学习的灵魂。

损失函数

损失函数是用来估计模型的预测值y hat与真实样本y之间的不一致程度,通常用L表示,是一个非负实值函数。损失函数越小,说明找到的模型越好。机器学习的过程就是先创建这样一个损失函数,然后通过把它最小化来找到参数的过程。

不同算法最大的区别就在于数据样本对假设的模型的打分标准,也就是衡量损失函数的方法不同。

常见损失函数

对数损失函数一般用于二分类任务,交叉熵损失函数一般用于多分类任务。

所有样本的损失求平均就是训练样本及整体的无序程度。

平均意义下,模型预测好坏的评价标准叫做风险函数(risk function)/期望损失/代价函数。

找到一组w,使得经验损失函数取得最小值,这个过程被称为经验风险最小化准则。通常地,把整个式子统称为最小化损失函数。

结构风险最小化准则就是为了防止过拟合而提出了的一种策略,在原式上加上一个正则化项(regularization)。

梯度下降

当有sigmoid函数、指数函数、对数函数等时,损失函数叫做超越方程,没有解析解的,此时需要用到最优化分析中的算法,通过搜索逼近来求解,如梯度下降法。

J代表总损失,W代表参数(假设二维)。显然当位于最低点时,J最小,此时的横轴坐标就是我们要求的目标参数。

实际中,W代表参数一般多维,故图像为多维图像。

整个梯度就是多个维度综合起来最陡的那个方向。

梯度下降法的目标就是为了求解损失函数。求解三要素,第一是确定初始点,第二是确定梯度,第三是确定学习率。

批量梯度下降(BGD)

全部训练样本参与计算,保证算法精准度,找到全局最优点,缺点是速度慢。

随机梯度下降(SGD)

每次只用一个样本进行计算,提升了计算速度,但牺牲了精准度。

小批量梯度下降(MBGD)

每次选用一小批样本进行计算,虽然没有批量梯度下降法平稳,也没有随机梯度下降法速度快,但是相对来说走出来一条简洁高效的路线,也较为科学。

存在的问题

解决方法

决策边界

分类模型的决策边界的绘制。

线性逻辑回归决策边界

决策边界绘制函数

三分类的决策边界

多项式逻辑回归的决策边界

过拟合与欠拟合

数据集

欠拟合

过拟合

过拟合往往在训练集上表现很好,但在测试集上表现不佳,往往通过增加正则项等方法改进。

过拟合的情况

欠拟合的情况

最佳拟合情况

学习曲线

数据集

线性回归和多项式回归

划分数据集

学习曲线

学习曲线,一种更通用的可视化分析工具,可对模型的拟合效果进行评估,判断是否过拟合或欠拟合。

关注两个方面:误差的值和训练集与测试集的差异。

交叉验证

模型恰好在抽取的测试集上拟合了,准确率和学习曲线的表现看似良好,但真实情况下,早已发生过拟合,真实的数据效果可能就会很差,于是引入交叉验证来解决这一问题。

数据集

KNN超参数搜索

sklearn超参数搜索 (使用交叉验证)

交叉验证

模型误差

无论是分类任务还是回归任务,在训练阶段都可以通过定义一个损失函数来量化模型的误差,然后利用梯度下降法使误差变小,从而更新迭代模型,而在预测阶段,我们就用训练好的模型来做出预测推理,但最终模型误差不可能为0。

正则化

正则化主要是解决模型过拟合问题。

多项式逼近思想,也就是泰勒公式展开。

过拟合的真相:高次项太多导致的。

解决方法:控制高次项的个数,使n最小,即使w向量中它的项的个数最小化。

范数就是向量的长度,为了避免曲线拐弯的一种过拟合,让向量的长度最小。

白色为MSE,红色为正则项。白点为未引入正则项的最小点,红点为引入正则项后的最小点。右图为左图的垂直投影。红点位于w1=0且w2的轴上,降低参数的维度,让参数矩阵更加的稀疏。

白色为MSE,红色为正则项。白点为未引入正则项的最小点,红点为引入正则项后的最小点。右图为左图的垂直投影。增强模型的泛化能力,处处可导,计算简单。

正则项相对于给最小化增加了空间的约束,限制了模型的复杂度,因而很好的解决了过拟合问题。

LASSO和岭回归代码实现

LASSO回归

岭回归

模型泛化

评价指标:混淆矩阵、精准率和召回率

用核酸检测来举例,TP代表阳性患者,FP代表误检患者实为阴性,FN代表漏检患者实为阳性,TN代表阴性患者。TP、TN越多越好,FP、FN越少越好。

数据集

手动实现

scikit-learn封装实现

评价指标:PR曲线和ROC曲线

Precision-Recall 曲线

scikit-learn中的PR曲线

scikit-learn中的ROC曲线

“分而治之,逐个击破”的决策树

本章总览

决策树核心思想和原理

决策树通常用于解决多分类任务。

上述决策树模型深度(depth)为3,二叉树。

不同的特征选择、不同的节点分裂和不同的阈值确定都会导致生成完全不一样的决策树。

在决策过程中,不同的特征条件都可以满足这些样本点的分类要求,故样本分类存在多样性,于是决策树能选择出最佳分类方式。

信息熵

决策树分类任务代码实现

二分类信息熵

数据集

sklearn中的决策树

决策树中最核心的部分其实是如何进行特征选择。

最优划分条件

基尼系数

基尼系数中的n代表样本类别数,而不是样本本身数量。

信息熵表示的是随机变量的不确定度,而基尼系数表示在样本集合中,一个随机选择的样本它被分错的概率。

二分类信息熵和基尼系数

数据集

sklearn中的决策树

Criterion不指定,默认使用基尼系数的决策树。

最优划分条件

决策树剪枝

决策树过拟合问题

决策树剪枝

决策树回归任务代码实现

决策树回归

绘制学习曲线

网格搜索

决策树优缺点和适用条件

“失败是成功之母”的神经网络

本章总览

基于失败的学习:机器学习;基于奖励的学习:强化学习。

神经网络核心思想和原理

神经网络又被称为多层感知机Multi-Layer Perceptron(MLP)。

随着网络的层数的增加,网络的能力或进行分类的准确率没有发生明显的变化,甚至可能下降,这种情况叫做神经网络的退化。加入激活层用于改变这种情况。

激活函数是把线性数据变成非线性数据。

每个隐藏层它计算之后都需要加一层激活层。

Software层指的是对输出层进行归一化处理,将网络输出映射到0~1之间,转换成概率,即神经网络计算得到的概率值的结果,方便后续分类和预测。

通过交叉熵构建了损失函数,损失函数是模型训练的目标,也是所以神经网络学习的灵魂。

不同神经网络的差异主要体现在以下四点,一是整个神经网络的结构,二是损失函数形式,三是求解损失函数的过程,四是对于过拟合处理操作的方式。

激活函数

为什么需要激活函数

线性结构难以完美拟合数据,故引入激活函数,使结构非线性化,更好的拟合数据。

激活函数的作用

有了非线性激活函数之后,神经网络的表达数据或拟合数据能力变得更加强大。从公式上来看,相当于在输入和输出之间建立了一个非线性的映射关系。

类似于鲶鱼效应,激活函数的存在使得神经网络模型更加具有实用意义。

常见激活函数及其变体

缺点:存在梯度消失问题,网络训练进程慢;中心点在0.5,降低了权重更新的效率等。

缺点:存在梯度消失问题,网络训练进程慢。

缺点:死亡神经元问题,输入持续为负的神经元的激活值总为零。

Sigmoid和tanh适合做概率值的处理,ReLU适合用于深层神经网络的训练。

正向传播与反向传播

正向传播

正向传播是神经网络通过层级结构和参数,将输入数据逐步转换为预测结果的过程,实现输入与输出之间的复杂映射。神经网络信息流正常向前传播,包括输入层、隐藏层到输出层。

神经网络不允许横向和倒着连接,但允许跳层连接。

反向传播

反向传播算法利用链式法则,通过从输出层向输入层逐层计算误差梯度,高效求解神经网络参数的偏导数,以实现网络参数的优化和损失函数的最小化。

反向传播详细讲解两层神经元为例,展示误差反向传播过程。

训练目标为找到权重参数,使网络输出与目标输出一致。损失函数定义采用欧式距离,通过梯度下降法优化权重参数。反向传播核心为链式法则,逐层计算偏导数,实现误差反向传递。

反向传播的核心原理与计算

1.反向传播从输出层开始,逐层计算偏导数,更新参数。

2.关键公式包括损失函数对权重的偏导数,用于更新权重。

3.链式法则实现误差反向传播,更新所有层的参数偏导数。

梯度下降优化算法

梯度下降法用于寻找函数的最小值,常用于神经网络权重的优化。

该方法基于反向传播算法,通过计算误差的偏导数(梯度)来更新权重。

参数初始值的选择对梯度下降的结果有重要影响,不同的初始值可能导致不同的最优解。为了获得更好的解,可以使用多种不同的初始值进行运算,选择损失函数最小的初始值。

特征归一化可以加速梯度下降法的收敛速度。不同特征的取值范围可能差异很大,直接使用可能导致迭代缓慢。通过归一化处理,可以使所有特征在更新权重时处于同等重要的地位。e.g. 空投部队下山搜索。

动量法通过引入动量变量vt来控制不同方向的梯度移动一致性,提高搜索效率,但是学习率不变。

Adagrad算法可以根据自变量在每个维度的梯度值大小调整学习率,以适应不同维度的优化需求。

RMSprop是Adagrad算法的一种改进,通过调整学习率以解决Adagrad后期学习率过小的问题。

Adam算法结合了RMSprop和动量法的思想,通过同时控制速度和方向来提高优化效率。Adam算法是深度学习中常用的优化算法之一,适用于大多数深度学习模型。

神经网络简单代码实现

神经网络的核心思想和原理,包括激活函数、正向传播、反向传播以及梯度下降优化算法。

数据集

sklearn中的神经网络

反向传播权重更新

梯度消失和梯度爆炸

梯度消失的主要原因是激活函数的导数连乘效应,如sigmoid函数的导数在0到0.25之间,导致梯度迅速缩小。

梯度爆炸则是由于权重初始化值过大,导致连乘效果指数级增大梯度。

梯度消失和爆炸会导致网络退化,影响权重有效更新,使得深度神经网络性能不佳。

梯度消失和梯度爆炸是神经网络中常见的问题,分别指梯度在反向传播过程中过小以至忽略不计导致网络退化和过大导致网络不稳定。

这些问题源于神经网络串联式结构和反向传播算法导致的连乘效应,可能导致梯度指数级放大或缩小。

更换具有更好性质的激活函数,如ReLU函数,以减少梯度连锁反应的恶劣影响。

采用梯度剪切和权重正则化等手段限制梯度过大,防止爆炸。

改进神经网络结构,如使用残差网络和批归一化等技术,缓解梯度消失和爆炸问题。

模型选择

不同模型比较

神经网络的模型选择

神经网络优缺点和适用条件

神经网络的优势

1.神经网络适用于监督学习、非监督学习和半监督学习,能够解决分类和回归问题,完成生成任务和判别任务。

2.神经网络可以直接接收各种类型的数据,包括音频、视频、图像和文本,通过数值化处理进行工作。

3.神经网络的效果优秀,具有强大的泛化能力和容错能力,尤其是在预训练模型出现后,表现更加突出。

4.神经网络性能好,能够进行大规模并行的分布式计算,适用于解决更多的问题。

神经网络的不足

1.神经网络训练难度大,可能出现梯度爆炸和梯度消失现象,导致模型难以收敛。

2.神经网络对训练样本的数量要求高,训练时间长,需要更多的计算资源。

3.神经网络存在不可解释性问题,难以应用于需要解释模型结果的决策系统中。

神经网络的适用条件

1.神经网络适用于数据规模庞大的任务,能够自动学习数据的低层次到高层次的特征。

2.神经网络适用于无需解释结果的任务,如人脸识别等。

“欲穷千里目,更上一层楼”的支持向量机

本章总览

分类的目的就是要找到使得隔离带最大化的支持向量,这种理想情况被称为SVM的硬分类。

允许一定的错误,但追求总体的最佳效果,这种情况被称为SVM的软分类。

面对肉眼难以分类的样本,SVM可通过kernel运算,把数据映射到高维空间,从而实现分类的目的。

一个空间的混乱,却有可能在另一个空间中意味着秩序。

无论是神经网络还是SVM,都是通过非线性的空间变换实现上面这句话的目的。

SVM核心思想和原理

支持向量机的核心思想和原理

1.支持向量机(SVM)的核心思想是通过找到一个超平面来最大化间隔,从而实现对数据的分类。

2.SVM的核心问题解决不适定问题,通过寻找具有最大间隔的超平面来提高模型的稳定性。

3.SVM在决策时考虑的是支持向量,即那些最接近决策边界的数据点,以此来提高模型的泛化能力。

4.SVM的核心思想可以比喻为在父母吵架时保持中立,尽量让双方分开,体现了一种公平和稳定的原则。

硬间隔SVM

硬间隔SVM假设数据线性可分,旨在找到最大分类间隔的超平面。SVM通过最大化分类间隔,转化为最大化距离d的问题。

距离d是支持向量到超平面的垂直距离,与线性模型中的距离不同。

超平面方程与距离公式

1.超平面方程采用w^T * x + b = 0形式,其中w和x是高维向量。

2.距离公式基于w的范数,表示高维空间中的长度概念。

3.通过距离公式和分类标签,可以表达出隔离带的分段函数形式。

隔离带边界方程与变量代换

1.隔离带边界方程通过变量代换简化为w’ * x + b’ = ±1形式。

2.超平面方程和隔离带边界方程通过除以分母进行统一变量代换。

3.变量代换后,SVM问题转化为在满足不等式约束条件下求超平面参数的问题。

梯度下降法等无约束最优化方法适用于无约束问题,但SVM是有约束最优化问题,即不等式约束的最优化问题。

SVM的求解依赖于将不等式约束问题转化为无约束问题的方法,如引入松弛变量或拉格朗日乘子。尽管数学上复杂,但现成的函数库如Sklearn等提供了求解SVM的函数,用户只需调用即可。

SVM的优化目标是在满足约束条件下最大化分类间隔,等价于最小化w的范数。通过数学变形,将优化目标转化为求解二次规划问题。

SVM软间隔

硬间隔与软间隔的基本概念

1.硬间隔(hard margin)对应于支持向量机(SVM)的最小化范数描述,要求所有数据点满足不等式条件,但存在少数错误的样本点误导决策的问题。

2.软间隔(soft margin)允许数据点在一定的容错范围内不满足硬间隔的条件,通过减小一个很小的正数来实现。

3.软间隔通过引入容错值zeta,使得决策边界可以有一定的移动范围,从而提高SVM的容错能力和泛化能力。

软间隔的数学描述

1.软间隔的数学描述在原约束条件上减去一个很小的正数,允许边界线越过一个小范围。

2.通过加上一个系数C来平衡硬间隔和软间隔两部分,C是一个新的超参数,用于调节权重。

3.软间隔SVM的最优化问题是一个有不等式约束下的最优化问题,求解方法不同于直接应用梯度下降法。

软间隔与正则化的类比

1.软间隔SVM的优化函数可以视为损失函数和正则项的组合,类似于之前的正则化概念。

2.正则项的存在是为了避免优化过程过于硬性和极端,是软间隔软化的来源之一。

3.L1正则化和L2正则化的类比说明了软间隔中软化的多样性,通过改变正则项的形式来适应不同的优化需求。

线性SVM分类任务代码实现

数据集

sklearn中的线性SVM

随着C值的增大,SVM的容错空间逐渐减小,决策边界更加精确。当C值足够大时,SVM变为硬间隔SVM,决策边界更加明确。

多分类

非线性SVM:核技巧

通过核函数,SVM能够将数据映射到高维空间,实现非线性分类。

核技巧是解决非线性问题的关键,通过高维映射将低维不可分的样本点映射到高维空间,实现线性可分。

软间隔对偶问题就是把原本的不等式约束经过数学运算转化为等式约束。

核技巧通过核函数在低维空间计算高维空间的点积,避免了直接在高维空间中进行复杂计算,有效减少了计算量。

核函数的选择可以通过公式中的k来实现,不同的核函数相当于对原始数据进行不同的升维操作。在实际问题中,SVM通过kernel运算把数据映射到高维空间,能够实现很好的分类效果。

核函数的选择对SVM的性能有重要影响,不同的核函数对原始数据进行不同的升维操作。在实际应用中,径向基函数(如高斯核)因其能捕捉非线性特征且参数调整少而常用。

核技巧在SVM中的应用

1.SVM通过核函数将低维空间数据映射到高维希尔伯特空间,实现从欧式空间到谢尔伯空间的变换。

2.核函数的引入简化了计算过程,减少了计算量,同时也提高了SVM对非线性数据的处理能力。

3.SVM的特点在于其灵活运用核技巧,通过不同核函数的选择实现各种空间的变换,从而解决复杂的分类问题。

SVM核函数

多项式核函数通过增加多项式特征实现升维操作,将原始数据映射到高维空间。二次多项式核函数示例展示了如何通过数学变换将原始数据转化为线性可分。

高斯核函数及其应用

1.高斯核函数通过数据映射到高维空间增强数据可区分性,解决非线性问题。

2.高斯核函数映射复杂,需选择地标(landmark)和数据点数量决定映射维度。

3.高斯核函数在数据量大时运算效率可能较低,但在特定情况下表现高效。

非线性SVM代码实现

多项式特征解决非线性问题

核函数解决非线性问题

SVM回归任务代码实现

SVM优

优缺点和适用条件

SVM通过将数据从低维空间映射到高维空间,将混乱的数据转换为有序,从而更好地进行分类。其最大优点是能够高效地处理非线性数据,通过使用核技巧将非线性数据转换为线性数据,然后绘制超平面进行分类。此外,SVM还具有L2正则化特性和良好的泛化能力,可以防止过拟合,解决分类和回归问题,稳定性好。

选择合适的核函数处理非线性数据是一项困难的任务,SVM需要大量的内存来存储所有的知识向量,并且训练速度会随着数据集的增大而降低。

SVM的稳定性和适用条件

1.SVM模型具有较好的稳定性,数据的微小变化不会对模型产生太大影响。

2.SVM适用于小样本数据和非线性数据,在高维模式识别中表现出特有的优势。

“是非考于前,成败验于后”的贝叶斯方法

本章总览

贝叶斯方法是一种基于概率的语言来进行时序建模的方法。

贝叶斯方法核心思想和原理

贝叶斯方法的核心思想和原理

1.贝叶斯方法是概率统计中的重要组成部分,对机器学习有深远影响。

2.贝叶斯公式建立了数据和模型参数之间的概率分布关系。

3.贝叶斯框架下的概率理论认为概率是个人主观概念,代表对事件发生的相信程度。

频率学派认为概率是对事件发生的可能性的客观估计,使用的是最大似然估计方法。

贝叶斯学派则强调概率是个人信念的体现,通过先验分布表达,使用的是最大后验估计方法。

贝叶斯估计方法的具体示例

1.介绍了朴素贝叶斯作为最简单的贝叶斯估计方法。

2.贝叶斯方法在深度生成模型中的应用,以应对深度学习对概率分布的考虑。

3.贝叶斯理论框架通过有效的先验分布实现用少量数据达到良好的泛化效果。

朴素贝叶斯分类

朴素贝叶斯分类器的基本原理

1.朴素贝叶斯分类器是基于贝叶斯定理的分类方法,假设特征之间独立。

2.尽管实际特征间可能存在相关性,但朴素贝叶斯通过独立性假设简化计算。

3.朴素贝叶斯法因计算简单而广泛应用,但可能牺牲分类准确率。

朴素贝叶斯的代码实现

多项式朴素贝叶斯代码实现

贝叶斯方法优缺点和适用条件

朴素贝叶斯方法具有简单快速、适用于多分类问题、样本量需求少等优点,尤其在条件独立假设下效果显著。

其缺点也较为明显,如条件独立假设难以保证、概率结果可能无物理意义、处理未见类别变量时可能失败等。同时,该方法计算复杂度较高,尤其在高维计算中困难。

随着计算机技术的发展,现代贝叶斯方法如层级贝叶斯模型、隐马尔可夫模型等逐渐兴起,为复杂问题提供了新的解决思路。

“团结就是力量”的集成学习

本章总览

集成学习可用于监督式学习和非监督式学习,广泛应用在多个领域。

集成学习(Ensemble Learning)允许多种算法共同完成任务,体现“团结就是力量”的思想。集成学习不仅是一种算法,也是一种思想,旨在协同多种学习算法以提升整体学习效果。集成学习的目的是使组合后的算法预测性能优于任何单个算法。

集成学习核心思想和原理

集成学习方法分为同质(homogeneous)和异质(heterogeneous),按子模型连接方式分为并行、串联和串并结合。

voting和bagging是并联策略的典型方法,分别通过简单投票和平均值确定最终结果。bagging从总训练集抽样组成子集,每个子模型用其一个子集训练,适用于分类任务的投票方式和回归任务的平均方式。

boosting是一种串行策略,通过精英筛选思路训练多个模型,模型间互相依赖。boosting通过加权数据和错误分的数据加大权重训练弱学习器,最终形成强学习器,适用于分类任务的加权投票和回归任务的加权。AdaBoost是boosting中常用的自适应提升算法。

stacking结合不同学习算法的模型,用新模型对前模型预测结果进行优化拟合,通常称为异类或异指集成。

集成学习代码实现

数据集

集成学习

sklearn中的集成学习(Voting)

硬投票策略:每个分类器独立投票,少数服从多数。

软投票策略:根据分类器的概率估计进行加权平均,得出最终预测。

使用硬投票策略,将三个分类器组合,达到85.2%的准确率。

将硬投票策略改为软投票策略,通过计算概率的平均值作为预测依据,准确率提升至86.8%。

并行策略:Bagging、OOB等方法

由于样本有放回抽取,导致36.8%的样本没被抽到,故OOB策略不区分训练集和测试集,利用未被选中的样本作为验证集,评估模型性能。

数据集

Bagging

OOB

并行策略:随机森林

Bagging方法通过随机取样在样本中训练不同的子模型,并在特征空间中随机选取特征的方式进行集成学习。

随机森林作为bagging的扩展变体,其特点是在构建决策树时增加了随机性,通过在随机特征子集上寻找最优划分,提高了子模型的多样性。

数据集

Bagging

Random Forest Trees

通过随机森林分类器可以提取特征的重要性,输出特征重要性值,用于分析特征在分类中的作用。

Extra-Trees

Extra Trees方法是随机森林的扩展,通过随机选取特征和预值进行节点划分,进一步增加随机性,有效抑制过拟合。Extra Trees方法训练速度相对较快,不需要额外的计算。

串行策略:Boosting

Boosting是集成学习中的串行策略,通过多个子模型按顺序串行训练,每个子模型关注上一个模型表现不好的样本点。自适应增强算法(Adaptive Boosting)是Boosting的一种典型应用,通过不断调整模型权重,使模型更关注错误分类的样本。

数据集

AdaBoost

Gradient Boosting

Gradient Boosting,用于回归问题的非线性样本数据。

结合策略:Stacking方法

Stacking是一种集成学习方法,通过结合多个模型的预测结果来提高预测精度。基本思路是将多个模型的预测输出作为新特征,用于训练一个更高级的模型,以生成最终预测。Stacking方法可以处理分类和回归问题,通过将预测概率值作为输入,适用于概率预测场景。

整体的训练思路为把训练数据分成两份,先用第一份数据训练这三个模型,再用第二份数据经过这三个模型输出之后训练得到第二级的模型四,最终形成一个训练框架。

将数据分成三份,分别用于三层训练。

由于Stacking方法的复杂性,容易发生过拟合现象,尤其是在构建大型网络时。解决过拟合的方法包括使用更复杂的技术,如深度学习中的正则化、dropout等,也可以考虑简化模型结构。

集成学习优缺点和适用条件

1.投票法是集成学习的典型模型,遵循少数服从多数原则,优点包括简单高效和降低方差。

2.投票法预测效果理想情况下应优于单个模型,但存在集成模型不如子模型的情况。

3.软投票法与硬投票法可能得出不同结论,软投票法考虑预测概率,通常更准确。

4.投票法局限性在于对所有模型处理相同,可能导致效果过差的模型被视为噪声。

5.投票法适合场景:基模型效果相近,硬投票适用于预测清晰类别标签,软投票适用于预测类别概率。

1.Bagging方法通过减少误差中的方差项从而降低模型预测误差,优点包括提高准确率和简化模型。

2.缺点包括增加时间开销、需要强多样性的子模型和较大的计算资源需求。

1.随机森林作为Bagging方法的优化版本,具备极高准确率,不易过拟合,能处理高维数据。

2.随机森林缺点包括噪声大时可能出现的过拟合和对数据取值较多属性的不信任。

1.Boosting方法通过串联弱学习器构建强学习器,显著减少偏差,提高模型鲁棒性。

2.缺点包括可能增加过拟合风险、训练耗时和对离群点的敏感。

1.Adaptive Boosting (AT Boost)改进了这些缺点,具有灵活性、不易过拟合和高精度。

2.AT Boost缺点包括迭代次数确定困难、数据不平衡导致分类精度下降和训练耗时。

1.Stacking方法通过结合多个模型提升性能,优点包括效果好、鲁棒性强和适合大型集成策略。

2.缺点包括模型复杂、需要避免泄露问题以防过拟合。

“物以类聚,人以群分”的聚类算法

本章总览

聚类是无监督学习中的一种典型方法,它通过将数据按照相似性进行分组,使得同一组内的数据相互之间非常相似,而与其他组的数据非常不同。

聚类算法核心思想和原理

聚类是将数据对象分类的过程,目的是使同一类的对象具有高度相似性,不同类的对象差异性越大越好。

聚类与分类的区别

1.聚类与分类都是确定物体类别的过程,但聚类需算法自动发现类别。

2.聚类前无预定义类别,算法需根据样本间相似性自行分类。

聚类算法的主要方法

1.划分式聚类,以k均值算法为代表,用中心向量表示类,根据样本到类中心的距离进行分类。

2.基于密度的聚类,如DBSCAN、OPTICS和均值漂移算法,将类定义为空间中样本密集的区域。

3.基于层次化的聚类,根据样本之间的连通性构造类,强调不同密度和距离的聚类方式。

4.其他聚类方法包括量子聚类、核聚类和普聚类等。

聚类算法的主要步骤

1.数据准备,包括特征标准化和降维,以优化聚类效果。

2.特征选择,从最初的特征中选择最有效的特征进行聚类。

3.特征提取,通过对选择特征的转换,形成更突出的特征。

4.聚类,基于某种距离度量进行相似度度量,得到聚类结果。

5.结果评估,对聚类结果进行评估,如计算距离误差等。

k-means和分层聚类

k-means

k均值算法通过将对象划分为互斥的组进行聚类,旨在使组间相似度低而组内相似度高。

算法基于样本点与质心的距离进行判定,以样本间距离衡量簇内相似度。

k均值算法中,质心的初始选择是随机的,计算样本到质心的距离并进行归属,然后重新计算质心,重复过程直到稳定或达到最大迭代次数。

分层聚类

k均值算法和分层聚类算法是两种应用最为广泛的聚类算法。分层聚类应用广泛程度仅次于基于划分的聚类,核心思想是通过层次划分形成树形聚类结构。

聚类算法代码实现

数据集

KMeans 聚类法

通过实验不同n_clusters的值,发现n_clusters=5时效果最佳。

层次聚类法

不设置聚类中心点n_clusters,因为层次聚类的本质决定了其没有聚类中心。

通过设置距离阈值distance_threshold,观察不同距离阈值对聚类效果的影响。

调用dendrogram包直观展示层次聚类的树图,以评估不同链接度和距离阈值的效果。

聚类评估代码实现

数据集

已知标签

未知标签

聚类算法优缺点和适用条件

K均值聚类算法的优缺点

1.K均值聚类算法简单,收敛速度快,聚类效果明显。

2.适用于密集且形状球状或团状的数据集,聚类效果最佳。

3.处理大数据集时表现出色,具有可伸缩性。

4.需要事先确定聚类数目K,选择不当可能导致聚类结果不准确。

5.对初始值的选择敏感,可能导致结果不稳定,易陷入局部最优解。

6.使用误差平方和作为聚类准则函数时,可能因各类形状和大小差异大而出现错误聚类。

分层聚类算法的优缺点

1.分层聚类算法不需要事先指定聚类数目,适应于未知聚类数量的数据集。

2.可以发现促的层次关系,提供不同颗粒度的数据探测。

3.优点在于距离和规则的相似度定义限制较少,适用于多种数据类型。

4.主要缺点在于计算临近度矩阵的时间和空间需求大,导致可伸缩性差。

5.合并或分裂点的选择困难,可能影响聚类质量。

“射人先射马,擒贼先擒王”的主成分分析

本章总览

机器学习四大任务

1.机器学习本质上模拟人的成长历程,复原人的思维逻辑,包括分类、回归、聚类和降维四大任务。

2.分类和回归任务帮助学习者识别和判断,聚类任务则使学习者能够自我学习和分类,降维任务则帮助处理信息爆炸问题。

无监督学习是一种重要的无监督学习的算法,主要用于高维数据降维分析,常简称为PCA算法。PCA算法通过降维简化数据,提高机器学习效率,是数据处理和分析的重要工具。

主成分分析(PCA)是一种降维方法,通过线性变换将高维数据转换为低维数据,保留数据的主要信息。PCA的应用广泛,不仅限于机器学习,还应用于概率统计、数据分析、数据挖掘等领域。PCA降维的应用包括数据降噪和人脸识别,通过减少噪声和识别特征,提高机器学习准确性。

PCA核心思想和原理

PCA(主成分分析)的目的是降维,难点在于找到主元,即主成分。

降维的目的是使降维后的数据要尽量的体现降维前的数据的相互位置关系,数据尽量可分。

找到一条轴(基底)进行投影,此处并非分类或回归,投影的目的是要使得投影后的数据点之间的间距最大,数学描述则用方差表示。

降维的目标就是找到一个最优的特征空间,也就是一个新的基底矩阵,使得维数k小于原维数n。

协方差矩阵能够捕捉数据在对角线方向上的离散程度。数据散度的衡量标准就是协方差矩阵。降维的目标就是要找到能够使得协方差矩阵对角化的基底矩阵。

X为m*n的矩阵,要使方差最大、协方差为0,在协方差矩阵上表现为对角线上的数从大到小排列,其他位置全为0。换句话说,如果能够找到一个矩阵,使得数据点协方差矩阵对角化,那么找到前面k(k<n)个较大的方差值,则为主元,选其为基底,则可是数据维度从n维降到k维,满足上述条件的矩阵称为基底矩阵。

PCA求解算法

PCA的目标是找到使数据协方差矩阵对角化的基底矩阵,以实现降维。

通过选择方差较大的行向量作为主元做基底,可以有效降低数据维度。

特征向量表示分布的方向,特征值表示沿着特征向量方向缩放的程度。

PCA算法应用与注意事项

1.PCA能有效缓解维度的灾难,通过舍去部分信息,使得样本采样的密度增大。

2.PCA能起到非常好的数据降噪效果,通过舍弃最小特征值对应的特征向量,一定程度上起到降噪效果。

3.PCA能将数据压缩到低位,使得降维后的数据各个特征相互独立。

4.PCA的主要作用体现在缓解维度灾难、数据降噪和特征独立上,但可能无法有效解决过拟合问题。

PCA算法代码实现

数据集

PCA

降维任务代码实现

数据集

PCA降维

使用sklearn的digits数据集,该数据集包含1797个8x8的手写数字图片。

通过PCA(主成分分析)进行降维,默认计算所有主成分,即64个。

explained_variance属性可以查看各主成分的方差贡献率,近似表达重要程度。

累计方差贡献率图表显示,大约20个主成分可以覆盖90%的信息。

可以通过设定累计方差贡献率选择合适的主成分数量进行降维,如设定21个主成分,可以覆盖90%的信息。

模型训练

使用逻辑回归作为分类器,在PCA降维后的数据上进行模型训练和评估。降维后可以显著减少训练和测试时间,同时保持较高的准确率。

可视化

可视化降维后的数据,可以更直观地了解数据分布,有助于问题分析。

PCA在数据降噪中的应用

数据集

PCA

通过引入一组加噪声的线性数据,解释了PC降维过程中丢失的大部分信息是噪声数据,从而通过降维操作实现了数据降噪。

图像降噪

以sklearn中的手写数据集为例,展示了PCA在图像降噪的应用。

通过对加载的手写数字图像添加噪声,并应用PCA进行降噪(先降维再升维,由于有数据损失,故通过这种方式降噪)。降噪后的图像相比原始噪声图像更为清晰,去除了大部分的噪声。降噪后的数据可以用于训练分类器,提高分类准确率。

在降维过程中,通过调整n_components参数,可以控制降噪效果。

PCA在数据降噪中的应用

1.PCA(主成分分析)可以通过降维过程去除数据中的噪声。

2.在降维过程中,PCA主要丢失的是噪声部分,从而实现数据降噪。

3.通过sklearn库中的PCA类可以实现数据的降维和降噪。

4.实际应用中,PCA降噪后的数据可以用于提高后续数据处理和机器学习模型的准确率。

PCA在人脸识别中的应用

数据集

使用scikit-learn库获取LFW人脸数据集,该数据集包含标注的人脸图像。

数据集处理

数据预处理包括筛选每人至少70张图片,并调整图片大小至0.4倍原尺寸。

PCA

应用PCA降维,设置主成分数量为150,将数据降至1850维。

人脸识别

通过PCA降维后的数据训练SVM分类器,实现人脸识别。PCA降维后的分类器准确率为82%,高于原始数据的81.4%。

主成分分析优缺点和适用条件

“见微知著,睹始知终”的概率图模型

本章总览

机器学习中的概率图模型,强调其作为集大成者的地位,并指出其与其他经典算法的紧密联系。通过韩非子的名言来比喻概率图模型能够洞察细微并预测事物发展方向的特性。

概率图模型在统计机器学习、语音识别、计算机视觉和自然语言处理等领域有广泛应用。通过图来表示变量概率之间的依赖关系,进行高效推理。

概率图模型分为有向图和无向图两种类型,有向图刻画变量间的因果关系,无向图则表示关联关系。有向图模型包括贝叶斯网络、信念网络等,无向图模型包括马尔科夫随机场、因子图等。

概率图模型核心思想和原理

EM算法参数估计

概率图模型通过图模型直观描述变量间关系,用概率分布定量刻画变量间依赖。参数估计实现学习过程,通过最大化似然函数实现参数估计。

EM算法通过交替进行期望(E步)和最大化(M步)来逼近求解概率分布和参数。

EM算法虽然收敛但可能陷入局部最优,因此结果受初始值影响较大。整体而言,EM算法在求解隐变量问题中展现出高效性,是概率图模型研究中的重要方法。

隐马尔可夫模型代码实现

隐马尔可夫模型(Hidden Markov Model,HMM)是一种对序列数据进行建模的有效方法,适用于前后关联的数据,如股票价格和语言数据。

观测独立性假设任意时刻的观测只依赖于该时刻的马尔可夫链状态。齐次马尔可夫性假设t时刻的状态仅与t-1时刻的状态有关。

隐马尔可夫模型的三要素

1.初始概率向量π,表示各隐藏状态的起始概率。

2.状态转移矩阵T,描述状态之间的转移概率。

3.发射概率矩阵E,反映各隐藏状态下产生观测值的概率。

HMM中的状态是不可直接观察的,但可以通过观察值间接推断。观察值是由隐藏状态生成的,每个隐藏状态生成特定观察值的概率由发射概率定义。状态转移概率定义了模型中状态随时间变化的规律。

数据准备

Hmmlearn

概率图模型优缺点和适用条件

作为经典的概率图模型,适用于序列标注问题,简化条件概率计算,但在一般场景应用范围较窄。

概率图模型的优点包括能够处理复杂问题,提供良好的解释性。缺点包括构建复杂的概率图模型困难,高效推断和学习挑战大。概率图模型适用于需要高度可解释性的场景,但在实际应用中需克服技术挑战。

动态化结构学习,通过逐步推断得出模型的实际结构,而非初始阶段固定整个模型结构。

非参数化建模,提供更灵活的建模方式,节点数量可随数据变化动态调整。

深度学习擅长处理感知问题,不擅长推理判断问题;概率图擅长推理判断问题,不擅长感知问题。结合深度学习与概率图模型,利用深度学习的感知能力和概率图模型的推理能力,应对实际问题中感知和推理任务的交织。