机器学习总结

算算时间,从开始到现在,做机器学习算法也将近八个月了。虽然还没有达到融会贯通的地步,但至少在熟悉了算法的流程后,我在算法的选择和创造能力上有了不小的提升。实话说,机器学习很难,非常难,要做到完全了解算法的流程、特点、实现方法,并在正确的数据面前选择正确的方法再进行优化得到最优效果,我觉得没有个八年十年的刻苦钻研是不可能的事情。其实整个人工智能范畴都属于科研难题,包括模式识别、机器学习、搜索、规划等问题,都是可以作为独立科目存在的。我不认为有谁可以把人工智能的各个方面都做到极致,但如果能掌握其中的任一方向,至少在目前的类人尖端领域,都是不小的成就。

这篇日志,作为我2014年的学业总结,详细阐述目前我对机器学习的理解,希望各位看官批评指正,多多交流!

机器学习(MachineLearning),在我看来就是让机器学习人思维的过程。机器学习的宗旨就是让机器学会“人识别事物的方法”,我们希望人从事物中了解到的东西和机器从事物中了解到的东西一样,这就是机器学习的过程。在机器学习中有一个很经典的问题:
“假设有一张色彩丰富的油画,画中画了一片茂密的森林,在森林远处的一棵歪脖树上,有一只猴子坐在树上吃东西。如果我们让一个人找出猴子的位置,正常情况下不到一秒钟就可以指出猴子,甚至有的人第一眼就能看到那只猴子。”
那么问题就来了,为什么人能在上千种颜色混合而成的图像中一下就能识别出猴子呢?在我们的生活中,各种事物随处可见,我们是如何识别出各种不同的内容呢?也许你可能想到了——经验。没错,就是经验。经验理论告诉我们认识的所有东西都是通过学习得到的。比如,提起猴子,我们脑海里立刻就会浮现出我们见过的各种猴子,只要画中的猴子的特征与我们意识中的猴子雷同,我们就可能会认定画中画的是猴子。极端情况下,当画中猴子的特征与我们所认识某一类猴子的特征完全相同,我们就会认定画中的猴子是哪一类。
       另一种情况是我们认错的时候。其实人识别事物的错误率有的时候也是很高的。比如,当我们遇见不认识的字的时候会潜意识的念字中我们认识的部分。比如,“如火如荼”这个词,是不是有朋友也跟我一样曾经念过“如火如茶(chá)”?我们之所以犯错,就是因为在我们没有见过这个字的前提下,我们会潜意识的使用经验来解释未知。
       目前科技如此发达,就有牛人考虑可不可以让机器模仿人的这种识别方法来达到机器识别的效果,机器学习也就应运而生了。
       从根本上说,识别,是一个分类的结果。看到四条腿的生物,我们可能会立即把该生物归为动物一类,因为我们常常见到的四条腿的、活的东西,九成以上是动物。这里,就牵扯出了概率的问题。我们对身边的事物往往识别率很高,是因为人的潜意识几乎记录了肉眼看到的事物的所有特征。比如,我们进入一个新的集体,刚开始大家都不认识,有的时候人和名字都对不上号,主要原因就是我们对事物的特征把握不够,还不能通过现有特征对身边的人进行分类。这个时候,我们常常会有这种意识:哎,你好像叫张三来着?哦,不对,你好像是李四。这就是分类中的概率问题,有可能是A结果,有可能是B结果,甚至是更多结果,主要原因就是我们的大脑收集的特征不够多,还无法进行准确分类。当大家都彼此熟悉了之后,一眼就能识别出谁是谁来,甚至极端情况下,只听声音不见人都能进行识别,这说明我们已经对该事物的特征把握相当精确。
       所以,我认为,人识别事物有四个基本步骤:学习、提取特征、识别、分类。
       那么机器可不可以模仿这个过程来实现识别呢?答案是肯定的,但是没有那么容易。难题有三:第一,人的大脑有无数神经元进行数据交换和处理,在目前的机器中还达不到同等的处理条件;第二,人对事物特征的提取是潜意识的,提取无意识情况下的信息,误差很大;第三,也是最重要的一点,人的经验来自于人每时每刻的生活中,也就是人无时无刻都处在学习中,如何让机器进行各个方面的自主学习?因此,目前在人工智能领域始终还没达到类人的水平,我认为主要原因就是机器没有潜意识。人的潜意识其实并不完全受人的意识支配,但却可以提高人类识别事物的概率。我们无法给机器加载潜意识,因为主动加载的意识就是主观意识,在机器里无法完成人类潜意识的功能。所以,以目前的发展情况来看,要达到完全类人,还有不短的时间。但即便如此,与人的思维差别很大的机器依然可以为我们的生活带来帮助。比如,我们常用的在线翻译、搜索系统、专家系统等,都是机器学习的产物。
       那么,如何实现机器学习呢?
       整体上看,机器学习就是模仿人识别事物的过程,即:学习、提取特征、识别、分类。由于机器不能跟人类思维一样根据事物特征自然而然的选择分类方法,所以机器学习方法的选择依然还需要人工选择。目前,机器学习的方法主要有三种:监督学习、半监督学习和无监督学习。监督学习是利用一组已知类别的样本调整分类器的参数,使其达到所要求性能的过程。白话一点,就是根据已知的,推断未知的。代表方法有:Nave Bayes、SVM、决策树、KNN、神经网络以及Logistic分析等;半监督方法主要考虑如何利用少量的标注样本和大量的未标注样本进行训练和分类的问题,也就是根据少量已知的和大量未知的内容进行分类。代表方法有:最大期望、生成模型和图算法等。无监督学习是利用一组已知类别的样本调整分类器的参数,使其达到所要求性能的过程。也就是及其自个儿学。代表方法有:Apriori、FP树、K-means以及目前比较火的Deep Learning。从这三方面看,无监督学习是最智能的,有能实现机器主动意识的潜质,但发展还比较缓慢;监督学习是不太靠谱的,从已知的推断未知的,就必须要把事物所有可能性全都学到,这在现实中是不可能的,人也做不到;半监督学习是“没办法中的办法”,既然无监督学习很难,监督学习不靠谱,就取个折中,各取所长。目前的发展是,监督学习技术已然成熟,无监督学习还在起步,所以对监督学习方法进行修改实现半监督学习是目前的主流。但这些方法基本只能提取信息,还不能进行有效的预测(人们就想,既然没法得到更多,就先看看手里有什么,于是数据挖掘出现了)。
       机器学习方法非常多,也很成熟。下面我挑几个说。
       首先是SVM。因为我做的文本处理比较多,所以比较熟悉SVM。SVM也叫支持向量机,其把数据映射到多维空间中以点的形式存在,然后找到能够分类的最优超平面,最后根据这个平面来分类。SVM能对训练集之外的数据做很好的预测、泛化错误率低、计算开销小、结果易解释,但其对参数调节和核函数的参数过于敏感。个人感觉SVM是二分类的最好的方法,但也仅限于二分类。如果要使用SVM进行多分类,也是在向量空间中实现多次二分类。
SVM有一个核心函数SMO,也就是序列最小最优化算法。SMO基本是最快的二次规划优化算法,其核心就是找到最优参数α,计算超平面后进行分类。SMO方法可以将大优化问题分解为多个小优化问题求解,大大简化求解过程。
SVM还有一个重要函数是核函数。核函数的主要作用是将数据从低位空间映射到高维空间。详细的内容我就不说了,因为内容实在太多了。总之,核函数可以很好的解决数据的非线性问题,而无需考虑映射过程。
       第二个是KNN。KNN将测试集的数据特征与训练集的数据进行特征比较,然后算法提取样本集中特征最近邻数据的分类标签,即KNN算法采用测量不同特征值之间的距离的方法进行分类。KNN的思路很简单,就是计算测试数据与类别中心的距离。KNN具有精度高、对异常值不敏感、无数据输入假定、简单有效的特点,但其缺点也很明显,计算复杂度太高。要分类一个数据,却要计算所有数据,这在大数据的环境下是很可怕的事情。而且,当类别存在范围重叠时,KNN分类的精度也不太高。所以,KNN比较适合小量数据且精度要求不高的数据。
KNN有两个影响分类结果较大的函数,一个是数据归一化,一个是距离计算。如果数据不进行归一化,当多个特征的值域差别很大的时候,最终结果就会受到较大影响;第二个是距离计算。这应该算是KNN的核心了。目前用的最多的距离计算公式是欧几里得距离,也就是我们常用的向量距离计算方法。
       个人感觉,KNN最大的作用是可以随时间序列计算,即样本不能一次性获取只能随着时间一个一个得到的时候,KNN能发挥它的价值。至于其他的特点,它能做的,很多方法都能做;其他能做的它却做不了。
       第三个就是Naive Bayes了。Naive Bayes简称NB(牛X),为啥它牛X呢,因为它是基于Bayes概率的一种分类方法。贝叶斯方法可以追溯到几百年前,具有深厚的概率学基础,可信度非常高。Naive Baye中文名叫朴素贝叶斯,为啥叫“朴素”呢?因为其基于一个给定假设:给定目标值时属性之间相互条件独立。比如我说“我喜欢你”,该假设就会假定“我”、“喜欢”、“你”三者之间毫无关联。仔细想想,这几乎是不可能的。马克思告诉我们:事物之间是有联系的。同一个事物的属性之间就更有联系了。所以,单纯的使用NB算法效率并不高,大都是对该方法进行了一定的改进,以便适应数据的需求。
NB算法在文本分类中用的非常多,因为文本类别主要取决于关键词,基于词频的文本分类正中NB的下怀。但由于前面提到的假设,该方法对中文的分类效果不好,因为中文顾左右而言他的情况太多,但对直来直去的老美的语言,效果良好。至于核心算法嘛,主要思想全在贝叶斯里面了,没啥可说的。
       第四个是回归。回归有很多,Logistic回归啊、岭回归啊什么的,根据不同的需求可以分出很多种。这里我主要说说Logistic回归。为啥呢?因为Logistic回归主要是用来分类的,而非预测。回归就是将一些数据点用一条直线对这些点进行拟合。而Logistic回归是指根据现有数据对分类边界线建立回归公式,以此进行分类。该方法计算代价不高,易于理解和实现,而且大部分时间用于训练,训练完成后分类很快;但它容易欠拟合,分类精度也不高。主要原因就是Logistic主要是线性拟合,但现实中很多事物都不满足线性的。即便有二次拟合、三次拟合等曲线拟合,也只能满足小部分数据,而无法适应绝大多数数据,所以回归方法本身就具有局限性。但为什么还要在这里提出来呢?因为回归方法虽然大多数都不合适,但一旦合适,效果就非常好。
Logistic回归其实是基于一种曲线的,“线”这种连续的表示方法有一个很大的问题,就是在表示跳变数据时会产生“阶跃”的现象,说白了就是很难表示数据的突然转折。所以用Logistic回归必须使用一个称为“海维塞德阶跃函数”的Sigmoid函数来表示跳变。通过Sigmoid就可以得到分类的结果。
       为了优化Logistic回归参数,需要使用一种“梯度上升法”的优化方法。该方法的核心是,只要沿着函数的梯度方向搜寻,就可以找到函数的最佳参数。但该方法在每次更新回归系数时都需要遍历整个数据集,对于大数据效果还不理想。所以还需要一个“随机梯度上升算法”对其进行改进。该方法一次仅用一个样本点来更新回归系数,所以效率要高得多。
       第五个是决策树。据我了解,决策树是最简单,也是曾经最常用的分类方法了。决策树基于树理论实现数据分类,个人感觉就是数据结构中的B+树。决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。决策树计算复杂度不高、输出结果易于理解、对中间值缺失不敏感、可以处理不相关特征数据。其比KNN好的是可以了解数据的内在含义。但其缺点是容易产生过度匹配的问题,且构建很耗时。决策树还有一个问题就是,如果不绘制树结构,分类细节很难明白。所以,生成决策树,然后再绘制决策树,最后再分类,才能更好的了解数据的分类过程。
       决策树的核心树的分裂。到底该选择什么来决定树的分叉是决策树构建的基础。最好的方法是利用信息熵实现。熵这个概念很头疼,很容易让人迷糊,简单来说就是信息的复杂程度。信息越多,熵越高。所以决策树的核心是通过计算信息熵划分数据集。
       我还得说一个比较特殊的分类方法:AdaBoost。AdaBoost是boosting算法的代表分类器。boosting基于元算法(集成算法)。即考虑其他方法的结果作为参考意见,也就是对其他算法进行组合的一种方式。说白了,就是在一个数据集上的随机数据使用一个分类训练多次,每次对分类正确的数据赋权值较小,同时增大分类错误的数据的权重,如此反复迭代,直到达到所需的要求。AdaBoost泛化错误率低、易编码、可以应用在大部分分类器上、无参数调整,但对离群点敏感。该方法其实并不是一个独立的方法,而是必须基于元方法进行效率提升。个人认为,所谓的“AdaBoost是最好的分类方法”这句话是错误的,应该是“AdaBoost是比较好的优化方法”才对。
       好了,说了这么多了,我有点晕了,还有一些方法过几天再写。总的来说,机器学习方法是利用现有数据作为经验让机器学习,以便指导以后再次碰到的决策。目前来说,对于大数据分类,还是要借助分布式处理技术和云技术才有可能完成,但一旦训练成功,分类的效率还是很可观的,这就好比人年龄越大看待问题越精准的道理是一样的。这八个月里,从最初的理解到一步步实现;从需求的逻辑推断到实现的方法选择,每天都是辛苦的,但每天也都是紧张刺激的。我每天都在想学了这个以后可以实现什么样的分类,其实想想都是让人兴奋的。当初,我逃避做程序员,主要原因就是我不喜欢做已经知道结果的事情,因为那样的工作没有什么期盼感;而现在,我可以利用数据分析得到我想象不到的事情,这不仅满足了我的好奇感,也让我能在工作中乐在其中。也许,我距离社会的技术需求还有很远的距离,但我对自己充满信心,因为,我不感到枯燥,不感到彷徨,虽然有些力不从心,但态度坚定。
2014的学习很艰难,我挺过来了;2015年,可能会更艰难,但我更加期待!
       最后,希望各位能人、牛人、同道中人给予点评,多多交流,一个人做算法是吃力的,希望各位踊跃评价,共同进步!

时间: 2024-09-30 19:12:07

机器学习总结的相关文章

机器学习—逻辑回归理论简介

下面是转载的内容,主要是介绍逻辑回归的理论知识,先总结一下自己看完的心得 简单来说线性回归就是直接将特征值和其对应的概率进行相乘得到一个结果,逻辑回归则是这样的结果上加上一个逻辑函数 这里选用的就是Sigmoid函数,在坐标尺度很大的情况下类似于阶跃函数 在确认特征对应的权重值也就是回归系数的时候 最常用的方法是最大似然法,EM参数估计,这个是在一阶导数能够有解的前提下 如果一阶导数无法求得解析值,那么一般选取梯度上升法,通过有限次的迭代过程,结合代价函数更新回归系数至收敛 //////////

【机器学习实战】Machine Learning in Action 代码 视频 项目案例

MachineLearning 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远 Machine Learning in Action (机器学习实战) | ApacheCN(apache中文网) 视频每周更新:如果你觉得有价值,请帮忙点 Star[后续组织学习活动:sklearn + tensorflow] ApacheCN - 学习机器学习群[629470233] 第一部分 分类 1.) 机器学习基础 2.) k-近邻算法 3.) 决策树 4.) 基于概率论的分类方法:朴素

机器学习 一 监督学习和无监督学习的区别

前话: 最近一直想学机器学习的东西,无奈自己的书太多但无法专心看一本,纯理论的东西看了感觉不记下来就忘记类,所以我想理论学习和实践一起. 所以最近想把机器学习实战这本书看完,并做好记录.加油.!~ 一:什么是监督学习? 监督学习(supervised learning):通过已有的训练样本(即已知数据以及其对应的输出)来训练,从而得到一个最优模型,再利用这个模型将所有新的数据样本映射为相应的输出结果,对输出结果进行简单的判断从而实现分类的目的,那么这个最优模型也就具有了对未知数据进行分类的能力.

R语言使用机器学习算法预测股票市场

quantmod 介绍 quantmod 是一个非常强大的金融分析报, 包含数据抓取,清洗,建模等等功能. 1. 获取数据 getSymbols 默认是数据源是yahoo 获取上交所股票为 getSymbols("600030.ss"), 深交所为 getSymbols("000002.sz").  ss表示上交所, sz表示深交所 2. 重命名函数 setSymbolLookup 3. 股息函数 getDividends 4. 除息调整函数 adjustOHLC

一次失败的却又成功的尝试机器学习经历

一遍看书一遍运行着书中提供的代码,我学习到K-NN分类算法.于是晚上找到一串数据进行尝试. 数据来自于网络1401班C语言教学平台里的数据 首先我对数据进行了简单的处理得到以下结果.这里的分类是对学生的期末考试分数(总评分)和省二级分数综合评定的 最后真正被使用的是txt格式的文件 然后使用了python读取TXT文件,用matplotlib库对数据画图 讲道理确实看不出来有什么规律,大概就是做题少的同学最后至少有一次考试不及格. 然后对数据的随堂测试.自由练习次数进行归一化处理,使用kNN模型

深度学习(deeplearing)(5月完成)共三部分 第一部分应用数学与机器学习(5.1-5.10)线性代数

第一章:线性代数: 学习一个新东西,首先要从概念开始,抓住其核心点 机器学习相关问题中,数据集多是以矩阵的形式存在,而模型的参数如W也是以矩阵或向量的形式存在,所以一个模型从数学的角度来说,就是矩阵间的运算,而运算中矩阵相乘的运算又是最常用的运算.本章后半部分讲解了在机器学习中会用到的一些矩阵运算的概念,如范数.行列式. 特征分解.奇异值分解等 一.基本单元:标量.向量.矩阵.张量 二.

TensorFlow【机器学习】:如何正确的掌握Google深度学习框架TensorFlow(第二代分布式机器学习系统)?

本文标签:   机器学习 TensorFlow Google深度学习框架 分布式机器学习 唐源 VGG REST   服务器 自 2015 年底开源到如今更快.更灵活.更方便的 1.0 版本正式发布,由 Google 推出的第二代分布式机器学习系统 TensorFlow一直在为我们带来惊喜,一方面是技术层面持续的迭代演进,从分布式版本.服务框架 TensorFlow Serving.上层封装 TF.Learn 到 Windows 支持.JIT 编译器 XLA.动态计算图框架 Fold 等,以及

机器学习进阶笔记之一 | TensorFlow安装与入门

原文链接:https://zhuanlan.zhihu.com/p/22410917 TensorFlow 是 Google 基于 DistBelief 进行研发的第二代人工智能学习系统,被广泛用于语音识别或图像识别等多项机器深度学习领域.其命名来源于本身的运行原理.Tensor(张量)意味着 N 维数组,Flow(流)意味着基于数据流图的计算,TensorFlow 代表着张量从图象的一端流动到另一端计算过程,是将复杂的数据结构传输至人工智能神经网中进行分析和处理的过程. -- 由 UCloud

机器学习中的算法(1)-决策树模型组合之随机森林与GBDT

版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系[email protected] 前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over-fitting,虽然有一些方法,如剪枝可以减少这种情况,但是还是不够的. 模型组合(比如

机器学习——概率图模型(CPD)

CPD是conditional probability distribution的缩写,翻译成中文叫做 条件概率分布.在概率图中,条件概率分布是一个非常重要的概念.因为概率图研究的是随机变量之间的练习,练习就是条件,条件就要求条件概率. 对于简单的条件概率而言,我们可以用一个条件概率表来表达.如图1所示.图1 中表达的是p(g|i,d).幸运的是id都只有两个取值,是一个伯努利分布的函数.但是如果i d 有六个取值呢?比如骰子.那么这张表就会猛然增加到6^2那么长.这是不科学的.并且,常规情况下