机器学习算法/Machine LearningAgorithms
===================================================================================================
===============================================综述================================================
===================================================================================================
与传统算法区别:传统上如果我们想让计算机工作,我们给它一串指令,然后它遵照这个指令一步步执行下去。有因有果,非常明确。但这样的方式在机器学习中行不通。机器学习根本不接受你输入的指令,相反,它接受你输入的数据! 也就是说,机器学习是一种让计算机利用数据而不是指令来进行各种工作的方法。这听起来非常不可思议,但结果上却是非常可行的。“统计”思想将在你学习“机器学习”相关理念时无时无刻不伴随,相关而不是因果的概念将是支撑机器学习能够工作的核心概念。你会颠覆对你以前所有程序中建立的因果无处不在的根本理念。我们说为什么机器学习更像人思考,因为其采用归纳、总结方法,而传统计算机算法则较多采取演绎方法。
定义:从广义上来说,机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。但从实践的意义上来说,机器学习是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。
外延:
数据挖掘=机器学习+数据库。
计算机视觉=图像处理+机器学习。
语音识别=语音处理+机器学习。
自然语言处理=文本处理+机器学习。
分类:
===================================================================================================
监督学习:
监督式机器学习旨在构建能够根据存在不确定性的证据做出预测的模型。监督式学习算法接受已知的输入数据集和对数据的已知响应(输出),然后训练模型,让模型能够为新输入数据的响应生成合理的预测。
监督式学习采用分类↓和回归技术↓开发预测模型。
分类技术可预测离散的响应 — 例如,电子邮件是真正邮件还是垃圾邮件,肿瘤是恶性还是良性的。分类模型可将输入数据划分成不同类别。典型的应用包括医学成像、语音识别和信用评估。
回归技术可预测连续的响应 — 例如,电力需求中温度或波动的变化。典型的应用包括电力系统负荷预测和算法交易。
监督式学习例子 |
预测心脏病发作: 假设临床医生希望预测某位患者在一年内是否会心脏病发作。他们有以前就医的患者的相关数据,包括年龄、体重、身高和血压。他们知道以前的患者在一年内是否出现过心脏病发作。因此,问题在于如何将现有数据合并到模型中,让该模型能够预测新患者在一年内是否会出现心脏病发作。 |
无监督学习:
无监督学习可发现数据中隐藏的模式或内在结构。这种技术可根据包含未标记响应的输入数据的数据集执行推理。
聚类是一种最常用的无监督学习技术。这种技术可通过探索性数据分析发现数据中隐藏的模式或分组。聚类的应用包括基因序列分析、市场调查和对象识别。
=======================================算法应用应考虑的问题========================================
何时选择机器学习算法?
当您遇到涉及大量数据和许多变量的复杂任务或问题,但没有现成的处理公式或方程式时,可以考虑使用机器学习。例如,如果您需要处理以下情况,使用机器学习是一个很好的选择:
• 手写规则和方程式太过复杂——例如人脸识别和语音识别。
• 任务的规则始终在变化——例如事务处理记录的欺诈检测。
• 数据本身在不断变化,程序也必须适应这种变化——例如自动交易、能量需求预测和购物趋势预测等。
如何选择合适算法?
选择正确的算法看似难以驾驭——需要从几十种监督式和无监督机器学习算法中选择,每种算法又包含不同的学习方法。没有最佳方法或万全之策。找到正确的算法只是试错过程的一部分——即使是经验丰富的数据科学家,也无法说出某种算法是否无需试错即可使用。但算法的选择还取决于您要处理的数据的大小和类型、您要从数据中获得的洞察力以及如何运用这些洞察力。
实例1 |
创建可分析艺术作品的算法: 美国罗格斯大学艺术与人工智能实验室的研究人员曾经想知道计算机算法能否像人类一样根据风格、流派和艺术家将绘画作品轻松归类。开始时,他们通过识别视觉特征来对绘画作品的风格分类。他们开发的绘画风格分类算法在数据库中的准确度达到 60%,远超过普通非专业人士。 研究人员假定可用于对风格分类(监督式学习问题)的视觉特征也能用于确定艺术影响力(无监督学习问题)。他们将经过训练的分类算法应用到 Google 图像,用于确定具体对象。他们对跨度长达 550 年的 66 位不同艺术家的 1,700 幅绘画作品测试了此算法。此算法可以可靠地识别出相关的作品,包括迭戈·委拉斯开兹的《教皇英诺森十世肖像》对弗朗西斯·培根的《教皇英诺森十世肖像的习作》产生的影响。 |
实例2 |
优化大型建筑中的 HVAC 能耗: 在办公大楼、医院及其他大型商业楼宇内使用的暖通空调系统 (HVAC)通常效率低下,原因在于这些系统未考虑不断变化的气候模式、多变的能耗或建筑物的热性能。 Building IQ 的基于云的软件平台可解决这个问题。该平台采用先进的算法和机器学习方法连续处理来自功率计、温度计和 HVAC 压力传感器的数千兆字节信息以及天气和能耗。更为特殊的是,机器学习可用于对数据分段和确定天然气、电力、蒸汽和太阳能对加热和冷却流程的 相对贡献量。Building IQ 平台将大型商业楼宇内使用的 HVAC 在正常运行期间的能耗降低了 10% - 25%。 |
=========================================解决问题的范式/套路=======================================
实际工程中面临的挑战: 数据会以各种形式和大小出现。真实数据集可能比较混乱、不完整,并且采用各种不同格式提供。您可能只有简单的数值型数据。但有时您要合并多种不同类型的数据,例如传感器信号、文本,以及来自于相机的图像数据流。 预处理数据可能需要掌握专业知识和工具。例如,对象检测算法训练中的特征选取,需要掌握图像处理领域的专业知识。不同类型的数据需要采用不同的预处理方法。 找到拟合数据的最佳模型需要时间。如何选择正确的模型是一项平衡过程。高度灵活的模型由于拟合了噪声的细微变化而造成了过度拟合。另一方面,简单的模型可能要有更多的假设条件。这些始终是在模型速度、准确性和复杂性之间权衡取舍。 |
听起来很让人望而生畏?不要泄气。要记住,反复尝试和出错才是机器学习的核心——如果一个方法或算法不起作用,只需尝试另一个。但系统化工作流程有助于创造一个顺利的开端。
如何开始?每个机器学习工作流程都从以下三个问题开始:
• 您要处理哪种类型的数据?
• 您想要从中获得哪些洞察力?
• 这些洞察力将如何应用以及在哪里应用?
回答这些问题有助于确定您采用监督式学习还是无监督学习。
在以下情况下选择监督式学习:您需要训练模型进行预测(例如温度和股价等连续变量的未来值)或者分类(例如根据网络摄像头的录像片段确定汽车的技术细节)。 |
在以下情况下选择无监督学习:您需要深入了解数据并希望训练模型找到好的内部表示形式,例如将数据拆分到集群中。 |
操作流程:
在接下来,我们将以例子更详细地介绍具体步骤。整个工作流程将在 MATLAB实现。
这里说说机器学习程序语言问题,matlab代码执行效率极高,因其向量化操作。向量化操作获得的高效率很多时候是以空间换时间实现的。而我们C、C++等语言都是以循环递归为基本结构,Matlab初学者一定要提醒自己,处处想尽办法向量化编程,并且在向量化一个程序的过程中,能有效锻炼其观察、分析、概括、抽象、归纳的能力。
扩展知识:向量化编程Matlab语言的精髓,如果不熟悉其向量化编程的方法,则相当于没掌握这门语言。Matlab以矩阵为核心,Matlab卓越的矩阵计算能力是建立在LAPACK算法包和BLAS线性代数算法包的基础之上的。这两个算法包里的程序都是由世界上多个顶尖专家并经过高度优化的程序。 |
===================================================================================================
===========================================具体工程实例============================================
===================================================================================================
根据手机传感器数据对身体活动进行分类
本示例基于手机的健康监控应用程序。输入数据包含通过手机的加速计和陀螺仪提供的三轴传感器数据。获得的响应(或输出)为日常的身体活动,例如步行、站立、跑步、爬楼梯或平躺。我们希望使用输入数据训练分类模型来识别这些活动。由于我们的目标是分类,因此我们将应用监督式学习。经过训练的模型(或分类器)将被集成到应用程序中,帮助用户跟踪记录全天的身体运动水平。
================================================步骤===============================================
步骤 1:加载数据 |
要加载加速计和陀螺仪的数据,我们要执行以下操作: 1. 手持手机坐下,记录手机的数据,然后将其存储在标记为“坐”的文本文件中。 2. 手持手机站着,记录手机的数据,然后将其存储在第二个标记为“站立”的文本文件中。 3. 重复上述步骤,直到我们获得希望分类的每个活动的数据。 我们将标记的数据集存储在文本文件中。诸如文本或 CSV 等平面文件格式更易于处理,可以直接导入数据。
机器学习算法还不够智能,无法辨别噪声和有价值的信息之间的差异。使用数据进行训练之前,我们需要确保数据简洁和完整。 |
步骤 2:预处理数据 |
我们将数据导入 MATLAB,然后为每个带有标签的数据集绘图。要预处理数据,我们可以执行以下操作: 1. 查找位于绝大多数数据所在范围之外的异常值数据点。我们必须确定异常值能否忽略或者它们是否表示模型应该考虑的现象。在我们的示例中,可以安全地将其忽略掉(这些异常值是我们记录数据时无意中移动所产生的结果)。 2. 检查是否有缺失值(在记录期间我们可能会因为断开连接而丢失数据)
我们可以简单地忽略这些缺失值,但这会减少数据集的大小。或者,我们可以通过插值或使用其他示例的参照数据来作为缺失值的近似。 注:在许多应用程序中,异常值提供了关键信息。例如,在信用卡欺诈检测应用程序中,它们表示超出客户常规购买模式的购买行为。
3. 从加速计数据中删除重力效应数据,这样我们的算法就能专注处理物体的移动情况,而非手机的移动情况。我们通常使用简单的高通滤波器(例如双二阶滤波器)来处理此问题。 4. 将数据分为两组。我们保存部分数据用于测试(测试组),将其余数据(训练组)用于构建模型。这种方法被称为保留方法,是一种有用的交叉验证技术。 |
步骤 3:推导特征 |
推导特征(也称为特征工程或特征提取)是机器学习中最为重要的部分之一。此过程可将原始数据转换为机器学习算法可以使用的信息。作为活动跟踪记录者,我们希望提取那些捕获了加速计数据的频谱的特征。这些特征将会帮助算法区分步行(低频)和跑步(高频)。我们创建了一个包含选定特征的新表。
您可以推导出的特征数量只会受您的想象力限制。然而,我尽量采用许多技术来处理不同类型的数据。
|
步骤 4:构建和训练模型 |
构建模型时,最好先从构建简单模型开始;这样可以更快的运行并且更易于解释。我们从构建基本决策树开始。 为了了解决策树的执行情况,我们绘制了混淆矩阵,该表将模型产生的分类与我们在步骤 1 中创建的实际分类标签进行了比较。
此混淆矩阵显示我们的模型难以区分步行和跑步。决策树可能无法处理这种类型的数据。我们尝试一些不同的算法。
我们尝试使用 K-近邻算法 (KNN),这种简单的算法可以存储所有训练数据,将新点与训练数据进行比较,然后返回最近的“K”个点的多数类别。。相比于简单决策树提供的 94.1%的准确度,此算法的准确度能达到 98%。混淆矩阵也更易于查看:
然而,KNN 需要占用大量内存才能运行,因为该算法需要使用所有训练数据来进行预测。我们尝试了线性判别模型,但也无法改进结果。最后,我们尝试了支持向量机 (SVM)。SVM 处理的结果非常好,我们现在获得的准确度为 99%:
我们通过对模型的更换和不断尝试不同算法实现了目标。如果我们的分类器仍无法可靠地区分跳舞和跑步,我们将寻找方法来改进这个模型。 |
步骤 5:改进模型 |
可通过两种不同方式改进模型:简化模型或增加模型的复杂度。
简化: 首先,我们要找机会减少特征的数量。热门的特征减少技术包括: . 相关矩阵 – 可显示变量之间的关系,因此可以删除并非高度相关的变量(或特征)。 . 主分量分析 (PCA) – 可消除冗余,具体方法是找到一组捕获了原始特征的关键区别的特征,并推导出数据集中存在的强模式。 . 序列特征减少 – 采用迭代的方式减少模型的特征,直到无法改进模型性能为止。 接下来,我们寻找方法来简化模型本身。我们可以通过以下方式实现: . 修剪决策树的分支 . 从集成结构中删除学习器
增加复杂度: 如果我们的模型由于过度泛化而无法区分步行和跑步,我们就需要寻找新方法来进一步完善该模型。我们可以通过以下方式实现: • 使用模型组合 – 将多个简单的模型组合成强模型,这样提供的数据趋势要优于其中任何一个简单模型单独提供的趋势。 • 添加更多数据源 – 查看陀螺仪和加速计的数据。陀螺仪记录活动期间手机所处的方向。此数据可提供不同活动的唯一标志,例如,可能存在一个跑步所独有的加速度和旋转的组合。
对模型进行调整后,我们使用预处理期间保留的测试数据验证其性能。如果模型能够在测试数据集上对活动实现可靠的分类,我们就能将其应用到手机上,开始跟踪记录。
|
|
|
===================================================================================================
===========================================无监督学习============================================
===================================================================================================
如我们在第 1 部分所见,绝大多数无监督学习技术是聚类分析的形式。
在聚类分析中,根据某些相似性的量度或共有特征把数据划分成组。采用聚类的组织形式,同一类(或簇)中的对象非常相似,不同类中的对象截然不同。
聚类算法分为两大类:
. 硬聚类,其中每个数据点只属于一类
. 软聚类,其中每个数据点可属于多类
扩展知识:如果您不知道数据可能如何分组: • 使用自我组织的特征图或层次聚类,查找数据中可能的结构。 • 使用聚类评估,查找给定聚类算法的“最佳”组数。 |
==============================================硬聚类===============================================
常见硬聚类算法
k-均值(K-means) |
将数据分割为 k 个相互排斥的类。一个点在多大程度上适合划入一个类由该点到类中心的距离来决定。最佳使用时机... • 当聚类的数量已知时 • 适用于大型数据集的快速聚类 |
k-中心点 |
与 k-均值 类似,但要求类中心与数据中的点契合。最佳使用时机... • 当聚类的数量已知时 • 适用于分类数据的快速聚类 • 扩展至大型数据集 |
层次聚类 |
通过分析成对点之间的相似度并将对象分组到一个二进制的层次结构树,产生聚类的嵌套集。最佳使用时机... • 当您事先不知道您的数据中有多少类时 • 您想要可视化地指导您的选择 |
自组织映射 |
基于神经网络的聚类,将数据集变换为保留拓朴结构的 2D 图。最佳使用时机... • 采用 2D 或 3D 方式可视化高维数据 • 通过保留数据的拓扑结构(形状)降低数据维度 |
==============================================软聚类===============================================
模糊 c-均值 |
当数据点可能属于多个类时进行基于分割的聚类。最佳使用时机... • 当聚类的数量已知时 • 适用于模式识别 • 当聚类重叠时 |
高斯混合模型 |
基于分割的聚类,数据点来自具有一定概率的不同的多元正态分布。最佳使用时机... • 当数据点可能属于多个类时 • 当聚集的类具有不同的大小且含有相关结构时 |
软聚类例子:使用模糊 c-均值聚类法分析基因表达数据一个生物家团队正在通过微阵列分析基因表达数据,更好地了解涉及正常和异常细胞分裂的基因。(如果某个基因积极参与蛋白质生产之类的细胞功能,则称该基因为“已表达”。)
微阵列包含两个组织检体的表达数据。研究人员想要比较检体,确定某些基因表达模式是否与癌细胞增生有牵连。
在对数据进行预处理以消除噪声之后,他们对数据进行聚类。因为相同的基因可能涉及多个生物学过程,没有单个基因可能只属于一类。研究人员对数据运用模糊 c-均值算法。然后,他们对聚集生成的类进行可视化,识别具有类似行为方式的基因组。
==============================================建模实例=============================================
引入junsai建模过程
转数学讲稿将Kmeans、层次聚类、PCA
用降维的方法改进模型:
机器学习是一种发现大数据集内部规律的有效方法。但较大的数据增加了复杂度。随着数据集越来越大,您经常需要减少特征或维度的数量(例子↓)。另一方面,奥卡姆剃刀原则:如果你有两个原理,它们都能解释观测到的事实,那么你应该使用简单的那个,直到发现更多的证据。换句话,我们尽量使用更少但足够的特征来描述事物。
例如:EEG 数据减缩 假设您有捕获脑电活动的脑电图 (EEG) 数据,您想使用此数据预测未来的癫痫发作。使用许多导线捕获数据,每根导线对应原始数据集中的一个变量。每个变量都包含噪声。为使您的预测算法更稳健,您使用降维技术生成数量较少的特征。由于这些特征是从多个传感器计算出来的,所以不太容易受单个传感器中的噪声影响,如果您直接使用原始数据,则噪声的影响会非常明显。 |
常见降维技术
主成分分析 (PCA) |
对数据执行线性变换,使您的高维数据集中的绝大多数方差或信息被前几个主成分捕获。第一个主成分将会捕获大部分方差,然后是第二个主成分,以此类推。 |
因子分析 |
识别您的数据集中各变量之间潜在的相关性,提供数量较少的未被发现的潜在因子或公共因子的一种表现方式。 |
非负矩阵分解 |
当模型项必须代表非负数(比如物理量)时使用。 |
这里主要使用PCA:
在有许多变量的数据集中,变量组经常一起移动。PCA 充分利用这种信息冗余,通过原始变量的线性组合生成新变量,使少数新变量能够捕获大多数信息。每个主成分都是原始变量的线性组合。因为所有主成分互不相关,所以没有冗余信息。
PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。
===========================================无监督学习小结==========================================
在本部分中,我们详细介绍了无监督学习的硬聚类和软聚类算法,提供了一些为您的数据选择合适算法的技巧,展示了减少数据集内的特征数量如何改进模型性能。至于后续步骤:
• 无监督学习可能是您的最终目标。例如,如果您做市场研究并想根据网站行为有针对性地划分消费群体,那么,聚类算法几乎肯定能给您想要寻求的结果。
• 另一方面,您可能想使用无监督学习,作为监督式学习的预处理步骤。例如,应用聚类技术得出数量较少的特征,然后使用这些特征作为训练分类器的输入。
下一部分,我们将探索监督学习算法和技术,了解如何通过特征选择、特征减缩和参数调节来改进模型。
===================================================================================================
=============================================监督学习=============================================
===================================================================================================
监督式学习算法接受已知的输入数据集合(训练集)和已知的对数据的响应(输出),然后训练一个模型,为新输入数据的响应生成合理的预测。如果您尝试去预测现有数据的输出,则使用监督式学习。
监督学习技术可分成分类或者回归的形式:
分类技术预测离散的响应 — 例如,电子邮件是真正邮件还是垃圾邮件,肿瘤是小块、中等还是大块。分类模型经过训练后,将数据划分成类别。应用软件包括医学成像、语音识别和信用评分。
回归技术预测连续的响应 — 例如,电力需求中温度或波动的变化。应用软件包括预测股价、笔迹识别和声信号处理。
经验提示: •您的数据能否进行标记或分类?如果您的数据能分为特定的组或类,则使用分类算法。 •处理数据范围?如果您的响应性质是一个实数(比如温度,或一件设备发生故障前的运行时间),则使用回归方法。 |
如我们在前面所见,选择机器学习算法是一个试错过程。同时也是算法具体特性的一种权衡:
• 训练的速度 • 内存使用 • 对新数据预测的准确度 • 透明度或可解释性 (您对算法做出预测的理由的理解难易程度) |
评定一个算法的优劣,主要有以下几个指标。 (1)正确性 (2)友好性 (3)可读性 (4)健壮性 (5)效率 |
常见回归算法总结如下:
线性回归 |
线性回归是一项统计建模技术,用来描述作为一个或多个预测元变量的线性函数的连续应变量。因为线性回归模型解释简单,易于训练,所以通常是第一个要与新数据集拟合的模型。 最佳使用时机... • 当您需要易于解释和快速拟合的算法时 • 作为评估其他更复杂回归模型的基准 |
非线性回归 |
非线性回归是一种有助于描述实验数据中非线性关系的统计建模技术。通常将非线性回归模型假设为参数模型,将该模型称为非线性方程。 “非线性”是指一个拟合函数,它是多个参数的非线性函数。例如,如果拟合参数为 b0、b1 和 b2:方程式 y = b0+b1x+b2x^2是拟合参数的线性函数,而 y = (b0x^b1)/(x+b2) 是拟合参数的非线性函数。最佳使用时机... • 当数据有很强的非线性趋势,不容易转化成线性空间时 • 适用于自定义模型与数据拟合 |
常见分类算法总结如下:
逻辑回归 |
适合可以预测属于一个类或另一个类的二元响应概率的模型。因为逻辑回归比较简单,所以常用作二分类问题的起点。最佳使用时机... • 当数据能由一个线性边界清晰划分时 • 作为评估更复杂分类方法的基准 |
k 最近邻 (kNN) |
kNN 根据数据集内类的最近邻关系划分对象的类别。kNN预测假定相互靠近的对象是相似的。距离量度(如欧氏距离、绝对值距离、夹角余弦和 Chebychev 距离)用来查找最近邻。最佳使用时机... • 当您需要简单算法来设立基准学习规则时 • 当无需太关注 训练模型的内存使用时 • 当无需太关注 训练模型的预测速度时 |
支持向量机 (SVM) |
通过搜索能将全部数据点分割开的判别边界(超平面)对数据进行分类。当数据为线性可分离时,SVM 的最佳超平面是在两个类之间具有最大边距的超平面。如果数据不是线性可分离,则使用损失函数对处于超平面错误一边的点进行惩罚。SVM 有时使用核变换,将非线性可分离的数据变换为可找到线性判定边界的更高维度。最佳使用时机... • 适用于正好有两个类的数据(借助所谓的纠错输出码技术, 也可以将其用于多类分类) • 适用于高维、非线性可分离的数据 • 当您需要一个简单、易于解释、准确的分类器时 |
神经网络 |
受人脑的启发,神经网络由高度互连的神经元网络组成,这些神经元将输入与所需输出相关联。通过反复修改联系的强度,对网络进行训练,使给定的输入映射到正确的响应。最佳使用时机... • 适用于高度非线性系统建模 • 当数据逐渐增多,而您希望不断更新模型时 • 当您的输入数据可能有意外变动时 • 当模型可解释性不是主要考虑因素时 |
朴素贝叶斯 |
朴素贝叶斯分类器假设类中某一具体特征的存在与任何其他特征的存在不相关。根据数据属于某个特定类的最高概率对新数据进行分类。最佳使用时机... • 适用于包含许多参数的小数据集 • 当您需要易于解释的分类器时 • 当模型会遇到不在训练数据中的情形时,许多金融和医学 应用就属于这种情况 |
判别分析 |
判别分析通过发现特征的线性组合来对数据分类。判别分析假定不同的类根据高斯分布生成数据。训练判别分析模型涉及查找每个类的高斯分布的参数。分布参数用来计算边界,边界可能为线性函数或二次函数。这些边界用来确定新数据的类。最佳使用时机... • 当您需要易于解释的简单模型时 • 当训练过程中的内存使用是需要关注的问题时 • 当您需要快速预测的模型时 |
决策树 |
利用决策树预测对数据响应的方法是,按照树中根节点(起始)到叶节点的顺序自上而下地决策。树由分支条件组成,在这些条件中,预测元的值与训练的权重进行比较。分支的数量和权重的值在训练过程中确定。附加修改或剪枝可用来简化模型。最佳使用时机... • 当您需要易于解释和快速拟合的算法时 • 最小化内存使用 • 当不要求很高的预测准确性时 |
随机森林 |
在这些集成方法中,几个“较弱”的决策树组合成一个“较强”的整体。袋装决策树由根据从输入数据中自举的数据进行独立训练的树组成。促进决策树涉及创建一个强学习器,具体方法是,迭代地添加“弱”学习器并调节每个弱学习器的权重,从而将重点放在错误分类的样本。 最佳使用时机... • 当预测元为无序类别(离散)或表现非线性时 • 当无需太关注训练一个模型所用时间时 |
连续集中学了几天机器学习,感觉收获非常大。讲出脉络和大家一起分享。