1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 物联网技术部培训——机器学习历史及简单算法理论

物联网技术部培训——机器学习历史及简单算法理论

时间:2022-11-20 06:20:30

相关推荐

物联网技术部培训——机器学习历史及简单算法理论

本次培训着重机器学习的入门及兴趣培养,希望能够为选择方向困难的同学提供帮助

一. 机器学习背景介绍

三个概念

常见的三个概念:人工智能,机器学习和深度学习是存在着包含关系的,即人工智能包含机器学习,机器学习包含深度学习。

人工智能是一个大的,宽泛的概念,统指计算机自主地去做人类能做的事情,拥有一定的学习能力和智慧能力。

人工智能不仅有深度学习这一个算法,还存在例如模拟退火,遗传算法,禁忌搜索,等等算法

深度学习是机器学习的一个分支,随着计算机计算能力的不断增强,这个学习方向的热度也变得越来越高

神经网络是深度学习非常重要的概念。可以说,深度学习就是实现神经网络的过程。

神经网络的坎坷发展史

从计算机的雏形被设计出来开始,人们就从来没停止过对于神经网路的探索。最开始神经网络的灵感来自于一个实验:实验员切断青蛙耳朵与听觉神经的连接,在切断眼睛与视觉神经的连接,之后实验员将眼睛与听觉神经连接在一起。一段之间后,青蛙恢复了视觉:即,青蛙用听觉神经学会了“看”。

这给我们启发:大脑并不是有很多个“编写好的”程序来供人的各个功能运行;它有一个固定的算法,只需要传输进数据,大脑就会自适应的,自动的对数据进行处理。

1943年,数学家们就已经提出神经网络的计算模型。但是由于神经网络的实现思想过于理想而实际算法并不成熟,同时受限于当时的硬件基础,类似神经网络的大型计算完全无法正常的运行。神经网络只是作为一个理论,甚至无法成为学科。于是,神经网络刚刚提出,就进入了第一次寒冬。

20世纪80年代神经网络迎来了短暂的春天。随着深层神经网络和反向传播算法的提出,使得神经网络的实现更加完善。但同时期,支持向量机为代表的传统算法进一步发展,这使得人们的研究重心再一次偏向传统机器学习算法。

但随着时代的发展,从到现在,计算机运算能力不断地提升,云计算,大数据处理的不断完善,使得机器学习再一次迎来了春天。当下,以神经网络为基础的项目越来越多,发展十分迅速。

尽管神经网络只是机器学习的一个分支,但是我们能够从神经网络的发展看到世界各地的科学家为了人工智能这个一个神奇的领域的不懈努力

二. 机器学习的实现

机器学习的蓬勃发展得益于各个公司的研究和其对机器学习方法的开源。市面上现在有很多可用的机器学习工具,诸如百度的paddle paddle,Google的tensorflow,pytorch等等。机器学习常用的语言为R语言和python等,当然python是当下进行机器学习实现的最好语言之一。

机器学习主要解决两种问题:回归和分类

回归问题,如其名,我们需要回归一个结果。在实际的回归问题中,我们常常会有一个训练集来训练“参数”,在经过训练之后就可以利用这些已有参数进行计算。

回归问题的本质可以理解为得到一个方程。也就是说,机器学习的本质不是进行计算得到结果,而是对计算机进行训练,让他永远拥有计算某种问题的能力。

分类问题就是通过训练,使得计算机可以将新的输入进行判断并分到某个已经规定的类别,或者将一系列输入进行自分类

其中,规定了已有类别进行插入判断的,叫监督分类。仅给出一系列输入,由计算机自行判断并进行分类的,为无监督分类

三. 机器学习算法——梯度下降法实现房价预测问题

问题导入

请你解决这样一个问题:

哲哲学长打算在A市买房,但是他并不清楚这边的房价。于是他叫来了房地产大亨弛弛学长询问。弛弛学长日理万机,没有空闲时间给他介绍这里的行情。但是他利用自己多年来总结而来的购房数据列了一张表格,发给了哲哲学长。现在,如果哲哲学长想要买一个100平米的房子,他需要准备多少钱呢?

问题很简单,只需要进行三步即可

通过已知数据进行计算,得到单价

列出方程:y = k * x,把已有单价赋值给k

进行计算

那么下一步,如果我们买房子的价格不是只有面积这一种评判标准呢?

这样的问题似乎也不难解决,我们不难看出,在市中心的房子比不在市中心的房子要贵20w。因此我们只需要在我们的计算式中加上用来判断“是否在市中心”的变量即可。

于是,我们[通过已知]计算k1 = 10000 , k2 = 200000。现在,我们只需要带入

x1 = 100 , x2 = 0 即可(x2用1表示在市中心,0表示不在)

问题进一步深化:如果我们判断一个房子价格的条件进一步增加呢?

因为没有任何参数(k)已知,我们只能够通过控制变量法的方式计算k。然而受数据过于大量或者根本找不到能够利用控制变量法的两组数据,使得我们人工手动推进问题变得特别困难。

一组两组变量可以通过人脑来进行,但如此之多的变量,根本没有办法或通过手算的方式进行拟合太过于麻烦,因此我们必须借助计算机算法来实现

算法解决

首先第一步,列出目标方程。我们的目标就是找到并填入所有正确的θ的值。

可是我们应该怎样算出θ的值呢?

计算机也不知道,但是计算机和人不同,他拥有海量计算的能力。所以我们的办法就是:随机赋值。在实际的使用中,一般我们会把所有θ设置为0。图中这里为只考虑一个变量对结果有影响的情况。

根据第一个表格,我们知道如果x = 50, 那么y应该等于500000。比较一下我们的标准结果:J = 0-500000 = -500000

我们用J这个变量来记录我们的预测值和真实值之间的区别。但因为考虑到,3和5分别减四的结果为一个-1一个+1,但实际上距离是相同的;而我们解决实际问题时不会考虑结果是偏大还是偏小,只会考虑到到标准值的距离,所以实际上我们用这个表达式来表示偏差值:(h(x)代表预测值)

这个也将是我们实际进行θ优化的函数。

考虑到更改θ是优化过程,也就是说此时x和y都应当是已知量。只有包含在h(x)中的θ是自变量,因此J是关于θ的函数。

因为J表示的是偏差值,因此我们希望J的值越小越好。即,我们要找到使得J最小的θ。找到θ的方法就是不停的优化和逼近最优解。如何去理解呢?

我们可以这样想象:你站在山上,想要以最快的速度下山。

那么你应该做的事情就是环顾四周,然后找到最陡峭的方向前进一小步。这个描述有没有让大家有一种似曾相识的感觉?

那相信大家刚刚学完高数,肯定都对梯度还有印象。

梯度是什么呢?梯度就是函数在一个点的导数。也就是使得函数下降的频率最快的方向。虽然我们随机的为θ设置了初始值,但如果我们知道如何使得θ朝着能够让J下降的方向前进,就一定能找到最合适的一组θ。

我们对J(θ)进行求导,得到:

代值,得到:J(θ)在(θ=0)这一点上的导数为:2.5*10^7

找到了方向,我们就应该尝试朝着这个方向“走一小步”:而这一小步就体现在Θ的改变。我们列出一下式子:

这里的α为“步长”,就是走一步的“距离”。我们先不要在意这个值,只需要了解在当下这个问题中,他被设定为0.0001即可。通过朝着最陡峭的方向(梯度方向)走出一小步(由α确定),θ从原来的位置变化到之后的位置。

我们将值带入看到,θ经过这一次变动,值变为了2500。这已经离我们的目标前进了一步。

紧接着,我们再一次对θ进行同样的操作。

得到θ = 4375。

于是我们直接利用python写出程序,

执行十次之后,来看看结果:

我们不难发现,最后的结果:9436已经离我们的预期(10000)很接近了。我们的算法确实在优化我们的结果。

执行1000次之后,结果已经非常非常接近我们的预期。

回顾一下我们都做了哪些事?

首先写出了房价的计算公式: y = θ * x

将θ随机的赋了一个初值,并期待能够通过一定的方式改变它

为了方便表示,我们定义了一个J(θ)函数,并对其进行了改进。从此以后,这个函数用于表达我们的计算结果和实际结果的区别

最后,我们通过梯度下降算法获得了更新θ的方式,并着手对其进行了更新。

房价问题的延申:真正的机器学习!

1. 数据集——训练集和测试集

实际的问题不可能只有如上的简单情况。面对大量的数据,我们应当如何处理呢?

由众多数据和结果组成的集合,我们称之为数据集。在实际处理问题的过程中,我们会将数据集分割为两个部分,一部分用来迭代并优化我们的参数,而另一部分用来检测我们的结果是否已经真正的达到了我们的预期。用来优化参数的数据集为训练集,而用来检测的为测试集。在进行实际的问题时,我们一般会把数据集7:3的分开,分别规定为训练集于测试集进行操作。

2.基于大量数据的迭代

在刚刚的实例中,我们的数据集仅有一个内容:[[50, 500000]]。于是我们基于这个数据进行了参数的优化。那么如何对大量的数据进行迭代呢?

如上是我们处理问题常见的数据集形势。数据集共有n个数据,每个数据包含m+1个内容,前m个是x的特征数,m+1是每个数据的结果(根据情况不同,y可能不止一个)

同样,我们开始改变我们的预测函数,代价函数即最后的迭代项

经过修改之后的算法为:

3.学习率

下面我们来正式介绍一下学习率的概念。学习率是“走一步”的步长。我们来想象一下在山上的情景:当我们找到一个方向之后,就应该朝着那个方向走出一步。如果这一步太小,有可能我们需要走太多次,耽误效率;如果我们一步走的太大,就有可能出现一些更加有趣的情况:

这是我们在刚刚问题中设置α为0.0001时候的结果。如果我们把α设置的太小,很可能出现同样次数迭代后还没能抵达最优解的情况:

如果我们把学习率设置的合适,那么它能够在最少的迭代后接近最优解(当然,学习率是没有绝对最优解的。最好的学习率可能在某一个范围内)

如果学习率太大了,就很可能出现一些意想不到的情况:

把α设置的太大,导致第一步就跨过最优解,直接到了函数的另一侧。这样,θ就永远只能在两点来回徘徊;

如果α比0.0008还大,那他就将离最优解越走越远。

关于α的设置,没有十分系统的规定,一般根据经验来判断。常见的学习率如0.003, 0.03, 0.001等,需要根据问题的情况不同进行分析。但是可以通过少量的迭代来判断:如果在当前学习率下执行10次左右,J(θ)确实在变小,那么说明这个学习率至少是可用的。

KNN算法

概述:

1、思想极度简单

2、应用数学知识少(近乎为零)

3、效果好(缺点?)

4、可以解释机器学习算法使用过程中的很多细节问题

5、更完整地刻画机器学习应用的流程

中文翻译为k近邻算法,k-Nearest Neighbors简称

不仅仅学习算法原理,更要学习在不同的使用场景中需要注意什么

近邻算法

所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。

假如新来一个点,如何判定是良性肿瘤还是恶性肿瘤呢?

先假如K取3,大家可以先理解这个3就是机器学习学习者根据经验取的一个数

kNN算法本质就是如果两个样本足够相似,它们就更大可能属于同一个类别,但仅仅看一个样本是不可靠的,在这里我们看3个离它最近的样本

解决的问题就是例会上所说的分类问题,当然也可以解决回归问题,这个问题后面再讨论

判别方法

将新来的数据点和每一个其它数据点的欧拉距离算出来,选取距离最近的K个点,K个点中出现频率最高的label,即可视为新来数据点的label

判别机器学习算法的性能

训练得到的模型直接在真实环境中使用

问题:

模型很差怎么办? 真实损失

真实环境难以拿到真实label

用全部训练数据来预测一个模型

假如预测的模型很差怎么办?

比如预测一个股票的涨幅,预测完之后只能直接投入使用,如果模型很差,就会造成真实损失

真实环境难以拿到真实的label,比如银行发放信用卡,需要跟随客户几年,训练一个模型,如果来了一个新客户,依然需要几年时间,难以及时改善模型

训练与测试数据集的分离—train_test_split

分类准确度—accuracy

accuracy = 测试数据预测结果正确的个数 / 测试数据总数

分类准确度的问题

一个癌症预测系统,输入体检信息,可以判断是否有癌症

预测准确度:99.9%

好 or 坏

对于极度偏斜的数据

只是用分类准确度是远远不够的

如果癌症产生的概率只有0.1%

我的的系统预测所有人都是健康,既可以达到99.9%的准确度

混淆矩阵

对于二分类的问题

行代表真实值,列代表预测值

0 – negative

1 – positive

精准率和召回率

精准率:precision = TP / (TP + FP)

召回率:recall = TP / (TP + FN)

F1 score

有时更注重精准率 股票预测?

有时更注重召回率 病人诊断?

二者都兼顾: F1 score

调和平均值

超参数和模型参数

超参数:在算法运行前需要决定的参数

模型参数:算法过程中学习的参数

kNN算法没有模型参数

kNN算法中的k是典型的超参数

寻找好的超参数

领域知识

经验数值

实验搜索

距离的权重

普通的k近邻算法:蓝色获胜

真的准确吗?

虽然这三个点都是距离新来的点最近的三个点,但是忽略了三个点距离新来的点的距离。红色的点相对于蓝色的点更近,是不是可以考虑红色的点更加重要呢

另一个好处

假如k=3, 分类种类也有三种,会出现平票的情况

更多关于距离的定义

闵可夫斯基距离

获得了又一个超参数p

网格搜索(穷举搜索)

在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。其原理就像是在数组里找最大值。

弊端:耗时可能非常大,待优化的超参数越多,候选值越多,耗费的时间越长,一般情况下,先估计一个范围,再进行细化

数据归一化 Feature Scaling

样本间的距离被发现时间所主导

样本间的距离被肿瘤大小所主导

解决方案:将所有的数据映射到同一尺度

最值归一化:把所有数据映射到0-1之间

适用于分布有明显边界的情况;比如学生成绩最高分和最低分,图像像素的范围

受outlier影响较大,比如平均月收入情况

均值方差归一化:把所有数据归一到均值为0、方差为1的分布中

对测试数据集如何归一化?

测试数据是模拟真实环境

测试数据的均值和方差没有代表性,无法代表真实环境的均值和方差。

对数据的归一化也是算法的一部分

更多有关k近邻算法的思考

优点:

1、天然可以解决多分类问题

2、思想简单、效果强大

缺点:

1:效率低下

如果训练集有m个样本,n个特征,则预测每一个新的数据,需要O(m*n)

2:高度数据相关

3:预测结果不具有可解释性

4:维数灾难

随着维数的增加,“看似相近”的两个点之间的距离越来越大

机器学习流程回顾

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。