浅谈机器学习算法
关于机器学习的文章,在之前的学习过程中写过几篇,但现在看来实在有点误人子弟了.....(别喷我,毕竟我当时一个小白),现在回过来看,真的非常有必要纠正一下当年无知的自己,希望能够帮助到大家,也让自己对机器学习的了解更加深入
一、机器学习的定义
1.1什么是机器学习
“机器学习”这概念看起来高大上(哇让机器都能自己去学习了),貌似很复杂的样子,可要知道他是怎么回事,我们就得先回到我们传统上的计算机是如何运行的。
其实也很简单,传统上如果我们想让计算机工作,就要先给它设置一串指令,就相当于是建立了一个黑匣子,黑匣子里面要做什么运算都是我事先定义好,接下来我输入什么,这个黑匣子就会输出一个结果。最简单我就定义为“y=2x+3”,那么我输入x为“2”,输出y当然是“3”,我输入x为“4”,输出y当然就是“11”咯(到此为止没毛病)
机器学习,则刚好是反其道而行之。它可以说基于以下的假设推论:
·我们的客观世界事物之间是存在着某种规律(可能简单,也可能复杂)
·这个规律,是可以通过数学的模型去表达(或者我们尝试通过数学模型去表达)
·如果想要寻找到这个模型,当然首先要收集到关于它在现实世界的信息(即数据)
·收集到足够的数据后,我们使用什么方法才能画出这个模型,怎样画(拟合)得更逼真,怎么画得更快(这也就是机器学习的核心问题之一:算法)
·画出这个模型之后,我得检验它是不是真的有效果,那就得用现实的数据去检验(模型到底好不好用,也即检验一个模型的核心标准:泛化能力)
举个栗子,就明白为什么是反其道而行之了:
假如我现在要卖我家的房子(好吧其实并没有),我先假定它只跟面积相关,而且他们可能是某种线性关系。那我当然要收集足够的证据去证明我的假设,所以我找扁了小区的邻居,收集到了他们房子的面积“x”和他们目前的估计“y”
当我把这些数据在平面坐标系中标注之后,惊人地发现:他们的分布密集集中在一个直线。然后我通过计算估计除了这个直线的参数:y=5000x+6000。以上你所做得,就是最机器学习最为核心的思想,只不过要把这个过程交给机器去做
当然,现实世界房子不可能只跟面积相关,跟所在城市、地段、学区房、楼龄、楼层等N多个因素相关,那么这个“模型”就不可能是简单的“线性模型”了,这就是“机器学习”要解决的问题,面对更为复杂的参数和模型,如何才能快速地找到最为“合理”(或者称为接近现实)的模型,也是机器学习要解决的核心问题。或者干脆说机器学习是把现实问题转换成一个数学模型求解的问题
1.2机器学习定义
所以我个人对机器学习理解的定义:机器学习是通过收集现实数据,去尝试拟合一个基于数据的模型,并通过这个模型去实现预测、分类等功能
这也就回答了最开始我提出的,为什么机器学习可以说刚好和“计算机编程”反其道而行之的观点。计算机编程是我们事先告诉好计算机“模型”是什么,然而输入不同的数据得到不同的结果。
机器学习则刚好是我们去收集现实世界对应的“输入”和“结果”数据,然后让计算机找到符合这个数据所描述的模型
、
二、学习方式
机器学习的方式分为两类,一类为监督学习,一类为无监督学习
2.1监督学习
所谓监督学习,即计算机学习的数据集中的每个样本都是有“正确答案”(即结果)。在上个预测房价的机器学习模型里,它的数据集中的“房价”已经是被人为打上标签的“答案”
2.2无监督学习
在无监督学习中,则刚好与“监督学习”相反,它的数据是没有经过任何人为处理的。换句话说,我们不知道这个这个数据所代表的现实特征是什么,我们面对这些数据,什么都不知道。但我们仍然想通过这些数据,去尝试挖掘这个数据内在有没有某种结构或关系。
其中“聚类”就是无监督学习中的一个典型算法,它能够把数据分成不同的“簇”,不同簇对应着不同的数据集合,所以这个算法叫“聚类”.(后面要详细提到)
三、机器学习算法
在这里特别想做个说明,就是算法之于模型的关系(大神请自动飘过)。模型是我们基于现实数据对应的数学描述,而机器学习中的算法是找到这个模型的一种实现方法。当然实现方法取决于“描述模型的目的”和“数据特点”。
比如面对没有任何标签的数据,但我们想把这些数据进行分类,就会选用“聚类”;面对有“标签”的数据,你想找出一个“分类模型”,就可以选择“逻辑回归”的算法等等
3.1监督学习
(1)回归
回归是机器学习最为经典和基础的算法,同时也最为容易理解。比如刚才说的“预测房价”的例子,就是通过回归去实现拟合模型。回归可以理解为,通过数据去尝试推测出一系列连续值的属性。
回归分为线性回归和逻辑回归,虽然都叫“回归”,但它们的应用可是大有不同
·线性回归
线性回归即我们要拟合的模型是“线性”的,比如我们刚才假设的“房价线性模型”。至于求解的方法,既然是线性模型。我们就可以通过“最小二乘法”的思想去进行求解,把求解现实模型问题转换为一个数学上的函数求最小值问题。
线性回归模型但求解的方法则不再是简单求导的方式(大量的数据和特征维度导致计算量太大),而可以采用“梯度下降法”去处理。
·逻辑回归
逻辑回归虽然和线性回归都属于“回归”算法,但他的本质和处理的问题则和线性回归不同。逻辑回归多用于处理“分类问题”,而分类问题则要求输出必然是“离散值”。
它的实现方式是在线性回归的基础上,对其结果通过Sigmoid函数进行一次映射,把线性回归输出的结果(区间在负无穷到正无穷),映射到(0,1)之间,那么大于0.5可以代表一个“结果”,在(0,0.5)之间的可以代表一个值,这样就实现了分类的效果。
顺便一提,逻辑回归拟合的模型也多是处理线性模型的,它并不是适合处理大数据的非线性模型。当然,下面就要提到他的“威力加强版”SVM支持向量机算法
(2)SVM支持向量机
SVM支持向量机可以很好地解决逻辑回归无法解决的“线性不可分”问题。对于在二维平面的一堆“线性不可分”数据,可以通过“升维”的方式找到三维空间的超平面去解决。本质上,在二维空间“线性不可分”的那对数据,映射到三维空间就可以完美通过一个“空间平面”去分割。
二维空间映射至三维空间但“升维”会造成计算难度增加(现实处理的数据,往往不是三维空间可以解决的),甚至会造成“维数灾难”
SVM支持向量机通过应用核函数的展开定理,巧妙地避开了这个问题,既可以在高维映射空间建立学习机,同时又不增加计算的复杂度
(3)神经网络
神经网络是通过模拟“生物脑神经”建立的一种网络结构,网络分为“输入层”,“隐含层”和“输出层”,输入层负责接收原始数据,隐含层负责处理数据(简单理解为特征提取),输出层负责输出结果。整个神经网络可以简单理解为一个“黑盒”,对于训练好的神经网络而言,你输入一个数据,它会根据已经训练好的“神经网络模型”给予对应的输出
神经网络的训练过程是输入原始数据,在隐含层进行特征提取,在输出层得到一个“拟合结果”,然后通过误差反向传播,去倒过来一层一层修正“神经元”的权值和偏重,让下一次迭代的结果越来越接近“现实结果”
神经网络目前大热的“深度学习”,就是从神经网络发展而来的。当然所谓“深度”的含义不仅仅是“网络层数”的增多,深度学习中不同的网络结构和原理不同,也用于解决不同的问题。比如特征提取和泛化能力极强适用于图像识别的卷积神经网络(CNN)和适用于处理“前后文本关系”的卷积神经网络(RNN)
3.2非监督学习
(1)聚类
聚类属于无监督学习,像之前处理的数据都是经过“人为标签”的标定,我们知道这些数据对于一个模型来说应该输出的结果是什么。而无监督学习则不然,我们拿到是仅仅是一堆数据,至于数据代表什么,有什么特征我们则完全不知道。
但这时候我们又想知道这些数据之间是不是存在着某种内在结构,就可以用到聚类算法。
聚类核心思想:通过对数据进行特征提取,转换为空间中的向量,通过计算每个“向量”的距离,从远近的角度去判定是否为同一个“簇”(类别)。其本质就是把现实世界中的特征,转化为数学的空间向量,这样我们就把现实的特征问题,转化成了一个可能通过数学方式解决的“向量计算问题”。
聚类的典型应用比如说facebook中的新闻或短文本类型分类,再比如假设你想把“客户”进行分类,你拿到了一堆客户的数据,那么就可以通过聚类的算法,找到这对“客户”数据的内在结构,从而实现“客户分类”
(2)降维
降低维度的主要作用是把数据从“高维度”降低至“低维度”。比如我有的一个数据有200个特征,但我发现其中的100个实际上我并不需要,那么我就可以通过“降维算法”来减少数据的特征维度(注意这里的维度指的是数据中的“特征量”,比如一个房子数据的特征可能有“面积、房间数量、低端、学区房”,房子的数据具有4个特征维度)
降维(3维-2维)第二个作用就是“可视化”,我们可以把任何数据都降低至2维空间的平面。当然带来的副作用也很明显,算法只负责减少数据的特征维度,至于减少后在“可视化平面”上展示的数据的特征,就必须由我们自己去寻找了。
降维的主要算法为主成分分析(PCA),这里就先不多说了吧。
3.3推荐算法
推荐算法貌似在机器学习的学术领域不那么受重视,但他在商业可是占据了非常重要的地位,在电商领域如亚马逊、天猫和京东都得到了广泛的应用(毕竟希望每个人都买买买啊)
推荐算法主要有两类:基于内容的推荐系统和用户相似度推荐
基于内容的推荐系统:基于“用户消费行为”和“物品标签”构建模型,根据用户的消费或浏览记录,给他们推荐关联程度最高的物品。比如你近期想买毛衣,你在天猫上浏览了几个,并没有直接找到想要的毛衣,但算法可以根据你的浏览记录,推荐给你在这个品类下最热Or最新,或者跟你停留时间最长的物品类似的物品,来满足你的购买欲望.....
基于用户相似度推荐,即找到“志同道合”的一类用户集合,假设在这个集合里有A和B,A最近购买了物品“1”,那么这个“1”就会推荐给B同志
机器学习的概念和经典算法就科普到这里,后续会针对典型的机器学习算法和深度学习神经网络做更为深入的探讨哦~