机器学习是一门作预测的方法论和工具。预测,为什么?机器学习和人的学习一样,从经验中学习,在历史发生的数据中抽取出数据中存在的模式,因此机器学习是更接地气的,和学科结合密切的,不同的数据分布适合于不同的算法。所以,机器学习的算法不存在绝对的谁好谁坏,我们只能得到在当前数据集上比较好的算法,比较好的是什么意思?就是泛化能力相对较好的算法,即,用算法去预测未知数据的能力。当然这也是没办法直接去预测的,我如果知道了哪个算法泛化能力好,不是就说明我有预知能力嘛?事实上,我们是将经验数据分成了两部分,一部分用来训练学习算法,也就是用来发现数据的规律,另一部分是用来检验学习效果的。好,既然我们可以用来检验效果,那么这部分数据就一定是有答案的,我们用预测的结果和实际的结果比较,判断哪个算法学习到的知识准确,也就是测试误差小。用测试误差来近似泛化能力。好,那么分割训练集、测试集也是个麻烦事。本来我们用来学习的样本就不多,你还要拿一部分出来,那我在整个数据上学习的效果肯定和在子集上学习的效果有差距,如何尽量去避免这种问题呢。当前分割的方法主要有三种,第一:留一法,把数据分为两个子集,且没有交集,当然要保证采样的时候尽量不破坏数据本身的分布。什么意思呢,假如我要学习的模型是分类妹子和汉子(1表示妹子,0表示汉子)数据集的标记y有70个样本是1,30个是0。我们采样时候,把前70个都放到训练集去了,那肯定会出事呀,给的数据都是妹子的描述,学习器就认为所有的人都是妹子,在测试集一跑,哎呦妈呀,都预测错了,还不如随机猜测呢,起码有一半的正确率。那这个学习器出什么问题了,首先是样本没选好,在训练集中要差不多选70*0.7=49个妹子,21个汉子的样本,这样才能学到两者的内在模式,其次,学习器过拟合了,也就是说学习太好了,把训练集带的偏差也学到了,而这些偏差在其他样本中是没有的。那么这样的学习器泛化能力也不好。那学习器就郁闷了,你又要我学习的好,又要我不能学的太好,把随机噪声也学到。这又是一个折中,真的不好衡量。那我们咋解决呢,我们就看学习器在测试集上的表现。我们期望的是这样的学习器:在训练数据上误差很小,在测试集上误差也要接近训练误差,不能相差太远。闲话稍后在扯,继续数据集分割的讨论。第二种分割方法,k-折交叉验证,首先把样本几乎均匀的分成k份,编号依次是1,2,3...k我们依次的拿出一份做测试集,其余的k-1份数据做训练集,训练k个学习器,然后从里面选一个最好的,这种方法的优点是效果比上面说的留出法好,缺点嘛,训练了这么多学习器,成本也是蛮高的。所以,no free lunch,出来混,总是要还的,这就像算法里永恒的主题:空间和时间的协调。具体的折中策略,要根据场景去考虑,具体问题具体分析。第三种,booststraping。这种采样也是挺有趣的,有放回的采样,可是可是,统计里面的有放回是样本很多的情况,我们取很少几个。在机器学习里面,我们有m个样本,但是要采样的个数也是m,那这就会存在一些样本反复被抽中,一些样本从来没有被抽中,那这样的方法靠谱嘛?我的心也微微一颤,我们先来统计分析下,一共采样了m个,每个样本在每次采样中被抽中的概率都是1/m,那么没抽中的机会就是1-1/m,如果在m次采样都没被选中,概率是(1-1/m)^m,当m接近无穷大,上面的值大约是33.3%,大概1/3,还是挺多的哦,如果只做一次学习,如果样本比较多,不建议用这种方法。这种方法将在随机森林算法里大放异彩,这个概率也是很有用的,先立个flag。
然后机器学习和人学习一样嘛。机器学习算法有一大类问题是监督学习,也就是给的数据是带学习结果的,那好嘛,我先学,然后去和答案比较,差距太大,我就继续去学习呗。我学呀学,靠,不知道过了多久,我觉得学的效果挺好了,和答案相差不多了。那我总得评估我的效果吧,打个分吧。可是要怎么打分,头疼,这还不是得我们人来考虑。打分得前提首先得定个标准吧,就是得给个学习的具体目标吧,我一点点去靠近她,先放弃全局最优解,然后才能去接近最优。好,我们想,监督学习有两种,分类和回归。分类今天先不表。今天简单说下回归。回归就是给了一堆的特征,然后让你去预测一个数值,那么我们的优化目标可sigma|y-f(x)|嘛,去最小化这个,在高中就学过,如果一个大于目标a,一个小于目标a,两个就抵消了,但是,他们都是误差有偏差的,所以这个不靠谱,那么我们就平方吧,这个好,这个准则也确实挺管用,还有个专业名(mse),事实上,这个准则可以通过假定误差(y-f(x))服从高斯分布得到,而我们知道,高斯分布假设是合理的。于是我们的第一个模型,线性回归就呼之欲出了,线性是说特征的参数theta是线性的,不存在交叉项,特征之间是可以交叉的,在优化函数里加上l1范式,就得到了LASSO回归,l1范式可以保持特征的稀疏性,因此可以用于特征的选择,在优化目标里加上l2范数,就得到了Ridge回归,如果是l1,l2的组合,就叫做弹性网。好,继续,如果我们假定误差之间不是均等的,也就是考虑不同的误差给不同的权重,就得到了局部加权回归,权重可以采用rbf,又是高斯核。再次膜拜大神。如果是另一种假设,预测值和实际的差别在€之间,我们认为不存在误差,也就是只有在这两条隔离带之外的才计入损伤。那么,我们就得到了svr支持向量回归。哇,一下好多算法,蒙了。我们来整理下。
总结:回归有以下几种算法,基本的线性回归、lasso、ridge、弹性网、局部加权回归、svr,局部加权可以用先验知识。这六种算法。
网友评论