MachineLearning
参考文献
- 机器学习实战 - Peter Harrington
- 极客时间 数据分析实战45讲 陈旸
数学基础
线性代数
-
在线性代数中,由单独的数 a 构成的元素被称为标量(
scalar
):一个标量 a 可以是整 数、实数或复数.如果多个标量 a1, a2, ⋯ , an 按一定顺序组成一个序列,这样的元素就被称为向量(vector
).显然,向量可以看作标量的扩展.原始的一个数被替代为一组数, 从而带来了维度的增加,给定表示索引的下标才能唯一地确定向量中的元素. -
每个向量都由若干标量构成,如果将向量的所有标量都替换成相同规格的向量,得到的就是如下的矩阵(
matrix
) -
相对于向量,矩阵同样代表了维度的增加,矩阵中的每个元素需要使用两个索引(而非一个)确定.同理,如果将矩阵中的每个标量元素再替换为向量的话,得到的就是张量(
tensor
).直观地理解,张量就是高阶的矩阵 -
描述作为数学对象的向量需要有特定的数学语言,范数和内积就是代表.范数(
norm
)是对单个向量大小的度量,描述的是向量自身的性质,其作用是将向量映射为一个非负的数值.通用的范数定义如下: -
对⼀个给定向量, 范数计算的是向量所有元素绝对值的和, 范数计算的是通常意义上的向量长度, 范数计算的则是向量中最大元素的取值.
-
范数计算的是单个向量的尺度,**内积(
inner product
)**计算的则是两个向量之间的关系. 两个相同维数向量内积的表达式为- 即对应元素乘积的求和.内积能够表示两个向量之间的相对位置,即向量之间的夹角.一种特殊的情况是内积为 0,即 .在二维空间上,这意味着两个向量的夹角为 90度,即相互垂直.而在高维空间上,这种关系被称为正交(
orthogonality
).如果两个向量正交,说明他们线性无关,相互独立,互不影响.
- 即对应元素乘积的求和.内积能够表示两个向量之间的相对位置,即向量之间的夹角.一种特殊的情况是内积为 0,即 .在二维空间上,这意味着两个向量的夹角为 90度,即相互垂直.而在高维空间上,这种关系被称为正交(
-
在内积空间中,一组两两正交的向量构成这个空间的正交基(
orthogonal basis
),假若正交基中基向量的 范数都是单位长度 1,这组正交基就是标准正交基(orthonormal basis
).正交基的作用就是给内积空间定义出经纬度.⼀旦描述内积空间的正交基确定了,向量和点之间的对应关系也就随之确定.- 值得注意的是,描述内积空间的正交基并不唯一.对二维空间来说,平面直角坐标系和极坐标系就对应了两组不同的正交基,也代表了两种实用的描述方式.
-
线性空间的一个重要特征是能够承载变化.当作为参考系的标准正交基确定后,空间中的点就可以用向量表示.当这个点从一个位置移动到另一个位置时,描述它的向量也会发生改变.点的变化对应着向量的线性变换(
linear transformation
),而描述对象变化抑或向量变换的数学语言,正是矩阵. -
在这种情况下,矩阵的作用就是对正交基进行变换.因此,对于矩阵和向量的相乘,就存在不同的解读方式:
- 这个表达式既可以理解为向量经过矩阵 A 所描述的变换,变成了向量;也可以理解为一个对象在坐标系 A 的度量下得到的结果为向量,在标准坐标系(单位矩阵:主对角线元素为1,其余元素为 0)的度量下得到的结果为向量.
- 这表示矩阵不仅能够描述变化,也可以描述参考系本身.引用网络上一个精当的类比:表达式 就相当于对向量 x 做了一个环境声明,用于度量它的参考系是 A.如果想用其他的参考系做度量的话,就要重新声明.而对坐标系施加变换的方法,就是让表示原始坐标系的矩阵与表示变换的矩阵相乘.
-
描述矩阵的⼀对重要参数是特征值(
eigenvalue
)和特征向量(eigenvector
).对于给定的矩阵 A,假设其特征值为,特征向量为 ,则它们之间的关系如下: -
矩阵代表了向量的变换,其效果通常是对原始向量同时施加方向变化和尺度变化.可对于有些特殊的向量,矩阵的作用只有尺度变化而没有方向变化,也就是只有伸缩的效果而没有旋转的效果.对于给定的矩阵来说,这类特殊的向量就是矩阵的特征向量,特征向量的尺度变化系数就是特征值.
-
矩阵特征值和特征向量的动态意义在于表示了变化的速度和方向。如果把矩阵所代表的变化看作奔跑的人,那么矩阵的特征值就代表了他奔跑的速度,特征向量代表了他奔跑的方向。 但矩阵可不是普通人,它是三头六臂的哪吒,他的不同分身以不同速度(特征值)在不同方向(特征向量)上奔跑,所有分身的运动叠加在⼀起才是矩阵的效果。
-
求解给定矩阵的特征值和特征向量的过程叫做特征值分解,但能够进行特征值分解的矩阵必须是 n 维方阵。将特征值分解算法推广到所有矩阵之上,就是更加通用的奇异值分解。
概率论
数理统计
最优化方法
信息论
形式逻辑
机器学习
- 根据训练数据是否具有标签信息,可以将机器学习的任务分成以下三类
- 监督学习:基于已知类别的训练数据进行学习;
- 无监督学习:基于未知类别的训练数据进行学习;
- 半监督学习:同时使用已知类别和未知类别的训练数据进行学习
名词解释
- 标称型数据:一般在有限的数据中取,而且只存在‘是’和‘否’两种不同的结果(一般用于分类)
- 数值型数据:可以在无限的数据中取,而且数值比较具体化,例如4.02,6.23这种值(一般用于回归分析)
- 误差: 在机器学习中,误差被定义为学习器的实际预测输出与样本真实输出之间的差异。在分类问题中,常用的误差函数是错误率,即分类错误的样本占全部样本的比例
- 误差可以进一步分为训练误差和测试误差两类。训练误差指的是学习器在训练数据集上的误差,也称经验误差;测试误差指的是学习器在新样本上的误差,也称泛化误差。
- 训练误差描述的是输入属性与输出分类之间的相关性,能够判定给定的问题是不是一个容易学习的问题。测试误差则反映了学习器对未知的测试数据集的预测能力,是机器学习中的重要概念。实用的学习器都是测试误差较低,即在新样本上表现较好的学习器。
- 测试误差与模型复杂度之间呈现的是抛物线的关系
- 过拟合现象: 把训练数据的特征错当做整体的特征。
- 过拟合出现的原因通常是学习时模型包含的参数过多,从而导致训练误差较低但测试误差较高
- 过拟合是机器学习中不可避免的问题,可通过选择合适的模型降低其影响;
- 欠拟合现象: 如果说造成过拟合的原因是学习能力太强,造成欠拟合的原因就是学习能力太弱,以致于训练数据的基本性质都没能学到。如果学习器的能力不足,甚至会把黑猩猩的图像误认为人,这就是欠拟合的后果。
预测问题
- 预测问题可以分为以下三类:
- 分类问题:输出变量为有限个离散变量,当个数为 2 时即为最简单的二分类问题;
- 回归问题:输入变量和输出变量均为连续变量;
- 标注问题:输入变量和输出变量均为变量序列。
监督学习
- 监督学习假定训练数据满足独立同分布的条件,并根据训练数据学习出一个由输入到输出的映射模型。反映这一映射关系的模型可能有无数种,所有模型共同构成了假设空间。监督学习的任务就是在假设空间中根据特定的误差准则找到最优的模型。
- 根据学习方法的不同,监督学习可以分为生成方法与判别方法两类。
- 生成方法是根据输入数据和输出数据之间的联合概率分布确定条件概率分布,这 种方法表示了输入 X 与输出 Y 之间的生成关系;
- 判别方法则直接学习条件概率分布 $P(Y |X) $或决策函数 ,这种方法表示了根据输入 X 得出输出 Y 的预测方法。
- 两相对比,生成方法具有更快的收敛速度和更广的应用范围,判别方法则具有更高的准确率 和更简单的使用方式
算法
监督学习的用途 | |
---|---|
k- 近邻算法 |
线性回归 |
朴素贝叶斯算法 | 局部加权线性回归 |
支持向量机 | Ridge 回归 |
决策树 | Lasso 最小回归系数估计 |
无监督学习的用途 | |
---|---|
K- 均值 |
最大期望算法 |
DBSCAN |
Parzen 窗设计 |
开发步骤
- 收集数据. 网络爬虫,API等
- 准备输入数据
- 分析输入数据
- 训练算法
k-
近邻算法(kNN
)
k-
近邻算法采用测量不同特征之间的距离的方法进行分类.- 优点: 精度高,对异常值不敏感,无数据输入假定.
- 缺点: 计算复杂度高,空间复杂度高
- 使用数据范围: 数值型和标称型
工作原理
- 存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系.
- 输入没有标签的新数据后,将新数据的每个特征与样本集数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签.
- 一般来说,我们只选择样本数据集中前
k
个最相似的数据,通常k
不大于20的整数.最后选择k
个最相似数据中次数最多的分类,作为新数据的分类.
一般流程
-
收集数据: 可以使用任何方法.
-
准备数据: 距离计算所需要的数值,最好是结构化的数据格式.
-
分析数据: 可以使用任何方法
-
训练算法: 此步骤不适用
k-
近邻算法 -
测试算法: 计算错误率
-
使用算法: 首选需要输入样本数据和结构化的输出结果,然后运行
k-
近邻算法判定输入数据分别属于哪个分类,最后应用对计算出的分类执行后续处理.
实例
1 | from matplotlib.font_manager import FontProperties |
朴素贝叶斯算法
-
用于解决分类问题,即将连续取值的输入映射为离散取值的输出
-
解决分类问题的依据是数据的属性。朴素贝叶斯分类器假定样本的不同属性满足条件独立性假设,并在此基础上应用贝叶斯定理执行分类任务。其基本思想在于分析待分类样本出现在每个输出类别中的后验概率,并以取得最大后验概率的类别作为分类的输出。
-
假设训练数据的属性由n维随机向量x表示,其分类结果用随机变量y表示,那么x和y的统计规律就可以用联合概率分布描述,每一个具体的样本都可以通过独立同分布地产生。
-
朴素贝叶斯分类器的出发点就是这个联合概率分布,根据条件概率的性质可以得到
-
在上式中, 代表着每个类别出现的概率,也就是类先验概率; 代表着在给定的 类别下不同属性出现的概率,也就是类似然概率
决策树
工作原理
构造
- 构造就是生成一棵完整的决策树。简单来说,构造的过程就是选择什么属性作为节点的过程,那么在构造过程中,会存在三种节点:
- 根节点:就是树的最顶端,最开始的那个节点。在上图中,“天气”就是一个根节点;
- 内部节点:就是树中间的那些节点,比如说“温度”、“湿度”、“刮风”;
- 叶节点:就是树最底部的节点,也就是决策结果。
- 在构造过程中,要解决三个重要的问题
- 选择哪个属性作为根节点;
- 选择哪些属性作为子节点;
- 什么时候停止并得到目标状态,即叶节点。
剪枝
- 剪枝就是给决策树瘦身,这一步想实现的目标就是,不需要太多的判断,同样可以得到不错的结果。之所以这么做,是为了防止“过拟合”(Overfitting)现象的发生。
剪枝的方法
- “预剪枝”(Pre-Pruning)
- 预剪枝是在决策树构造时就进行剪枝。方法是在构造的过程中对节点进行评估,如果对某个节点进行划分,在验证集中不能带来准确性的提升,那么对这个节点进行划分就没有意义,这时就会把当前节点作为叶节点,不对其进行划分。
- “后剪枝”(Post-Pruning)
- 后剪枝就是在生成决策树之后再进行剪枝,通常会从决策树的叶节点开始,逐层向上对每个节点进行评估。如果剪掉这个节点子树,与保留该节点子树在分类准确性上差别不大,或者剪掉该节点子树,能在验证集中带来准确性的提升,那么就可以把该节点子树进行剪枝。方法是:用这个节点子树的叶子节点来替代该节点,类标记为这个节点子树中最频繁的那个类