Iawen's Blog

风过无痕,水流无声,随手采摘或记录着这知识海洋的点点滴滴......

目录

机器学习算法有助于从不同数据源收集数据, 转换富数据集的形式, 并基于分析结果, 帮助我们采取明智的行动。机器学习算法是高效、准确的方法, 并提供通用的学习方法来解决以下问题:

  • 处理大规模问题
  • 做出准确的预测
  • 解决各种不同的学习问题
  • 学习哪些结果可以得出, 以及在何种条件下这些问题能够学习

机器学习算法的一些应用领域如下:

  • 基于销售数据的价格预测
  • 预测药物的分子反应
  • 检测汽车保险欺诈
  • 分析股市回报
  • 识别高风险贷款
  • 预测风力发电厂产量
  • 跟踪和监测医疗保健设备的利用率和位置
  • 计算能源有效利用率
  • 分析智能城市交通运输增长趋势
  • 估算采矿业矿产储量

1. 分类

线性回归模型本质上进行量化的响应, 但是这样的响应本质上是定性的。就像态度(强烈不同意, 不同意, 中立, 同意和强烈同意)这样的响应, 其本质上就是定性的。对于一个观察来说, 预测一个定性的响应可以视作对这个观察进行分类, 因为这涉及把这个观察分配给一个类别或种类。分类器对于今天的许多问题(如药物或基因组学预测、垃圾邮件检测、面部识别和财务问题)来说是非常重要的工具。

1.1 判别函数分析

判别分析(Discriminant analysis)用来对观察对象进行区分并分组, 进而分配新的观察对象到先前定义好的组中。
判别分析还常被用于生物物种分类, 医学肿瘤分类, 以及信用卡和保险行业的风险界定。判别分析的主要目标是判别和分类。关于判别分析的三个假设是: 各判别变量之间具有多元正态分布, 变量间的低多重共线性, 各组变量的协方差矩阵相等。

数据集: BRINE的地质学数据分析数据集

1.1.1 数据加载

df = pd.read_csv("E:/Learn/python/data/BRINE.TXT", sep="\t", index_col="No.")
# df.drop(columns=["GROUP"], inplace=True)
df.head()

1.1.2 验证数据集和转换

通过离散点矩阵, 明显可见数据呈现彗星状分布。这表明需要对数据进行log变换, log变换对地质化学数据来说是常见的变换方法。首先对整个数据集进行复制是很好的实践经验, 然后对地质化学指标进行log变换。因为数据中包含了0, 所以我们对这份数据集采用log+1变换, 而不是log变换。

import seaborn as sns
sns.pairplot(df)

# 检查这些特征之间是否有任何相关性
# 默认地, 系统返回每个行-列对中的 Pearson 相关系数。通过传递方法的参数, 还可以切换到 Kendall's tau 或 Spearman's 秩相关系数
df.corr() #

df_log = np.log1p(df)
df_log.head()
sns.pairplot(df_log)

1.1.3 训练模型

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda = LinearDiscriminantAnalysis(n_components=2)

y = df.GROUP
df.drop(columns=["GROUP"], inplace=True)
lda.fit(df_log, y)
lda.score(df_log, y)

lda_loadings = pd.DataFrame(lda.scalings_, index=columns, columns=['LD1', 'LD2'])

lda_scores = lda.fit(df_log, y).transform(df_log)
 
LDA_scores = pd.DataFrame(lda_scores, columns=['LD1', 'LD2'])
LDA_scores['Species'] = df.GROUP
 
d = {1: 'GROUP1', 2: 'GROUP2', 3: 'GROUP3'}
LDA_scores['Species'] = LDA_scores['Species'].map(d) 
 
sns.scatterplot(x='LD1', y='LD2', data=LDA_scores, hue='Species')

1.2 多元逻辑回归

多元逻辑回归(Multinomial logistic regression)基于多个自变量, 预测样本所在的分类或者分类在某因变量上的概率。它一般使用在因变量有两个以上名字型分类或无序分类的情况下, 而且这种问题中自变量的虚拟编码相当普遍。自变量可以是二分的(二进制)或连续的(区间或比例)。多元逻辑回归使用最大似然估计来进行分类问题求解, 而不是传统多项式回归中使用的最小二乘估计。样本概率分布的一般形式被事先假设, 在参数估计的过程中, 首先设定参数的初值, 在设定的参数初值下, 计算从事先假定分布进行样本抽样的似然值。该过程被迭代进行直到在某个参数估计下得到最大似然值。

数据集: 使用名为hsbdemo的学生数据集

1.3 Tobit回归

Tobit回归(Tobit regression)是用来描述非负自变量和因变量之间关系的。它也被称为审查回归模型。该模型被设计用来在因变量存在或左或右的删剪时估计变量之间的线性关系。因变量删剪发生在下面的情况下, 当一个变量的值等于或者高于某个阈值时, 该变量取值为该阈值, 所以变量的真实值可能等于该阈值, 也可能高于该阈值。Tobit模型用在许多样本的因变量为零或特定值的应用中(如汽车支出、医疗支出、工作时间、工资等)。该模型是为了度量受限的因变量, 这些因变量只在它高于或低于某个截断阈值时才能观察到。

1.4 泊松回归

泊松回归(Poisson regression)处理因变量是一个计数总和的情况。除了因变量(Y)是一个符合泊松分布的计数之外, 泊松回归与传统的多项式回归很相似。因此, Y的可能值是非负整数: 0, 1, 2, 3等。一般来说, 非常大的计数是很少见的。泊松回归与逻辑回归相似, 因为逻辑回归也是有一个离散的响应变量。有所不同的是, 泊松回归的响应不像逻辑回归那样局限于特殊的值。

2. 聚类

聚类是将相似对象聚合成一簇的过程。每一个簇由彼此之间相似并且与其他类的对象不相似的对象组成。聚类的目标是确定一组未标记数据的内在分组。聚类可用于数据挖掘(DNA分析、营销研究、保险研究等), 文本挖掘, 信息检索, 统计计算语言学, 以及基于语料库的计算词典学等不同应用领域。聚类算法必须满足如下要求:

  • 可扩展性
  • 处理各种类型的属性
  • 发现任意形状的簇
  • 处理噪音和异常值的能力
  • 可解释性和可用性

2.1 层次聚类

层次聚类是最重要的无监督学习方法之一。给定数据点集的层次聚类结果是以二叉树(系统树图)的形式展现的。在二叉树中, 叶节点代表了数据点, 中间节点代表了不同大小的聚类簇。每一个对象都被指派给一个独立的簇。所有簇的评估是基于两两节点间的距离矩阵。使用距离数值来构建距离矩阵。簇对之间的距离用其最短距离来表示。需要合并的簇对的距离值需要被移除出矩阵, 并合二为一。合并后的簇的距离需要使用其他簇来评估, 之后再更新距离矩阵。该过程被不断重复直到距离矩阵缩减成一个唯一的元素。

层次聚类能够产生对象的排序。这对富含信息的数据展示很有帮助。更小的簇对信息的发掘更有帮助。层次聚类的主要缺点是, 如果对象在早期被错误地分组了, 没有对对象重定位的措施。使用不同的簇间距离度量方法可能产生不同的聚类结果。

2.2 k均值聚类

k均值聚类算法是用来估计K组分类的中心的。k均值聚类是无监督的, 非确定性的, 天然递归的。该方法产生了确定数量的互相分离的扁平(无结构的)簇。K指的就是簇的数量。这些簇基于当前的数据生成, 每个簇至少有一个数据点。这些簇性质上是不重叠的, 无结构的。一开始数据点被随机指派给K个簇。因此在聚类早期阶段, 不同簇中的数据点分布几乎是相同的。在聚类的过程中, 如果一个数据点靠近它自己的簇, 它会保持原样。如果一个数据点不靠近它自己的簇, 它会被转移到它最近的簇中。该步骤对所有数据点重复进行, 直到没有数据点从一个簇移动到另一个簇。到此为止, 聚类结果稳定下来, 聚类过程停止。以簇内和簇间的距离和内聚力为度量, 初始划分方式的选择很大程度上影响了最终的聚类结果。

相比层次聚类, k均值聚类最大的优势在于计算时间消耗较低。主要的挑战是确定合适的簇数量比较困难。

3. 模型选择和正则化

使用标记的样本来训练一个模型, 用该模型将样本对象分类到有限的类别集合中, 这是机器学习中有监督分类的主要挑战之一。数值的或离散的特征向量用于描述不同的样本。在特征子集选择问题中, 机器学习算法面临着在特征向量中选择一些特征子集, 并舍去其他特征以集中模型注意力的问题。

当拟合线性回归模型时, 最能描述数据的特征变量子集是最有价值的。在搜索特征变量子集时, 有很多不同的方法和策略可以搜索最佳子集。如果有样本包含m个特征变量, 最优回归模型包含p个变量, p≤m, 最一般的方法是通过尝试所有可能的p个变量的组合, 挑选能够最优拟合数据的模型来挑选特征子集。

但是, 这将产生m!p!(m-p)!个可能的组合, 随着m的增加, 组合的数量将迅速增长, 例如, m=20, p=4将产生4845种可能的组合。除了增强模型注意力的好处之外, 使用更少的特征, 我们能够减少处理数据的时间, 并增强分类模型的可解释性。

3.1 压缩方法

压缩回归指的是回归问题中, “估计”或“预测”的压缩方法;该方法在多重共线性回归存在时非常有效。在数据集相比研究的协变量的数量较小的情况下, 压缩技术可以改进预测结果。常用的压缩方法有:

  • 线性压缩因子——用同一因子压缩所有系数。
  • 岭回归——惩罚最大似然, 将惩罚因子添加到似然函数中, 使每个系数分别根据其协变量的方差进行收缩。
  • lasso——通过对归一化协变量系数的绝对值之和设置约束, 将某些系数缩减为零。

压缩方法保留预测器的一个子集, 而丢弃其余的参数。子集选择法能够产生一个更可解释的模型, 该模型的预测误差可能比全模型更低。压缩方法更为连续, 且使模型不容易受到高可变性的影响。在线性回归模型中, 当相关变量较多时, 它们的相关系数很难确定, 并表现出较高的方差。

3.2 降维方法

降维方法是多个信息处理领域的重大挑战之一, 包括模式识别、数据压缩、机器学习和数据库索引, 它是一种流行的学习方法。在很多问题中, 需要测量的数据向量是高维的, 但数据处于较低维的流形上。高维数据的主要挑战在于它的复杂性;它间接测量了数据的潜在特征, 这些特征通常不能被直接测量。降维也可以看作导出一组自由度的过程, 它可以用来重现数据集的大部分可变性。

4. 非线性

4.1 广义加性模型

4.2 平滑样条

4.3 局部回归

5. 监督学习

监督学习需要学习一组输入变量(通常为向量)和输出变量(也称为监控信号)之间的映射, 并应用此映射来预测未知数据的输出。监督学习的方法尝试发现输入变量和目标变量之间的关系。发现的关系在称为“模型”的结构中表示。通常隐藏在数据集中的模型描述和现象解释, 在知道输入属性的值后, 这些模型可以用于预测目标属性的值。
监督学习是从监督的训练数据(训练样本集)推测函数的机器学习任务。训练数据由一组训练样本组成。在监督学习中, 每个例子是一组, 它由一个输入对象和一个期望的输出值组成。监督学习算法分析训练数据并学习出预测函数。

在监督学习中要考虑的一些问题如下:

  • 权衡有偏变量
  • 函数复杂性和训练数据量
  • 输入空间的维度
  • 输出数据中的噪声
  • 数据的异构性
  • 数据的冗余性
  • 交互性和非线性问题的存在

5.1 决策树学习

作为分类和问题预测的常用工具, 决策树是一种递归地划分实例空间或变量集的分类器。决策树表示为树结构, 其节点分为两类:叶节点或决策节点。叶节点用于保存目标属性的值, 决策节点则指定在单个属性-值上实现的规则。决策节点根据输入属性–值的特定离散函数将实例空间分割成两个或多个子空间。每个测试考虑单个属性, 使得实例空间根据属性的值进行分区。例如, 在数值属性的情况下, 条件就指的是一个范围。在决策节点上实现规则后, 对应的子树就是决策结果。每个叶节点保存一个概率向量, 该向量指示了目标属性具有特定值的概率。根据沿路径测试的结果, 由树的根节点到叶节点游历, 从而对实例进行分类。

使用决策树挖掘数据的核心需求如下:

  • 属性–值描述:目标可以描述为一个特性或属性的固定集合。
  • 预设类别:待分配类别的示例必须是监督数据。
  • 足够的数据:使用多个训练样本。

5.2 朴素贝叶斯

朴素贝叶斯是一种监督学习的方法。作为一种基于贝叶斯理论的线性分类器, 其理论指出, 某一类的特定特征的存在与其他特征的存在无关。朴素贝叶斯是一种强大且高效的算法。贝叶斯分类器可以预测类成员概率, 例如给定元组属于特定类的概率。贝叶斯信念网络是一个联合条件概率分布。它允许在变量子集之间定义类条件独立性。它提供了可供学习的因果关系的图形模型。

5.3 随机森林

随机森林是对数据结构提供预测的决策树集合。它们是一种在明智的随机化中汇集多个决策树能力, 以及整体学习以产生预测模型的工具。它们为每个记录提供可变排名、缺失值、分段和报告, 以确保深入理解数据。每棵树建成后, 所有的数据都沿树自上而下运行。对于每一对情况, 均需对邻域进行计算。如果两种情况占用同一终端节点, 则其邻域增加一个。在运行结束时, 将结果除以树的数量进行归一化。近似值用于替换丢失的数据, 定位异常值, 并有助于对数据的低维度理解。作为外包数据, 训练数据用于评估分类误差并计算变量的重要性。

随机森林运行在大型数据库上, 可以非常有效地产生准确的结果。它们可以在不需要删除操作的情况下处理多个变量, 并通过估计变量的重要性来解决分类问题。在森林构建的过程中, 它们产生了对泛化误差的内部无偏估计。随机森林是估计丢失数据的有效方法, 特别是在大部分数据丢失时依然能保持很高的准确性。

5.4 支持向量机

机器学习算法解决学习问题需要使用正确的特征集。SVM利用(非线性)映射函数\(\phi\), 将输入空间的数据转换为特征空间中的数据, 使得问题线性可分离。SVM查找最佳分离超平面并通过\(\phi-1\)映射回输入空间。在所有可能的超平面中, 选择距离最接近的数据点(边距)尽可能大的超平面。

5.5 随机梯度下降

6. 无监督学习

无监督学习针对全体输入样本, 学习出一种特定的模型来表征输入样本整体的统计结构。无监督学习是重要的, 因为它在大脑的学习过程中比监督学习更常见。例如, 眼睛中光感受器的活动是随着视觉世界而不断变化的。它们持续提供可用于显示世界上有什么对象、如何呈现、照明条件怎样等的所有信息。然而, 基本上没有关于场景内容的信息在视觉学习期间是可用的。这就使得无监督的方法至关重要, 并用作适合神经突触的计算模型。

无监督学习是基于这样的概念: 机器学习的目标是建立一种用于决策制定、预测未来输入、高效传输输入到其他机器等目的的输入的表示。某种意义上来说, 可认为无监督学习是在上述数据中发现模式和规律, 并且考虑噪声的影响。

无监督学习的一些目标如下:

  • 在不需要目标输出的前提下, 在大型数据集中发现有用的结构。
  • 提高输入数据集的学习速度。
  • 通过为每个可能的数据向量分配分数或概率来构建数据向量模型。

6.1 自组织映射(self-organizing map, SOM)

自组织映射是一种基于竞争学习的无监督学习方法。在基于竞争学习的模型中, 输出神经元为了被激活而竞争, 而在任何一个时间只有一个神经元可以被激活, 这个激活的神经元称为获胜神经元。可以通过在神经元之间具有的侧向抑制连接(负反馈路径)来诱导/实现这种竞争, 使得神经元组织起来。SOM可以想象为片状神经网络, 节点有规则地排列, 通常是二维网格。SOM的主要目标是将输入的任意维度信号转换为一维或二维离散映射, 并以拓扑有序的方式自适应地执行该转换。在竞争学习过程中, 神经元被选择性地调整到各种输入模式(刺激)或输入模式类别。如此调整的神经元(获胜神经元)的位置被排序, 并且在格子上创建用于输入特征的有意义的坐标系。因此, SOM形成所需的输入模式的拓扑映射。

6.2 矢量量化(vector quantization)

量化是通过标量或矢量的有限集来映射标量或矢量的无限集的过程。量化在信号处理、语音处理和图像处理领域均有应用。矢量量化对数据块进行量化, 而不是针对某一标量值。量化输出是从有限的矢量集合(称为码书, codebook)指向另一个数据块(矢量)的索引值。所选择的矢量通常是输入数据块的近似值。复制矢量(reproduction vector)被认为是编码器和解码器。编码器采用输入矢量, 其决定了最佳表现复制矢量, 并发送该矢量的索引。解码器采用该索引并形成复制向量。

7. 增强学习

增强学习是训练一个会自我行动的“代理人”来最大化它从世界中获取奖励的问题。它是关于如何行动以及如何将事件情况映射到动作, 以最大化量化的奖励信号的问题。像大多数机器学习方法一样, 学习者刚开始不知道要采取哪些行动, 而是要通过尝试来发现哪些行为能够产生最大的奖励。强化学习的两个最重要的区别特征是“尝试, 错误, 搜索”的过程和延迟奖励。

增强学习的主要内容如下:

  • 策略: 策略是代理人的行为函数。它确定从环境的感知状态到所采取行为之间的映射。它对应于心理学所称的一组刺激反应规则或关联。
  • 价值函数: 价值函数是对未来奖励的预测。某个状态的价值是从该状态开始代理人期望在未来积累的奖励总额。而奖励决定了环境状态的即时、内在的可取性, 价值表示了状态长期的可取性, 其中考虑了该状态之后的状态序列以及伴随这些状态的奖
    励。
  • 模型: 模型预测下一步环境将会如何变化。它预测下一个状态和下一个状态的即时奖励。

7.1 马尔可夫链

如果每个实验的结果是离散状态集合之一, 且实验结果仅依赖于当前状态而不依赖于过去状态, 则称这个实验的一系列状态为马尔可夫链。从一个状态变为另一个状态的概率表示为pij, 称为转移概率。转移概率矩阵是n×n矩阵, 矩阵的每个元素是非负的, 并且矩阵的每一行元素之和为1。

7.2 连续马尔可夫链

连续时间马尔可夫链可以标记为具有离散状态的速率的过渡系统。状态具有连续的时间步骤, 延迟呈指数分布。连续时间马尔可夫链适用于建立可靠性模型、控制系统、生物途径、化学反应等。

7.3 蒙特卡罗模拟

蒙特卡罗模拟是系统行为的随机模拟。模拟使用对模型进行抽样实验, 然后使用计算机进行数值实验, 以获得对系统行为的统计学理解。蒙特卡洛模拟用于构建被观察的复杂系统行为的理论, 预测系统的未来行为, 以及基于系统输入和参数变化的最终结果效果的研究。随机模拟是一种系统实验来寻找改进或更好地了解系统行为的方法。它使用在区间[0, 1]上均匀分布的随机数。这些均匀分布的随机数用于从各种概率分布生成随机变量, 然后生成与系统行为的建模相关的采样实验。

8. 结构化预测

结构化预测是机器学习问题的重要应用领域。考虑输入x和输出y, x和y可能是如下类型的数据: 一组标注过的时间序列, 一张图片的一组属性, 句子的解析成分, 或者从一张图片上分割出的一组对象, 结构化预测问题是很有挑战性的, 因为y是包含它的输出变量的数量的指数级别。由于预测需要搜索巨大的参数空间, 因此结构预测问题在计算上是具有挑战性的。因为从有限的数据中学习精确的模型需要推导不同结构化输出之间的共同点, 所以预测也需要统计方面的因素。结构化预测本质上是一个映射问题, 其中映射必须捕捉x和y之间的区别性交互, 并且还允许在y上进行有效的组合优化。

结构化预测是关于从输入数据中预测结构化输出的问题, 不同于只预测一个数值的分类或回归问题。例如:

  • 自然语言处理, 自动翻译(输出: 句子)或句子解析(输出: 解析树)。
  • 生物信息学, 二级结构预测(输出: 二分图)或酶功能预测(输出: 树中的路径)。
  • 语音处理, 自动转录(输出: 句子)或文本转语音(输出: 音频信号)。
  • 机器人, 规划(输出: 动作顺序)。

8.1 隐马尔可夫模型

隐马尔可夫模型(HMM)是一种非常强大的特征化离散时间序列观测数据样本的统计方法。它不仅可以提供建立简约参数模型的有效方法, 还可以将动态规划原理纳入其核心, 用于时变数据序列的统一模式分割和模式分类。时间序列中的数据样本既可以离散或连续分布, 也可以是标量或向量。HMM的基本假设是数据样本可以被很好地表征为参数随机过程, 并且可以在精确和明确定义的框架中估计随机过程的参数。

9. 神经网络

神经网络代表了进行信息处理的仿大脑结构。这些模型受生物学的启发, 而不是大脑实际功能结构的精确复制。神经网络能够从数据中学习的能力很强, 已证明它是许多预测和业务分类应用场景中非常有应用价值的系统。
人工神经网络通过更新网络架构和连接权重来学习, 使网络能够有效地执行任务。它可以从可用的训练模式中学习, 或者从训练样本或输入—输出关系中自动学习。

神经网络是有序三元组\({\alpha, \beta, \gamma}\):\(\alpha\)代表神经元;\(\beta\)代表集合\({(x, y)|x, y \in N}\), 其中元素是神经元x到神经y元的连接;函数\(\gamma\):\(\beta \to R\)定义权重, \(\gamma(x, y)\)为神经元x到神经元y的连接的权重。数据在神经元之间的连接传递, 连接权重是兴奋性或抑制性的。

10. 深度学习

深度学习是指一组相当广泛的机器学习技术和架构, 它们的特点是使用了多层非线性信息处理结构化模型架构。深度学习架构有三大类:

  • 无监督或生成式深度学习网络
  • 有监督深度学习网络
  • 混合深度学习网络

10.1 循环神经网络

11. 评估模型

要用新数据来评估模型的性能。新数据是指模型之前没有见过的数据,而我们有这些新数据的标签。通常的做法是将收集好的带标签数据分成两部分。一部分数据用于构建机器学习模型,叫作训练数据(training data)或训练集(training set)。其余的数据用来评估模型性能,叫作测试数据(test data)、 测试集(test set)或留出集(hold-out set)。

  • 计算精度(accuracy)