原文链接:
https://mp.weixin.qq.com/s/PB_n8woxdsWPtrmL8BbehA
机器学习下包含神经网络、深度学习等,他们之间的关系表示如图2-7所示。
图2-7 关系图
那么什么是机器学习、深度学习、他们的区别又是什么呢?
2.7.1 什么是机器学习?
机器学习是 人工智能 (AI) 和计算机科学的一个分支,专注于使用数据和算法来模仿人类的学习方式(构建“学习”方法),逐步提高其准确性,模拟或实现人类的学习行为。机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。
传统机器学习的研究方向主要包括决策树、随机森林、人工神经网络、贝叶斯学习等方面的研究。这些在2.6章节的OpenCV库介绍中有所提及。
机器学习是通过算法使系统自行学习和改进的过程。机器学习的最终目标是设计能够自动帮助系统收集数据并使用该数据来学习更多信息的算法。系统应在收集的数据中寻找模式,并使用它们为自己做出重要决策。机器学习涉及到的7大步骤,如图2-8所示。
图2-8 机器学习的步骤
总的来说,机器学习正在让系统像人类一样思考和行动,展示与人类相似的智能,并赋予它们大脑。在实际应用中,常见的机器学习用于:
• 将垃圾邮件与正常电子邮件分类;
• 物体和图像识别;
• 检测假新闻;
• 理解书面或口头语言;
• 服务机器人;
• 自动驾驶汽车 ;
总之,机器学习程序可以像人类一样从经验(或者准确地说是数据)中学习。当接触到新数据时,这些应用程序会自行学习、成长、改变和拓展。换句话说,机器学习可以通过迭代达到预测和实际最小差距的预测。机器学习在未来将会被更多的应用和接受。
2.7.2 机器学习如何工作?
笔者认为,机器学习的工作原理主要分为决策和误差损失优化2部分。
机器学习过程首先将已标记的训练数据输入到选定的算法中。算法将将会对这些已标记或未标记数据进行估计,并产生预测值,然后决策是否进行参数调整。该过程称为决策过程。
如果预测和结果不匹配,算法会被重新训练多次,直到数据科学家得到想要的结果。通过误差函数(损失函数)量化预测和真实值间的差距。这使机器学习算法能够不断地自行学习并产生最佳答案,并随着时间的推移逐渐提高准确性。如果模型可以更好地拟合训练集中的数据,则调整权重以减少真实与模型预测之间的差异。该算法将重复这个“评估和优化”过程,自主更新权重,直到达到准确度阈值。
2.7.3 机器学习有哪些不同类型?
机器学习很复杂,目前主要分为3个方法,监督学习、非监督学习、强化学习。实际中,大约 70% 的机器学习是有监督学习,而无监督学习占 10% 到 20%。其余部分由强化学习承担。
2.7.3.1.监督学习
在监督学习中,我们使用已知或标记的数据作为训练数据。由于数据是已知的,因此被称为监督学习。输入数据经过机器学习算法并用于训练最后产出模型。根据已知数据训练产出模型后,可以将未知数据用于模型并获得新的响应。
特点:
有标签
有反馈
预测分类或者数值等结果
举例,将苹果和梨子的图片分别标记为0和1,便有标签为0的苹果和标签为1的梨子,对这样的已知图片和标签进行训练,然后使用模型预测水果,模型算法会尝试确定图片是苹果还是梨子的百分比。
以下是目前用于监督学习的算法列表:
多项式回归
随机森林
线性回归
逻辑回归
决策树
K-最近邻
朴素贝叶斯
支持向量机(SVM)
在神经网络和深度学习中也会有监督学习的应用。智能轮式自主移动机器人也会用到监督学习。
接下来了解一下无监督学习。
2.7.3.2.无监督学习
无监督学习,也称为无监督机器学习,使用机器学习算法对未标记的数据集进行分析和聚类。在无监督学习中,训练数据是未知且未标记的——这意味着没有人看过这些数据。该数据被送到机器学习算法并用于训练模型。训练后的模型尝试搜索模式并给出所需的结果。这些算法无需人工干预即可发现隐藏的模式或数据分组或者存在的规律。
例如,在中国有一句俗语,“物以类聚,人以群分,三观不合,无需强融”,“道不同不相为谋”,将一群人放在一起,无监督学习算法会发现其中因三观造成的问题,从而将人自动分为坏人和好人。
这种方法发现信息相似性和差异性的能力使其成为探索性数据分析、模糊数据提取、销售策略、客户分类以及图像和模式识别的理想选择。
它还可以通过降维方法减少模型中的特征数量。主成分分析 (PCA) 和奇异值分解 (SVD) 是这方面的两种常用方法。另外,无监督学习中使用的其他算法包括神经网络、k 均值聚类和概率聚类方法。
特点:
无标签
无反馈
总结出潜在的规律
如上图2-7所示的例子中,|“鱼龙混杂”,未知图像由好坏的人组成。经过训练的模型试图将它们放在一起,但算法可能通过探索分析通过 三观后,得出不同的人群分类。
目前用于无监督学习的前 7 种算法是:
偏最小二乘
模糊的意思
奇异值分解
K-means 聚类
先验的
层次聚类
主成分分析
在神经网络和深度学习中也会有无监督学习的应用。
智能轮式自主移动机器人也会用到监督学习。
2.7.3.3.强化学习
强化机器学习是一种类似于监督学习的机器学习模型,但该算法不是使用样本数据进行训练的。该模型通过反复试验不断学习。通过奖惩机制,更多成功的结果让程序得到加强,针对给定问题制定最佳建议或政策。换句话说,与传统类型的数据分析一样,算法也是通过反复试验来发现数据,然后决定哪些行动会带来更高的回报奖励(reward)。
强化学习由三个主要组成部分组成:代理、环境和动作。代理是学习者或决策者,环境包括代理与之交互的所有内容,动作就是代理所做的。机器人就是代理。
当代理选择在给定时间内最大化预期奖励的动作时,就会发生强化学习。当代理在健全的策略框架内工作时,这是最容易实现的。
特点:
决策处理
奖惩机制
学习-行动产出
2.7.3.4小结
通过本节内容可知道,机器学习种类繁多,意味着需要有一定场景甄别能力。
机器学习的运用大大的考验我们的分析能力,因为只有对数据场景有着清晰的认识才能选择合适的机器学习方法。
三类学习各有优劣,也都能同时解决同类问题,这时需要从更多的角度考虑问题,比如成本、稳定、性能等方面。
笔者总结了一些机器人场景下的模型应用。
机器人防碰撞 强化学习、监督学习
机器人运行模式 识别 监督学习
机器人视觉分类 图像SVM等
机器人IMU 9轴陀螺仪 监督学习
2.7.4 如何决定使用哪种机器学习算法?
有数十种不同的算法可供选择,但没有哪种算法能够“一劳永逸”。在许多情况下,必须进行反复试验才能获得一个理想的结果。选择什么样的方法可以通过一些特点来缩小范围。
想获取什么样的结果,0或1还是具体数值或者其他?
使用的数据大小是多少,大批量或小批量?
使用什么类型的数据,维度、时间序列、图像矩阵?
希望从数据中获得什么样的特征,维度、时间序列、图像矩阵?
对数据认识足够清晰,这些“清晰的认识”将如何使用?
数据量太大,是否选择降维算法提取数据?
提示:原始数据包含大量信息——挑战在于识别重要的模式和变量。决策树、因子分析、缺失值比和随机森林等降维算法可以帮助您找到相关细节。
2.7.5 机器学习的最佳编程语言是什么?
目前根据受欢迎的程度来看,那么 Python最 “得意”了,这要归功于许多可用的库以及广泛的支持。Python 是数据分析和数据挖掘的理想选择,并支持许多算法(用于分类、聚类、回归和降维)和机器学习模型。
机器学习是一个奇妙的新科学分支,正在慢慢接管日常生活。从定向广告到癌细胞识别,机器学习无处不在。
例如当前流行的框架pytorch、tensorflow keras 都是基于python扩大根据地的。
当然,机器学习的开发语言还有c?c++,在机器人终端,除了python之外,c/c++绝对是更合适的语言,因为机器人对响应速度要求较高,而c?c++能做到这些。
2.7.6 机器学习步骤
在第2.7.1章节提到过步骤,本章节具体说明。它可以分为7个主要步骤:
2.7.6.1 收集数据
数据分为多维序列数据和图片数据、时间序列数据。
例如:
由3个震动传感器采集的数据组成3维的数据。
图片是二维矩阵数据。
声音属于时间序列数据。
收集可靠的数据至关重要,这样您的机器学习模型才能找到正确的工作模式。如果有不正确或过时的数据,将得到错误结果或预测。
例如质量好的数据是相关的,包含很少的缺失值和重复值,没有干扰性和随机性,并且可以很好地表示存在的标签类别。
数据的收集可以采用仿真环境的模式,这样可以收集干净的数据,有必要,需要根据实际环境收集数据。收集数据由于量大所以需要考虑其批量处理能力和自动话能力。
2.7.6.2 准备数据:
获得数据后首先对数据进行整理,如果是图片需要删除不清晰的图片。可以通过以下方式执行优化:
均一化。
随机化;将您拥有的所有数据放在一起并随机化。这有助于确保数据均匀分布,并且排序不会影响学习过程。
清理数据以删除不需要的数据、缺失值、行和列、重复值、数据类型转换等。
可视化数据可以方笔了解结构并了解各种变量和存在的类之间的关系。将清理后的数据分成两组——一个训练集和一个测试集。训练集是您的模型从中学习的集合。测试集用于在训练后检查模型的准确性。
例如某数据集的文件路劲为训练集(train)和验证集(val),通过via标注工具各生成一个区域标注的标签文件(后缀为json)。
lid@LAPTOP-85KPM8J9:/mnt/e/machineLearn/buildings_datasets$ tree -L 2
.
├── train
│ ├── 0000002_0003951_0000003_0000759.jpg
│ ├── 0004-0143409_p.jpg
│ ├── 0004-0143410_i.jpg
…
│ └── via_region_data.json
└── val
├── P2VBr3KZuYBOF1QA-DIRrQ.jpg
├── P3dr3y0NZpnQsTcjIW-x9U.jpg
├── P4we3TZeMBwNVD2Q8KyegQ.jpg
…
├── via_region_data.json
数据集存在的形式可以自定义,但最终需要通过程序读取,所以,为了更快的读取数据集,可以遵循常见的数据集结构,例如pasvoc,minisit等。
2.7.6.3 选择模型:
机器学习模型确定在收集的数据上运行机器学习算法后获得的输出。选择与手头任务相关的模型很重要。多年来,科学家和工程师开发了适用于语音识别、图像识别、预测、分类等不同任务的各种模型。
例如从分类还是预测的角度选择:
例如预测房价、预测速度、预测角度等具体数值时需要回归类的模型不需要分类的模型,对应的激活函数也会有不同的选择。
从数据的结构选择模型:
图像数据可以选择卷积网络、声音选择时间序列模型等。
2.7.6.4 训练模型:
训练是机器学习中最重要的一步。在训练中,您将准备好的数据传递给机器学习模型以查找模式并进行预测。它导致模型从数据中学习,以便它可以完成任务集。随着时间的推移,通过训练,模型在预测方面变得更好。
使用keras或者pytorch 现有的训练框架,能够省区很多编码训练模型的时间,另外训练时通过matlotlib可视化可以帮助分析训练的效果如何。
例如pytorc通过构建迭代、优化、反向传播构建训练器。
TrainSize,SensorNNData,SensorNNLabels = PreprocessData()
print ('Total Epoch %d,epoch TrainSize %d' %(NumEpochs,TrainSize))
loss_vals= []
for j in range(NumEpochs):#迭代器
losses = 0
for i in range(TrainSize):
input_values = Variable(SensorNNData[i])
labels = Variable(SensorNNLabels[i])
#print(input_values)
#print(labels)
# Forward + Backward + Optimize
optimizer.zero_grad()#每次训练需要清除梯度
outputs = net(input_values)#需要训练的网络
loss = criterion(outputs, labels)
loss.backward()#反向传播
optimizer.step()#优化器
losses += loss.item()#损失函数
2.7.6.5 评估模型:
训练模型后,您必须检查它的性能。
通过在以前看不见的数据上测试模型的性能来完成的。
这个时候测试集就起到作用了,环环相扣。
注意:不要用训练的相同数据进行测试, 无法获得准确的测量结果,因为模型已经使用了数据,并在其中找到了与以前相同的模式。
评估模型也可以通过多次训练设置不同的参数得到不同的结果来分析对比。
2.7.6.6 参数调优:
创建并评估模型后,看看是否可以通过任何方式提高其准确性。这是通过调整模型中存在的参数来完成的。参数是程序员通常决定的模型中的变量。在您的参数的特定值下,精度将是最大值。参数调整是指找到这些值。
2.7.6.7 做出预测
最后,您可以使用您的模型对看不见的数据进行准确的预测。