机器学习和人工智能作为当今炙手可热的技术,有必要对机器学习有关的内容进行了解和学习。作为人工智能入门选手,我将记录下我的学习历程,一来加深学习的印象,二来也进行一个分享。由于文章中大部分内容是我根据学习资料,以我自己的理解写出来的,还希望各位大佬指出我在文章中的不严谨或错误之处,共同学习进步。
机器学习算法
机器学习算法也是一种算法,和那些经典的基础算法没有本质上的区别,都是建立算法模型,对实际问题进行求解的方法,只不过更加先进,也可以解决更加复杂的问题。
针对实际问题进行不同建模,对应不同的机器学习算法可以分为以下几种:
- 数据分类
- 回归分析
- 聚类问题
- 时序问题
数据分类
分类问题试图将输入的数据归为某一类,在对数据集进行训练(见下)之后,利用分类算法可以将一个新输入的数据(实例)进行分类。最经典的就是鸢尾花数据集的分类。数据集中包含鸢尾花的花萼长度、花萼宽度、花瓣长度、花瓣宽度以及种属,分类算法的目的是根据前四种数据,得知实例种属的过程。如下:
{
花
萼
长
度
、
花
萼
宽
度
、
花
瓣
长
度
、
花
瓣
宽
度
}
→
种
属
\left \{ 花萼长度、花萼宽度、花瓣长度、花瓣宽度 \right\} \rightarrow 种属
{花萼长度、花萼宽度、花瓣长度、花瓣宽度}→种属
在训练时,算法根据数据集建立一个模型,使得这个模型能够较好的满足数据集中的对应关系,然后再输入一个数据集中没有的花萼、花瓣参数,希望这个模型可以返回所属种类。已知,分类算法只能返回训练数据集中存在的种属。
常见的数据分类算法(模型)有:决策树算法、神经网络、支持向量机(SVM)、朴素贝叶斯等。
回归分析
回归分析更倾向于建立一个数学对应关系,在对数据集上训练之后,希望输入任意一个数,算法能够返回一个符合原数据集数学关系的值。如,给定一个数据集,数据集中含有车辆的重量等一系列自变量,因变量为燃油效率。训练这样一个模型,使得在输入车辆重量等数据之后,可以直接返回燃油效率的数值。在部分问题中,数值经过一定处理可以转换为所属类别,因此,也可以进行分类实现。
常用的回归模型有:线性回归、逻辑回归等。
聚类问题
聚类问题与分类问题很像,但是有所区别。聚类问题并不关心类别的名称问题,旨在衡量实例之间的相似程度,因此可以不指定所属类别。
处在同一个聚类簇中的所有元素具有相似的特征。比如上面鸢尾花的数据集,可以不需要最后一个种属的数据,利用前四个数据进行聚类也可以获得所属聚类簇,然后在数据集中对应即可。
常用的聚类算法有:K-means算法、K-means++算法等。
时序问题
在实际问题中,有一些问题需要考虑时间,也就是时间是一个变量,在不同时间下,一个实例可能会有不同的状态。这个更加需要数学的基础(随机过程Stochastic Processes)。例如股票的预测,疫情的预测等等。
常用的算法有:ARMA、ARIMA、MCMC等
训练,学习
就像人一样,我们不是生下来就会做任何事情的,需要不断练习,直到符合我们的预期。训练,或者说是学习,就是对计算机算法这样一个过程。我们知道在一个算法中,可能会有一些为未知的参数,在机器学习算法中更是如此。这个过程需要通过一定算法让模型自己寻找合适的参数而非认为指定(因为数量可能太多了,指定的也不一定是最好的)。在训练完成之后,算法才能投入使用。一般情况下,训练过程和实际使用过程是分开的两个过程。
归一化
归一化这词好像比较难懂。归一化的目的是忽略由于数据量级不同导致的问题。
如果数据的一个或多个特征过大,以至于掩盖了其他的特征,这时候就要进行归一化,消除这个差距带来的影响。
监督学习和无监督学习
直接说区别:监督学习有标签(label),而无监督学习没有标签。
例如,上述的分类算法中,就需要分类结果的标签进行参照,才知道分类算法分的对不对,属于监督学习。相比之下,聚类算法没有用到标签,因此属于无监督学习。
NP难
这就是数据量过大导致组合数过多引起,无法使用暴力求解的问题。
编码
在训练的时候,需要对一些描述行的属性进行编码,转换为数值,这样方便训练。比如,性别,或者单词等。
One-Hot 编码
这就类似于答题卡的选择题,对于不同的实例,在每一个特征下建立一个二元值,表示当前属性又还是没有。这些属性一般是名义属性,举个例子:判断一个数字各位含有哪些数字。
实例 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
123 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
368 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 |
每一个属性下,1表示有,0表示没有(也可以用-1)
更复杂一点的;
实例 | I | am | and | boy | a |
---|---|---|---|---|---|
I am a boy | 1 | 1 | 0 | 1 | 1 |
模型的输入输出——向量
一般情况下,模型的输入输出都是以向量的形式存在的。有些输入可能几维,有些可能高达成千上万维,输出不一定和输入相同,这要看算法的实现。
虽说是向量,但是向量的各个维度之间并没有什么联系(视具体问题),一般情况下是可以交换的。但是也存在不能交换的时候,这要看具体问题,如果不能交换但是你贸然交换了,可能会引入偏差(bias)
纯概念性的内容还是需要多看看,理解概念的表示的含义,为后续的学习打下基础。