精华内容
下载资源
问答
  • 这篇文档总结了常见机器学习的基本算法,希望能对大家有用!
  • 一篇吴恩达精彩的机器学习常见算法分类汇总大全,总结的很好。推荐给大家。
  • 机器学习的算法很多。很多时候困惑人们的是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的。这里,我们从两个方面来给大家介绍,第一个方面是学习的方式,第二个方面是算法的类似性。
  • 机器学习常见算法分类.doc
  • 算法类似性 回归算法: 基于实例的算法 正则化方法 决策树学习 贝叶斯方法 基于核的算法 聚类算法 关联规则学习 人工神经网络 深度学习 降低维度算法 集成算法: 决策树 一、 决策树优点 二、决策...

    目录

    学习方式

    监督式学习:

    非监督式学习:

    半监督式学习:

    强化学习:

    算法类似性

     

    回归算法:

    基于实例的算法

    正则化方法

    决策树学习

    贝叶斯方法

    基于核的算法

    聚类算法

    关联规则学习

    人工神经网络

    深度学习

    降低维度算法

    集成算法:

    决策树

    一、  决策树优点

    二、决策树缺点

    三、改进措施

    三、应用领域

    KNN算法

    一、KNN算法的优点

    二、KNN算法的缺点

    三、KNN算法应用领域

    支持向量机(SVM)

    一、  SVM优点

    二、SVM缺点

    三、SVM应用领域

    AdaBoost算法

    一、  AdaBoost算法优点

    二、Adaboost算法缺点

    三、AdaBoost应用领域

    朴素贝叶斯算法

    一、  朴素贝叶斯算法优点

    二、朴素贝叶斯缺点

    三、朴素贝叶斯应用领域

    Logistic回归算法

    一、logistic回归优点

    二、logistic回归缺点

    三、logistic回归应用领域

    人工神经网络

    一、  神经网络优点

    二、神经网络缺点

    三、人工神经网络应用领域


     机器学习无疑是当前数据分析领域的一个热点内容。很多人在平时的工作中都或多或少会用到机器学习的算法。本文为您总结一下常见的机器学习算法,以供您在工作和学习中参考。

           机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的。这里,我们从两个方面来给大家介绍,第一个方面是学习的方式,第二个方面是算法的类似性。


    学习方式

    根据数据类型的不同,对一个问题的建模有不同的方式。在机器学习或者人工智能领域,人们首先会考虑算法的学习方式。在机器学习领域,有几种主要的学习方式。将算法按照学习方式分类是一个不错的想法,这样可以让人们在建模和算法选择的时候考虑能根据输入数据来选择最合适的算法来获得最好的结果。

    监督式学习:

     

    1479572800-6899-evMLVhLXNyCVuzslOH6trnicCxIA

    在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,如对防垃圾邮件系统中“垃圾邮件”“非垃圾邮件”,对手写数字识别中的“1“,”2“,”3“,”4“等。在建立预测模型的时候,监督式学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率。监督式学习的常见应用场景如分类问题和回归问题。常见算法有逻辑回归(Logistic Regression)和反向传递神经网络(Back Propagation Neural Network)。

    非监督式学习:

    1479572801-7126-ekuYvKanIu4oBcJLm4yvfbDYos0g

    在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习以及聚类等。常见算法包括Apriori算法以及k-Means算法。

    半监督式学习:

    1479572801-6242-FrMf8f7298cBr0DPW5flDlDMicIw

    在此学习方式下,输入数据部分被标识,部分没有被标识,这种学习模型可以用来进行预测,但是模型首先需要学习数据的内在结构以便合理的组织数据来进行预测。应用场景包括分类和回归,算法包括一些对常用监督式学习算法的延伸,这些算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。如图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM.)等。

     

    强化学习:

    1479572801-3762-Y2Xia0H1SegEtIt80ZphH1rueoxg

    在这种学习模式下,输入数据作为对模型的反馈,不像监督模型那样,输入数据仅仅是作为一个检查模型对错的方式,在强化学习下,输入数据直接反馈到模型,模型必须对此立刻作出调整。常见的应用场景包括动态系统以及机器人控制等。常见算法包括Q-Learning以及时间差学习(Temporal difference learning)

     

    在企业数据应用的场景下, 人们最常用的可能就是监督式学习和非监督式学习的模型。 在图像识别等领域,由于存在大量的非标识的数据和少量的可标识数据, 目前半监督式学习是一个很热的话题。 而强化学习更多的应用在机器人控制及其他需要进行系统控制的领域。

     

    算法类似性

    根据算法的功能和形式的类似性,我们可以把算法分类,比如说基于树的算法,基于神经网络的算法等等。当然,机器学习的范围非常庞大,有些算法很难明确归类到某一类。而对于有些分类来说,同一分类的算法可以针对不同类型的问题。这里,我们尽量把常用的算法按照最容易理解的方式进行分类。

    回归算法:

    1479572801-1279-psQzicMbvjWArXBU2JNAOPBODxPA

    回归算法是试图采用对误差的衡量来探索变量之间的关系的一类算法。回归算法是统计机器学习的利器。在机器学习领域,人们说起回归,有时候是指一类问题,有时候是指一类算法,这一点常常会使初学者有所困惑。常见的回归算法包括:最小二乘法(Ordinary Least Square),逻辑回归(Logistic Regression),逐步式回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing)。

    基于实例的算法

    1479572801-1131-ac78ib7ynEpxJzhsOGARzvdvicKA

    基于实例的算法常常用来对决策问题建立模型,这样的模型常常先选取一批样本数据,然后根据某些近似性把新数据与样本数据进行比较。通过这种方式来寻找最佳的匹配。因此,基于实例的算法常常也被称为“赢家通吃”学习或者“基于记忆的学习”。常见的算法包括 k-Nearest Neighbor(KNN), 学习矢量量化(Learning Vector Quantization, LVQ),以及自组织映射算法(Self-Organizing Map , SOM)

    正则化方法

    1479572801-7007-cm573ULFNhgoEA8EJujubjLDb2qA

    正则化方法是其他算法(通常是回归算法)的延伸,根据算法的复杂度对算法进行调整。正则化方法通常对简单模型予以奖励而对复杂算法予以惩罚。常见的算法包括:Ridge Regression, Least Absolute Shrinkage and Selection Operator(LASSO),以及弹性网络(Elastic Net)。

     

    决策树学习

    1479572801-4358-PiaYUw7zqu3954RyeBwhTHkHWk6Q

    决策树算法根据数据的属性采用树状结构建立决策模型, 决策树模型常常用来解决分类和回归问题。常见的算法包括:分类及回归树(Classification And Regression Tree, CART), ID3 (Iterative Dichotomiser 3), C4.5, Chi-squared Automatic Interaction Detection(CHAID), Decision Stump, 随机森林(Random Forest), 多元自适应回归样条(MARS)以及梯度推进机(Gradient Boosting Machine, GBM)

     

    贝叶斯方法

    1479572802-1427-c3vzbPgNXvHoaaNyzGPlN8PBGZFw

    贝叶斯方法算法是基于贝叶斯定理的一类算法,主要用来解决分类和回归问题。常见算法包括:朴素贝叶斯算法,平均单依赖估计(Averaged One-Dependence Estimators, AODE),以及Bayesian Belief Network(BBN)。

    基于核的算法

    1479572802-7140-pibItcdx0RaA35mJGsoZKgBpPmzA

    基于核的算法中最著名的莫过于支持向量机(SVM)了。 基于核的算法把输入数据映射到一个高阶的向量空间, 在这些高阶向量空间里, 有些分类或者回归问题能够更容易的解决。 常见的基于核的算法包括:支持向量机(Support Vector Machine, SVM), 径向基函数(Radial Basis Function ,RBF), 以及线性判别分析(Linear Discriminate Analysis ,LDA)等

    聚类算法

    1479572802-3592-ibHWZ7EllSXgcrDJB9wKJVwbaQ2Q

    聚类,就像回归一样,有时候人们描述的是一类问题,有时候描述的是一类算法。聚类算法通常按照中心点或者分层的方式对输入数据进行归并。所以的聚类算法都试图找到数据的内在结构,以便按照最大的共同点将数据进行归类。常见的聚类算法包括 k-Means算法以及期望最大化算法(Expectation Maximization, EM)。

    关联规则学习

    1479572802-6857-9tm3bibPFEcJ9w2KBxLV7mRn1exQ

    关联规则学习通过寻找最能够解释数据变量之间关系的规则,来找出大量多元数据集中有用的关联规则。常见算法包括 Apriori算法和Eclat算法等。

     

    人工神经网络

    1479572803-5509-3CeY57PHXriauFqH1dVnOmP3P4RA

     

    人工神经网络算法模拟生物神经网络,是一类模式匹配算法。通常用于解决分类和回归问题。人工神经网络是机器学习的一个庞大的分支,有几百种不同的算法。(其中深度学习就是其中的一类算法,我们会单独讨论),重要的人工神经网络算法包括:感知器神经网络(Perceptron Neural Network), 反向传递(Back Propagation), Hopfield网络,自组织映射(Self-Organizing Map, SOM)。学习矢量量化(Learning Vector Quantization, LVQ)

     

    深度学习

    1479572802-5101-zwjPk6sicl7s6PDnQWfsibJZ4SDQ

    深度学习算法是对人工神经网络的发展。 在近期赢得了很多关注, 特别是百度也开始发力深度学习后, 更是在国内引起了很多关注。 在计算能力变得日益廉价的今天,深度学习试图建立大得多也复杂得多的神经网络。很多深度学习的算法是半监督式学习算法,用来处理存在少量未标识数据的大数据集。常见的深度学习算法包括:受限波尔兹曼机(Restricted Boltzmann Machine, RBN), Deep Belief Networks(DBN),卷积网络(Convolutional Network), 堆栈式自动编码器(Stacked Auto-encoders)。

     

    降低维度算法

    1479572803-3312-5jc4UiaQCF66HAQia3icnwxyYK2A

    像聚类算法一样,降低维度算法试图分析数据的内在结构,不过降低维度算法是以非监督学习的方式试图利用较少的信息来归纳或者解释数据。这类算法可以用于高维数据的可视化或者用来简化数据以便监督式学习使用。常见的算法包括:主成份分析(Principle Component Analysis, PCA),偏最小二乘回归(Partial Least Square Regression,PLS), Sammon映射,多维尺度(Multi-Dimensional Scaling, MDS), 投影追踪(Projection Pursuit)等。

     

    集成算法:

    1479572803-6688-tf1SIoQxZaasKHftspLAvvpDWANQ

    集成算法用一些相对较弱的学习模型独立地就同样的样本进行训练,然后把结果整合起来进行整体预测。集成算法的主要难点在于究竟集成哪些独立的较弱的学习模型以及如何把学习结果整合起来。这是一类非常强大的算法,同时也非常流行。常见的算法包括:Boosting, Bootstrapped Aggregation(Bagging), AdaBoost,堆叠泛化(Stacked Generalization, Blending),梯度推进机(Gradient Boosting Machine, GBM),随机森林(Random Forest)。


    决策树

    一、  决策树优点

    1、决策树易于理解和解释,可以可视化分析,容易提取出规则。

    2、可以同时处理标称型和数值型数据。

    3、测试数据集时,运行速度比较快。

    4、决策树可以很好的扩展到大型数据库中,同时它的大小独立于数据库大小。

    二、决策树缺点

    1、对缺失数据处理比较困难。

    2、容易出现过拟合问题。

    3、忽略数据集中属性的相互关联。

    4、ID3算法计算信息增益时结果偏向数值比较多的特征。

    三、改进措施

    1、对决策树进行剪枝。可以采用交叉验证法和加入正则化的方法。

    2、使用基于决策树的combination算法,如bagging算法,randomforest算法,可以解决过拟合的问题

    三、应用领域

    企业管理实践,企业投资决策,由于决策树很好的分析能力,在决策过程应用较多。

     

    KNN算法

    一、KNN算法的优点

     

    1、KNN是一种在线技术,新数据可以直接加入数据集而不必进行重新训练

    2、KNN理论简单,容易实现

    二、KNN算法的缺点

    1、对于样本容量大的数据集计算量比较大。

    2、样本不平衡时,预测偏差比较大。如:某一类的样本比较少,而其它类样本比较多。

    3、KNN每一次分类都会重新进行一次全局运算。

    4、k值大小的选择。

    三、KNN算法应用领域

    文本分类、模式识别、聚类分析,多分类领域

    支持向量机(SVM)

    一、  SVM优点

    1、解决小样本下机器学习问题。

    2、解决非线性问题。

    3、无局部极小值问题。(相对于神经网络等算法)

    4、可以很好的处理高维数据集。

    5、泛化能力比较强。

    二、SVM缺点

    1、对于核函数的高维映射解释力不强,尤其是径向基函数。

    2、对缺失数据敏感。

    三、SVM应用领域

    文本分类、图像识别、主要二分类领域

    AdaBoost算法

    一、  AdaBoost算法优点

    1、很好的利用了弱分类器进行级联。

    2、可以将不同的分类算法作为弱分类器。

    3、AdaBoost具有很高的精度。

    4、相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每个分类器的权重。

    二、Adaboost算法缺点

    1、AdaBoost迭代次数也就是弱分类器数目不太好设定,可以使用交叉验证来进行确定。

    2、数据不平衡导致分类精度下降。

    3、训练比较耗时,每次重新选择当前分类器最好切分点。

    三、AdaBoost应用领域

    模式识别、计算机视觉领域,用于二分类和多分类场景

    朴素贝叶斯算法

    一、  朴素贝叶斯算法优点

    1、对大数量训练和查询时具有较高的速度。即使使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是特征概率的数学运算而已。

    2、支持增量式运算。即可以实时的对新增的样本进行训练。

    3、朴素贝叶斯对结果解释容易理解。

    二、朴素贝叶斯缺点

    1、由于使用了样本属性独立性的假设,所以如果样本属性有关联时其效果不好。

    三、朴素贝叶斯应用领域

    文本分类、欺诈检测中使用较多

    Logistic回归算法

    一、logistic回归优点

    1、计算代价不高,易于理解和实现

    二、logistic回归缺点

    1、容易产生欠拟合。

    2、分类精度不高。

    三、logistic回归应用领域

    用于二分类领域,可以得出概率值,适用于根据分类概率排名的领域,如搜索排名等。

    Logistic回归的扩展softmax可以应用于多分类领域,如手写字识别等。

    人工神经网络

    一、  神经网络优点

    1、分类准确度高,学习能力极强。

    2、对噪声数据鲁棒性和容错性较强。

    3、有联想能力,能逼近任意非线性关系。

    二、神经网络缺点

    1、神经网络参数较多,权值和阈值。

    2、黑盒过程,不能观察中间结果。

    3、学习过程比较长,有可能陷入局部极小值。

    三、人工神经网络应用领域

    目前深度神经网络已经应用与计算机视觉,自然语言处理,语音识别等领域并取得很好的效果。

    原文:http://suanfazu.com/t/qian-tan-wo-dui-ji-qi-xue-xi-de-dian-li-jie/305

    机器学习方法非常多,也很成熟。下面我挑几个说。

    1. 首先是SVM。因为我做的文本处理比较多,所以比较熟悉SVM。SVM也叫支持向量机,其把数据映射到多维空间中以点的形式存在,然后找到能够分类的最优超平面,最后根据这个平面来分类。SVM能对训练集之外的数据做很好的预测、泛化错误率低、计算开销小、结果易解释,但其对参数调节和核函数的参数过于敏感。个人感觉SVM是二分类的最好的方法,但也仅限于二分类。如果要使用SVM进行多分类,也是在向量空间中实现多次二分类。
      SVM有一个核心函数SMO,也就是序列最小最优化算法。SMO基本是最快的二次规划优化算法,其核心就是找到最优参数α,计算超平面后进行分类。SMO方法可以将大优化问题分解为多个小优化问题求解,大大简化求解过程。某些条件下,把原始的约束问题通过拉格朗日函数转化为无约束问题,如果原始问题求解棘手,在满足KKT的条件下用求解对偶问题来代替求解原始问题,使得问题求解更加容易。 SVM还有一个重要函数是核函数。核函数的主要作用是将数据从低位空间映射到高维空间。详细的内容我就不说了,因为内容实在太多了。总之,核函数可以很好的解决数据的非线性问题,而无需考虑映射过程。

    2. 第二个是KNN。KNN将测试集的数据特征与训练集的数据进行特征比较,然后算法提取样本集中特征最近邻数据的分类标签,即KNN算法采用测量不同特征值之间的距离的方法进行分类。KNN的思路很简单,就是计算测试数据与类别中心的距离。KNN具有精度高、对异常值不敏感、无数据输入假定、简单有效的特点,但其缺点也很明显,计算复杂度太高。要分类一个数据,却要计算所有数据,这在大数据的环境下是很可怕的事情。而且,当类别存在范围重叠时,KNN分类的精度也不太高。所以,KNN比较适合小量数据且精度要求不高的数据。
      KNN有两个影响分类结果较大的函数,一个是数据归一化,一个是距离计算。如果数据不进行归一化,当多个特征的值域差别很大的时候,最终结果就会受到较大影响;第二个是距离计算。这应该算是KNN的核心了。目前用的最多的距离计算公式是欧几里得距离,也就是我们常用的向量距离计算方法。
      个人感觉,KNN最大的作用是可以随时间序列计算,即样本不能一次性获取只能随着时间一个一个得到的时候,KNN能发挥它的价值。至于其他的特点,它能做的,很多方法都能做;其他能做的它却做不了。

    3. 第三个就是Naive Bayes了。Naive Bayes简称NB(牛X),为啥它牛X呢,因为它是基于Bayes概率的一种分类方法。贝叶斯方法可以追溯到几百年前,具有深厚的概率学基础,可信度非常高。Naive Baye中文名叫朴素贝叶斯,为啥叫“朴素”呢?因为其基于一个给定假设:给定目标值时属性之间相互条件独立。比如我说“我喜欢你”,该假设就会假定“我”、“喜欢”、“你”三者之间毫无关联。仔细想想,这几乎是不可能的。马克思告诉我们:事物之间是有联系的。同一个事物的属性之间就更有联系了。所以,单纯的使用NB算法效率并不高,大都是对该方法进行了一定的改进,以便适应数据的需求。
      NB算法在文本分类中用的非常多,因为文本类别主要取决于关键词,基于词频的文本分类正中NB的下怀。但由于前面提到的假设,该方法对中文的分类效果不好,因为中文顾左右而言他的情况太多,但对直来直去的老美的语言,效果良好。至于核心算法嘛,主要思想全在贝叶斯里面了,没啥可说的。

    4. 第四个是回归。回归有很多,Logistic回归啊、岭回归啊什么的,根据不同的需求可以分出很多种。这里我主要说说Logistic回归。为啥呢?因为Logistic回归主要是用来分类的,而非预测。回归就是将一些数据点用一条直线对这些点进行拟合。而Logistic回归是指根据现有数据对分类边界线建立回归公式,以此进行分类。该方法计算代价不高,易于理解和实现,而且大部分时间用于训练,训练完成后分类很快;但它容易欠拟合,分类精度也不高。主要原因就是Logistic主要是线性拟合,但现实中很多事物都不满足线性的。即便有二次拟合、三次拟合等曲线拟合,也只能满足小部分数据,而无法适应绝大多数数据,所以回归方法本身就具有局限性。但为什么还要在这里提出来呢?因为回归方法虽然大多数都不合适,但一旦合适,效果就非常好。
      Logistic回归其实是基于一种曲线的,“线”这种连续的表示方法有一个很大的问题,就是在表示跳变数据时会产生“阶跃”的现象,说白了就是很难表示数据的突然转折。所以用Logistic回归必须使用一个称为“海维塞德阶跃函数”的Sigmoid函数来表示跳变。通过Sigmoid就可以得到分类的结果。
      为了优化Logistic回归参数,需要使用一种“梯度上升法”的优化方法。该方法的核心是,只要沿着函数的梯度方向搜寻,就可以找到函数的最佳参数。但该方法在每次更新回归系数时都需要遍历整个数据集,对于大数据效果还不理想。所以还需要一个“随机梯度上升算法”对其进行改进。该方法一次仅用一个样本点来更新回归系数,所以效率要高得多。

    5. 第五个是决策树。据我了解,决策树是最简单,也是曾经最常用的分类方法了。决策树基于树理论实现数据分类,个人感觉就是数据结构中的B+树。决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。决策树计算复杂度不高、输出结果易于理解、对中间值缺失不敏感、可以处理不相关特征数据。其比KNN好的是可以了解数据的内在含义。但其缺点是容易产生过度匹配的问题,且构建很耗时。决策树还有一个问题就是,如果不绘制树结构,分类细节很难明白。所以,生成决策树,然后再绘制决策树,最后再分类,才能更好的了解数据的分类过程。
      决策树的核心树的分裂。到底该选择什么来决定树的分叉是决策树构建的基础。最好的方法是利用信息熵实现。熵这个概念很头疼,很容易让人迷糊,简单来说就是信息的复杂程度。信息越多,熵越高。所以决策树的核心是通过计算信息熵划分数据集。

    6. 我还得说一个比较特殊的分类方法:AdaBoost。AdaBoost是boosting算法的代表分类器。boosting基于元算法(集成算法)。即考虑其他方法的结果作为参考意见,也就是对其他算法进行组合的一种方式。说白了,就是在一个数据集上的随机数据使用一个分类训练多次,每次对分类正确的数据赋权值较小,同时增大分类错误的数据的权重,如此反复迭代,直到达到所需的要求。AdaBoost泛化错误率低、易编码、可以应用在大部分分类器上、无参数调整,但对离群点敏感。该方法其实并不是一个独立的方法,而是必须基于元方法进行效率提升。个人认为,所谓的“AdaBoost是最好的分类方法”这句话是错误的,应该是“AdaBoost是比较好的优化方法”才对。

    好了,说了这么多了,我有点晕了,还有一些方法过几天再写。总的来说,机器学习方法是利用现有数据作为经验让机器学习,以便指导以后再次碰到的决策。目前来说,对于大数据分类,还是要借助分布式处理技术和云技术才有可能完成,但一旦训练成功,分类的效率还是很可观的,这就好比人年龄越大看待问题越精准的道理是一样的。这八个月里,从最初的理解到一步步实现;从需求的逻辑推断到实现的方法选择,每天都是辛苦的,但每天也都是紧张刺激的。我每天都在想学了这个以后可以实现什么样的分类,其实想想都是让人兴奋的。当初,我逃避做程序员,主要原因就是我不喜欢做已经知道结果的事情,因为那样的工作没有什么期盼感;而现在,我可以利用数据分析得到我想象不到的事情,这不仅满足了我的好奇感,也让我能在工作中乐在其中。也许,我距离社会的技术需求还有很远的距离,但我对自己充满信心,因为,我不感到枯燥,不感到彷徨,虽然有些力不从心,但态度坚定。

    ===================================================

    http://blog.csdn.NET/vola9527/article/details/43347747

    简述机器学习十大算法的每个算法的核心思想、工作原理、适用情况及优缺点等。

    1)C4.5算法:

    ID3算法是以信息论为基础,以信息熵和信息增益度为衡量标准,从而实现对数据的归纳分类。ID3算法计算每个属性的信息增益,并选取具有最高增益的属性作为给定的测试属性。

    C4.5算法核心思想是ID3算法,是ID3算法的改进,改进方面有:

    1)用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;

    2)在树构造过程中进行剪枝

    3)能处理非离散的数据

    4)能处理不完整的数据

     C4.5算法优点:产生的分类规则易于理解,准确率较高。

    缺点:

    1)在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。

    2)C4.5只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。

     

    2)K means 算法:

    是一个简单的聚类算法,把n的对象根据他们的属性分为k个分割,k< n。 算法的核心就是要优化失真函数J,使其收敛到局部最小值但不是全局最小值。

    其中N为样本数,K是簇数,rnk b表示n属于第k个簇,uk 是第k个中心点的值。然后求出最优的uk

     

    优点:算法速度很快

    缺点是,分组的数目k是一个输入参数,不合适的k可能返回较差的结果。

     

    3)朴素贝叶斯算法:

    朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。算法的基础是概率问题,分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。朴素贝叶斯假设是约束性很强的假设,假设特征条件独立,但朴素贝叶斯算法简单,快速,具有较小的出错率。

    在朴素贝叶斯的应用中,主要研究了电子邮件过滤以及文本分类研究。

     

    4)K最近邻分类算法(KNN)

    分类思想比较简单,从训练样本中找出K个与其最相近的样本,然后看这k个样本中哪个类别的样本多,则待判定的值(或说抽样)就属于这个类别。

    缺点:

    1)K值需要预先设定,而不能自适应

    2)当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。

    该算法适用于对样本容量比较大的类域进行自动分类。

     

    5)EM最大期望算法

    EM算法是基于模型的聚类方法,是在概率模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量。E步估计隐含变量,M步估计其他参数,交替将极值推向最大。

    EM算法比K-means算法计算复杂,收敛也较慢,不适于大规模数据集和高维数据,但比K-means算法计算结果稳定、准确。EM经常用在机器学习和计算机视觉的数据集聚(Data Clustering)领域。

     

    6)PageRank算法

    是google的页面排序算法,是基于从许多优质的网页链接过来的网页,必定还是优质网页的回归关系,来判定所有网页的重要性。(也就是说,一个人有着越多牛X朋友的人,他是牛X的概率就越大。)

    优点:

    完全独立于查询,只依赖于网页链接结构,可以离线计算。

    缺点:

    1)PageRank算法忽略了网页搜索的时效性。

    2)旧网页排序很高,存在时间长,积累了大量的in-links,拥有最新资讯的新网页排名却很低,因为它们几乎没有in-links。

     

    7)AdaBoost

    Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。

    整个过程如下所示:
    1. 先通过对N个训练样本的学习得到第一个弱分类器;
    2. 将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器;
    3. 将和都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器;
    4. 如此反复,最终得到经过提升的强分类器。

    目前AdaBoost算法广泛的应用于人脸检测、目标识别等领域。

     

    8)Apriori算法

    Apriori算法是一种挖掘关联规则的算法,用于挖掘其内含的、未知的却又实际存在的数据关系,其核心是基于两阶段频集思想的递推算法 。

    Apriori算法分为两个阶段:

    1)寻找频繁项集

    2)由频繁项集找关联规则

    算法缺点:

    1) 在每一步产生侯选项目集时循环产生的组合过多,没有排除不应该参与组合的元素;

    2) 每次计算项集的支持度时,都对数据库中    的全部记录进行了一遍扫描比较,需要很大的I/O负载。

     

    9)SVM支持向量机

    支持向量机是一种基于分类边界的方法。其基本原理是(以二维数据为例):如果训练数据分布在二维平面上的点,它们按照其分类聚集在不同的区域。基于分类边界的分类算法的目标是,通过训练,找到这些分类之间的边界(直线的――称为线性划分,曲线的――称为非线性划分)。对于多维数据(如N维),可以将它们视为N维空间中的点,而分类边界就是N维空间中的面,称为超面(超面比N维空间少一维)。线性分类器使用超平面类型的边界,非线性分类器使用超曲面。

    支持向量机的原理是将低维空间的点映射到高维空间,使它们成为线性可分,再使用线性划分的原理来判断分类边界。在高维空间中是一种线性划分,而在原有的数据空间中,是一种非线性划分。

    SVM在解决小样本、非线性及高维模式识别问题中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。

     

    10)CART分类与回归树

    是一种决策树分类方法,采用基于最小距离的基尼指数估计函数,用来决定由该子数

    据集生成的决策树的拓展形。如果目标变量是标称的,称为分类树;如果目标变量是连续的,称为回归树。分类树是使用树结构算法将数据分成离散类的方法。

    优点

    1)非常灵活,可以允许有部分错分成本,还可指定先验概率分布,可使用自动的成本复杂性剪枝来得到归纳性更强的树。

    2)在面对诸如存在缺失值、变量数多等问题时CART 显得非常稳健。

    展开全文
  • 机器学习常见算法分类,算法优缺点汇总

    万次阅读 多人点赞 2017-04-14 12:08:13
    本文为您总结一下常见的机器学习算法,以供您在工作和学习中参考。  机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的。这里,我们从两个方面来给大家...
           机器学习无疑是当前数据分析领域的一个热点内容。很多人在平时的工作中都或多或少会用到机器学习的算法。本文为您总结一下常见的机器学习算法,以供您在工作和学习中参考。

           机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的。这里,我们从两个方面来给大家介绍,第一个方面是学习的方式,第二个方面是算法的类似性。

    学习方式

    根据数据类型的不同,对一个问题的建模有不同的方式。在机器学习或者人工智能领域,人们首先会考虑算法的学习方式。在机器学习领域,有几种主要的学习方式。将算法按照学习方式分类是一个不错的想法,这样可以让人们在建模和算法选择的时候考虑能根据输入数据来选择最合适的算法来获得最好的结果。

    监督式学习:

     

    1479572800-6899-evMLVhLXNyCVuzslOH6trnicCxIA

    在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,如对防垃圾邮件系统中“垃圾邮件”“非垃圾邮件”,对手写数字识别中的“1“,”2“,”3“,”4“等。在建立预测模型的时候,监督式学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率。监督式学习的常见应用场景如分类问题和回归问题。常见算法有逻辑回归(Logistic Regression)和反向传递神经网络(Back Propagation Neural Network)。

    非监督式学习:

    1479572801-7126-ekuYvKanIu4oBcJLm4yvfbDYos0g

    在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习以及聚类等。常见算法包括Apriori算法以及k-Means算法。

    半监督式学习:

    1479572801-6242-FrMf8f7298cBr0DPW5flDlDMicIw

    在此学习方式下,输入数据部分被标识,部分没有被标识,这种学习模型可以用来进行预测,但是模型首先需要学习数据的内在结构以便合理的组织数据来进行预测。应用场景包括分类和回归,算法包括一些对常用监督式学习算法的延伸,这些算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。如图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM.)等。

     

    强化学习:

    1479572801-3762-Y2Xia0H1SegEtIt80ZphH1rueoxg

    在这种学习模式下,输入数据作为对模型的反馈,不像监督模型那样,输入数据仅仅是作为一个检查模型对错的方式,在强化学习下,输入数据直接反馈到模型,模型必须对此立刻作出调整。常见的应用场景包括动态系统以及机器人控制等。常见算法包括Q-Learning以及时间差学习(Temporal difference learning)

     

    在企业数据应用的场景下, 人们最常用的可能就是监督式学习和非监督式学习的模型。 在图像识别等领域,由于存在大量的非标识的数据和少量的可标识数据, 目前半监督式学习是一个很热的话题。 而强化学习更多的应用在机器人控制及其他需要进行系统控制的领域。

     

    算法类似性

    根据算法的功能和形式的类似性,我们可以把算法分类,比如说基于树的算法,基于神经网络的算法等等。当然,机器学习的范围非常庞大,有些算法很难明确归类到某一类。而对于有些分类来说,同一分类的算法可以针对不同类型的问题。这里,我们尽量把常用的算法按照最容易理解的方式进行分类。

    回归算法:

    1479572801-1279-psQzicMbvjWArXBU2JNAOPBODxPA

    回归算法是试图采用对误差的衡量来探索变量之间的关系的一类算法。回归算法是统计机器学习的利器。在机器学习领域,人们说起回归,有时候是指一类问题,有时候是指一类算法,这一点常常会使初学者有所困惑。常见的回归算法包括:最小二乘法(Ordinary Least Square),逻辑回归(Logistic Regression),逐步式回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing)。

    基于实例的算法

    1479572801-1131-ac78ib7ynEpxJzhsOGARzvdvicKA

    基于实例的算法常常用来对决策问题建立模型,这样的模型常常先选取一批样本数据,然后根据某些近似性把新数据与样本数据进行比较。通过这种方式来寻找最佳的匹配。因此,基于实例的算法常常也被称为“赢家通吃”学习或者“基于记忆的学习”。常见的算法包括 k-Nearest Neighbor(KNN), 学习矢量量化(Learning Vector Quantization, LVQ),以及自组织映射算法(Self-Organizing Map , SOM)

    正则化方法

    1479572801-7007-cm573ULFNhgoEA8EJujubjLDb2qA

    正则化方法是其他算法(通常是回归算法)的延伸,根据算法的复杂度对算法进行调整。正则化方法通常对简单模型予以奖励而对复杂算法予以惩罚。常见的算法包括:Ridge Regression, Least Absolute Shrinkage and Selection Operator(LASSO),以及弹性网络(Elastic Net)。

     

    决策树学习

    1479572801-4358-PiaYUw7zqu3954RyeBwhTHkHWk6Q

    决策树算法根据数据的属性采用树状结构建立决策模型, 决策树模型常常用来解决分类和回归问题。常见的算法包括:分类及回归树(Classification And Regression Tree, CART), ID3 (Iterative Dichotomiser 3), C4.5, Chi-squared Automatic Interaction Detection(CHAID), Decision Stump, 随机森林(Random Forest), 多元自适应回归样条(MARS)以及梯度推进机(Gradient Boosting Machine, GBM)

     

    贝叶斯方法

    1479572802-1427-c3vzbPgNXvHoaaNyzGPlN8PBGZFw

    贝叶斯方法算法是基于贝叶斯定理的一类算法,主要用来解决分类和回归问题。常见算法包括:朴素贝叶斯算法,平均单依赖估计(Averaged One-Dependence Estimators, AODE),以及Bayesian Belief Network(BBN)。

    基于核的算法

    1479572802-7140-pibItcdx0RaA35mJGsoZKgBpPmzA

    基于核的算法中最著名的莫过于支持向量机(SVM)了。 基于核的算法把输入数据映射到一个高阶的向量空间, 在这些高阶向量空间里, 有些分类或者回归问题能够更容易的解决。 常见的基于核的算法包括:支持向量机(Support Vector Machine, SVM), 径向基函数(Radial Basis Function ,RBF), 以及线性判别分析(Linear Discriminate Analysis ,LDA)等

    聚类算法

    1479572802-3592-ibHWZ7EllSXgcrDJB9wKJVwbaQ2Q

    聚类,就像回归一样,有时候人们描述的是一类问题,有时候描述的是一类算法。聚类算法通常按照中心点或者分层的方式对输入数据进行归并。所以的聚类算法都试图找到数据的内在结构,以便按照最大的共同点将数据进行归类。常见的聚类算法包括 k-Means算法以及期望最大化算法(Expectation Maximization, EM)。

    关联规则学习

    1479572802-6857-9tm3bibPFEcJ9w2KBxLV7mRn1exQ

    关联规则学习通过寻找最能够解释数据变量之间关系的规则,来找出大量多元数据集中有用的关联规则。常见算法包括 Apriori算法和Eclat算法等。

     

    人工神经网络

    1479572803-5509-3CeY57PHXriauFqH1dVnOmP3P4RA

     

    人工神经网络算法模拟生物神经网络,是一类模式匹配算法。通常用于解决分类和回归问题。人工神经网络是机器学习的一个庞大的分支,有几百种不同的算法。(其中深度学习就是其中的一类算法,我们会单独讨论),重要的人工神经网络算法包括:感知器神经网络(Perceptron Neural Network), 反向传递(Back Propagation), Hopfield网络,自组织映射(Self-Organizing Map, SOM)。学习矢量量化(Learning Vector Quantization, LVQ)

     

    深度学习

    1479572802-5101-zwjPk6sicl7s6PDnQWfsibJZ4SDQ

    深度学习算法是对人工神经网络的发展。 在近期赢得了很多关注, 特别是百度也开始发力深度学习后, 更是在国内引起了很多关注。 在计算能力变得日益廉价的今天,深度学习试图建立大得多也复杂得多的神经网络。很多深度学习的算法是半监督式学习算法,用来处理存在少量未标识数据的大数据集。常见的深度学习算法包括:受限波尔兹曼机(Restricted Boltzmann Machine, RBN), Deep Belief Networks(DBN),卷积网络(Convolutional Network), 堆栈式自动编码器(Stacked Auto-encoders)。

     

    降低维度算法

    1479572803-3312-5jc4UiaQCF66HAQia3icnwxyYK2A

    像聚类算法一样,降低维度算法试图分析数据的内在结构,不过降低维度算法是以非监督学习的方式试图利用较少的信息来归纳或者解释数据。这类算法可以用于高维数据的可视化或者用来简化数据以便监督式学习使用。常见的算法包括:主成份分析(Principle Component Analysis, PCA),偏最小二乘回归(Partial Least Square Regression,PLS), Sammon映射,多维尺度(Multi-Dimensional Scaling, MDS), 投影追踪(Projection Pursuit)等。

     

    集成算法:

    1479572803-6688-tf1SIoQxZaasKHftspLAvvpDWANQ

    集成算法用一些相对较弱的学习模型独立地就同样的样本进行训练,然后把结果整合起来进行整体预测。集成算法的主要难点在于究竟集成哪些独立的较弱的学习模型以及如何把学习结果整合起来。这是一类非常强大的算法,同时也非常流行。常见的算法包括:Boosting, Bootstrapped Aggregation(Bagging), AdaBoost,堆叠泛化(Stacked Generalization, Blending),梯度推进机(Gradient Boosting Machine, GBM),随机森林(Random Forest)。

    决策树

    一、  决策树优点

    1、决策树易于理解和解释,可以可视化分析,容易提取出规则。

    2、可以同时处理标称型和数值型数据。

    3、测试数据集时,运行速度比较快。

    4、决策树可以很好的扩展到大型数据库中,同时它的大小独立于数据库大小。

    二、决策树缺点

    1、对缺失数据处理比较困难。

    2、容易出现过拟合问题。

    3、忽略数据集中属性的相互关联。

    4、ID3算法计算信息增益时结果偏向数值比较多的特征。

    三、改进措施

    1、对决策树进行剪枝。可以采用交叉验证法和加入正则化的方法。

    2、使用基于决策树的combination算法,如bagging算法,randomforest算法,可以解决过拟合的问题

    三、应用领域

    企业管理实践,企业投资决策,由于决策树很好的分析能力,在决策过程应用较多。

     

    KNN算法

    一、KNN算法的优点

     

    1、KNN是一种在线技术,新数据可以直接加入数据集而不必进行重新训练

    2、KNN理论简单,容易实现

    二、KNN算法的缺点

    1、对于样本容量大的数据集计算量比较大。

    2、样本不平衡时,预测偏差比较大。如:某一类的样本比较少,而其它类样本比较多。

    3、KNN每一次分类都会重新进行一次全局运算。

    4、k值大小的选择。

    三、KNN算法应用领域

    文本分类、模式识别、聚类分析,多分类领域

    支持向量机(SVM)

    一、  SVM优点

    1、解决小样本下机器学习问题。

    2、解决非线性问题。

    3、无局部极小值问题。(相对于神经网络等算法)

    4、可以很好的处理高维数据集。

    5、泛化能力比较强。

    二、SVM缺点

    1、对于核函数的高维映射解释力不强,尤其是径向基函数。

    2、对缺失数据敏感。

    三、SVM应用领域

    文本分类、图像识别、主要二分类领域

    AdaBoost算法

    一、  AdaBoost算法优点

    1、很好的利用了弱分类器进行级联。

    2、可以将不同的分类算法作为弱分类器。

    3、AdaBoost具有很高的精度。

    4、相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每个分类器的权重。

    二、Adaboost算法缺点

    1、AdaBoost迭代次数也就是弱分类器数目不太好设定,可以使用交叉验证来进行确定。

    2、数据不平衡导致分类精度下降。

    3、训练比较耗时,每次重新选择当前分类器最好切分点。

    三、AdaBoost应用领域

    模式识别、计算机视觉领域,用于二分类和多分类场景

    朴素贝叶斯算法

    一、  朴素贝叶斯算法优点

    1、对大数量训练和查询时具有较高的速度。即使使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是特征概率的数学运算而已。

    2、支持增量式运算。即可以实时的对新增的样本进行训练。

    3、朴素贝叶斯对结果解释容易理解。

    二、朴素贝叶斯缺点

    1、由于使用了样本属性独立性的假设,所以如果样本属性有关联时其效果不好。

    三、朴素贝叶斯应用领域

    文本分类、欺诈检测中使用较多

    Logistic回归算法

    一、logistic回归优点

    1、计算代价不高,易于理解和实现

    二、logistic回归缺点

    1、容易产生欠拟合。

    2、分类精度不高。

    三、logistic回归应用领域

    用于二分类领域,可以得出概率值,适用于根据分类概率排名的领域,如搜索排名等。

    Logistic回归的扩展softmax可以应用于多分类领域,如手写字识别等。

    人工神经网络

    一、  神经网络优点

    1、分类准确度高,学习能力极强。

    2、对噪声数据鲁棒性和容错性较强。

    3、有联想能力,能逼近任意非线性关系。

    二、神经网络缺点

    1、神经网络参数较多,权值和阈值。

    2、黑盒过程,不能观察中间结果。

    3、学习过程比较长,有可能陷入局部极小值。

    三、人工神经网络应用领域

    目前深度神经网络已经应用与计算机视觉,自然语言处理,语音识别等领域并取得很好的效果。

     ===============================================================================================

    原文:http://suanfazu.com/t/qian-tan-wo-dui-ji-qi-xue-xi-de-dian-li-jie/305

    机器学习方法非常多,也很成熟。下面我挑几个说。

    1. 首先是SVM。因为我做的文本处理比较多,所以比较熟悉SVM。SVM也叫支持向量机,其把数据映射到多维空间中以点的形式存在,然后找到能够分类的最优超平面,最后根据这个平面来分类。SVM能对训练集之外的数据做很好的预测、泛化错误率低、计算开销小、结果易解释,但其对参数调节和核函数的参数过于敏感。个人感觉SVM是二分类的最好的方法,但也仅限于二分类。如果要使用SVM进行多分类,也是在向量空间中实现多次二分类。
      SVM有一个核心函数SMO,也就是序列最小最优化算法。SMO基本是最快的二次规划优化算法,其核心就是找到最优参数α,计算超平面后进行分类。SMO方法可以将大优化问题分解为多个小优化问题求解,大大简化求解过程。某些条件下,把原始的约束问题通过拉格朗日函数转化为无约束问题,如果原始问题求解棘手,在满足KKT的条件下用求解对偶问题来代替求解原始问题,使得问题求解更加容易。 SVM还有一个重要函数是核函数。核函数的主要作用是将数据从低位空间映射到高维空间。详细的内容我就不说了,因为内容实在太多了。总之,核函数可以很好的解决数据的非线性问题,而无需考虑映射过程。

    2. 第二个是KNN。KNN将测试集的数据特征与训练集的数据进行特征比较,然后算法提取样本集中特征最近邻数据的分类标签,即KNN算法采用测量不同特征值之间的距离的方法进行分类。KNN的思路很简单,就是计算测试数据与类别中心的距离。KNN具有精度高、对异常值不敏感、无数据输入假定、简单有效的特点,但其缺点也很明显,计算复杂度太高。要分类一个数据,却要计算所有数据,这在大数据的环境下是很可怕的事情。而且,当类别存在范围重叠时,KNN分类的精度也不太高。所以,KNN比较适合小量数据且精度要求不高的数据。
      KNN有两个影响分类结果较大的函数,一个是数据归一化,一个是距离计算。如果数据不进行归一化,当多个特征的值域差别很大的时候,最终结果就会受到较大影响;第二个是距离计算。这应该算是KNN的核心了。目前用的最多的距离计算公式是欧几里得距离,也就是我们常用的向量距离计算方法。
      个人感觉,KNN最大的作用是可以随时间序列计算,即样本不能一次性获取只能随着时间一个一个得到的时候,KNN能发挥它的价值。至于其他的特点,它能做的,很多方法都能做;其他能做的它却做不了。

    3. 第三个就是Naive Bayes了。Naive Bayes简称NB(牛X),为啥它牛X呢,因为它是基于Bayes概率的一种分类方法。贝叶斯方法可以追溯到几百年前,具有深厚的概率学基础,可信度非常高。Naive Baye中文名叫朴素贝叶斯,为啥叫“朴素”呢?因为其基于一个给定假设:给定目标值时属性之间相互条件独立。比如我说“我喜欢你”,该假设就会假定“我”、“喜欢”、“你”三者之间毫无关联。仔细想想,这几乎是不可能的。马克思告诉我们:事物之间是有联系的。同一个事物的属性之间就更有联系了。所以,单纯的使用NB算法效率并不高,大都是对该方法进行了一定的改进,以便适应数据的需求。
      NB算法在文本分类中用的非常多,因为文本类别主要取决于关键词,基于词频的文本分类正中NB的下怀。但由于前面提到的假设,该方法对中文的分类效果不好,因为中文顾左右而言他的情况太多,但对直来直去的老美的语言,效果良好。至于核心算法嘛,主要思想全在贝叶斯里面了,没啥可说的。

    4. 第四个是回归。回归有很多,Logistic回归啊、岭回归啊什么的,根据不同的需求可以分出很多种。这里我主要说说Logistic回归。为啥呢?因为Logistic回归主要是用来分类的,而非预测。回归就是将一些数据点用一条直线对这些点进行拟合。而Logistic回归是指根据现有数据对分类边界线建立回归公式,以此进行分类。该方法计算代价不高,易于理解和实现,而且大部分时间用于训练,训练完成后分类很快;但它容易欠拟合,分类精度也不高。主要原因就是Logistic主要是线性拟合,但现实中很多事物都不满足线性的。即便有二次拟合、三次拟合等曲线拟合,也只能满足小部分数据,而无法适应绝大多数数据,所以回归方法本身就具有局限性。但为什么还要在这里提出来呢?因为回归方法虽然大多数都不合适,但一旦合适,效果就非常好。
      Logistic回归其实是基于一种曲线的,“线”这种连续的表示方法有一个很大的问题,就是在表示跳变数据时会产生“阶跃”的现象,说白了就是很难表示数据的突然转折。所以用Logistic回归必须使用一个称为“海维塞德阶跃函数”的Sigmoid函数来表示跳变。通过Sigmoid就可以得到分类的结果。
      为了优化Logistic回归参数,需要使用一种“梯度上升法”的优化方法。该方法的核心是,只要沿着函数的梯度方向搜寻,就可以找到函数的最佳参数。但该方法在每次更新回归系数时都需要遍历整个数据集,对于大数据效果还不理想。所以还需要一个“随机梯度上升算法”对其进行改进。该方法一次仅用一个样本点来更新回归系数,所以效率要高得多。

    5. 第五个是决策树。据我了解,决策树是最简单,也是曾经最常用的分类方法了。决策树基于树理论实现数据分类,个人感觉就是数据结构中的B+树。决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。决策树计算复杂度不高、输出结果易于理解、对中间值缺失不敏感、可以处理不相关特征数据。其比KNN好的是可以了解数据的内在含义。但其缺点是容易产生过度匹配的问题,且构建很耗时。决策树还有一个问题就是,如果不绘制树结构,分类细节很难明白。所以,生成决策树,然后再绘制决策树,最后再分类,才能更好的了解数据的分类过程。
      决策树的核心树的分裂。到底该选择什么来决定树的分叉是决策树构建的基础。最好的方法是利用信息熵实现。熵这个概念很头疼,很容易让人迷糊,简单来说就是信息的复杂程度。信息越多,熵越高。所以决策树的核心是通过计算信息熵划分数据集。

    6. 我还得说一个比较特殊的分类方法:AdaBoost。AdaBoost是boosting算法的代表分类器。boosting基于元算法(集成算法)。即考虑其他方法的结果作为参考意见,也就是对其他算法进行组合的一种方式。说白了,就是在一个数据集上的随机数据使用一个分类训练多次,每次对分类正确的数据赋权值较小,同时增大分类错误的数据的权重,如此反复迭代,直到达到所需的要求。AdaBoost泛化错误率低、易编码、可以应用在大部分分类器上、无参数调整,但对离群点敏感。该方法其实并不是一个独立的方法,而是必须基于元方法进行效率提升。个人认为,所谓的“AdaBoost是最好的分类方法”这句话是错误的,应该是“AdaBoost是比较好的优化方法”才对。

    好了,说了这么多了,我有点晕了,还有一些方法过几天再写。总的来说,机器学习方法是利用现有数据作为经验让机器学习,以便指导以后再次碰到的决策。目前来说,对于大数据分类,还是要借助分布式处理技术和云技术才有可能完成,但一旦训练成功,分类的效率还是很可观的,这就好比人年龄越大看待问题越精准的道理是一样的。这八个月里,从最初的理解到一步步实现;从需求的逻辑推断到实现的方法选择,每天都是辛苦的,但每天也都是紧张刺激的。我每天都在想学了这个以后可以实现什么样的分类,其实想想都是让人兴奋的。当初,我逃避做程序员,主要原因就是我不喜欢做已经知道结果的事情,因为那样的工作没有什么期盼感;而现在,我可以利用数据分析得到我想象不到的事情,这不仅满足了我的好奇感,也让我能在工作中乐在其中。也许,我距离社会的技术需求还有很远的距离,但我对自己充满信心,因为,我不感到枯燥,不感到彷徨,虽然有些力不从心,但态度坚定。

     

     

    ===================================================

    http://blog.csdn.NET/vola9527/article/details/43347747

    简述机器学习十大算法的每个算法的核心思想、工作原理、适用情况及优缺点等。

    1)C4.5算法:

    ID3算法是以信息论为基础,以信息熵和信息增益度为衡量标准,从而实现对数据的归纳分类。ID3算法计算每个属性的信息增益,并选取具有最高增益的属性作为给定的测试属性。

    C4.5算法核心思想是ID3算法,是ID3算法的改进,改进方面有:

    1)用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;

    2)在树构造过程中进行剪枝

    3)能处理非离散的数据

    4)能处理不完整的数据

     C4.5算法优点:产生的分类规则易于理解,准确率较高。

    缺点:

    1)在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。

    2)C4.5只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。

     

    2)K means 算法

    是一个简单的聚类算法,把n的对象根据他们的属性分为k个分割,k< n。 算法的核心就是要优化失真函数J,使其收敛到局部最小值但不是全局最小值。

    其中N为样本数,K是簇数,rnk b表示n属于第k个簇,uk 是第k个中心点的值。然后求出最优的uk

     

    优点:算法速度很快

    缺点是,分组的数目k是一个输入参数,不合适的k可能返回较差的结果。

     

     

    3)朴素贝叶斯算法:

    朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。算法的基础是概率问题,分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。朴素贝叶斯假设是约束性很强的假设,假设特征条件独立,但朴素贝叶斯算法简单,快速,具有较小的出错率。

    在朴素贝叶斯的应用中,主要研究了电子邮件过滤以及文本分类研究。

     

    4)K最近邻分类算法(KNN)

    分类思想比较简单,从训练样本中找出K个与其最相近的样本,然后看这k个样本中哪个类别的样本多,则待判定的值(或说抽样)就属于这个类别。

    缺点:

    1)K值需要预先设定,而不能自适应

    2)当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。

    该算法适用于对样本容量比较大的类域进行自动分类。

     

     

    5)EM最大期望算法

    EM算法是基于模型的聚类方法,是在概率模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量。E步估计隐含变量,M步估计其他参数,交替将极值推向最大。

    EM算法比K-means算法计算复杂,收敛也较慢,不适于大规模数据集和高维数据,但比K-means算法计算结果稳定、准确。EM经常用在机器学习和计算机视觉的数据集聚(Data Clustering)领域。

     

    6)PageRank算法

    是google的页面排序算法,是基于从许多优质的网页链接过来的网页,必定还是优质网页的回归关系,来判定所有网页的重要性。(也就是说,一个人有着越多牛X朋友的人,他是牛X的概率就越大。)

    优点:

    完全独立于查询,只依赖于网页链接结构,可以离线计算。

    缺点:

    1)PageRank算法忽略了网页搜索的时效性。

    2)旧网页排序很高,存在时间长,积累了大量的in-links,拥有最新资讯的新网页排名却很低,因为它们几乎没有in-links。

     

    7)AdaBoost

    Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。

    整个过程如下所示:
    1. 先通过对N个训练样本的学习得到第一个弱分类器;
    2. 将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器;
    3. 将和都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器;
    4. 如此反复,最终得到经过提升的强分类器。

    目前AdaBoost算法广泛的应用于人脸检测、目标识别等领域。

     

    8)Apriori算法

    Apriori算法是一种挖掘关联规则的算法,用于挖掘其内含的、未知的却又实际存在的数据关系,其核心是基于两阶段频集思想的递推算法 。

    Apriori算法分为两个阶段:

    1)寻找频繁项集

    2)由频繁项集找关联规则

    算法缺点:

    1) 在每一步产生侯选项目集时循环产生的组合过多,没有排除不应该参与组合的元素;

    2) 每次计算项集的支持度时,都对数据库中    的全部记录进行了一遍扫描比较,需要很大的I/O负载。

     

    9)SVM支持向量机

    支持向量机是一种基于分类边界的方法。其基本原理是(以二维数据为例):如果训练数据分布在二维平面上的点,它们按照其分类聚集在不同的区域。基于分类边界的分类算法的目标是,通过训练,找到这些分类之间的边界(直线的――称为线性划分,曲线的――称为非线性划分)。对于多维数据(如N维),可以将它们视为N维空间中的点,而分类边界就是N维空间中的面,称为超面(超面比N维空间少一维)。线性分类器使用超平面类型的边界,非线性分类器使用超曲面。

    支持向量机的原理是将低维空间的点映射到高维空间,使它们成为线性可分,再使用线性划分的原理来判断分类边界。在高维空间中是一种线性划分,而在原有的数据空间中,是一种非线性划分。

    SVM在解决小样本、非线性及高维模式识别问题中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。

     

     

     

    10)CART分类与回归树

    是一种决策树分类方法,采用基于最小距离的基尼指数估计函数,用来决定由该子数

    据集生成的决策树的拓展形。如果目标变量是标称的,称为分类树;如果目标变量是连续的,称为回归树。分类树是使用树结构算法将数据分成离散类的方法。

    优点

    1)非常灵活,可以允许有部分错分成本,还可指定先验概率分布,可使用自动的成本复杂性剪枝来得到归纳性更强的树。

    2)在面对诸如存在缺失值、变量数多等问题时CART 显得非常稳健。







    文章参考http://blog.csdn.net/u012422446/article/details/53034260


    展开全文
  • 【搞定算法】常见算法分类总览

    万次阅读 多人点赞 2019-07-26 15:24:05
    博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:...主要的题目来源自:剑指 Offer、LeetCode、左神算法、面试、笔试、面经等等。下面按照分类记录: 说明(个人见解): 一、标注说明 ...

    博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java 一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。

    完善中......

    由于本人平时刷题比较零散,有时候找起来不是很方便,所以统一将题目记录于此。主要的题目来源自:剑指 Offer、LeetCode、左神算法、面试、笔试、面经等等。下面按照分类记录:

    说明(个人见解):

    一、标注说明

    标注手撕:必须掌握,熟练写出 code;

    标注星号:星号越多越重要;

    标注加分:一般此类都是算法不容易实现,但是需要掌握思想,面试加分。

    二、刷题顺序

    1、了解基本的数据结构与算法的知识:

    • 常用的数据结构:数组、链表、栈、队列、哈希表、树、图等的基本概念和实现;
    • 常用的算法:DFS / BFS、最短路径算法(Dijkstra)、贪心算法、动态规划、蓄水池算法、Manacher 算法等;
    • 常用的编程技巧:递归:递归非常重要,要认真理解递归的过程;

    2、《剑指Offer》:

    《剑指Offer》非常重要,可以看各大公司的面经,很多手撕代码都出自于《剑指Offer》,所以多刷几遍,每一题都务必能快速的手写出来。

    3、LeetCode:

    《剑指Offer》刷完了,可以先刷 LeetCode 的 Top100,当然你也可以根据自身的情况,刷自己薄弱的专题。大部分公司的笔试题都是出自于 LeetCode,原题或者改编,重要性就不用多说了;

    4、左神算法班:

    这个因人而异了,如果你对算法题比较敏感,这个阶段是可以跳过的。但是如果对算法不是很有信心或者准备的比较晚,还是比较推荐左神的算法班,分为初级和高级,会串讲基本的数据结构和对应的题目。

    5、最后:

    算法的重要性:得算法者得 Offer。大公司非常看重算法,即便内推,但是面试环节几乎都会手撕代码,如果这个环节出了问题,会大打折扣。


    一、基础数据结构篇

     

    排序

     

    归并排序

     

     

    查找

    1、二分查找递归和非递归实现

     

     

     

    前缀树

    1、前缀树的结构实现

     


    二、实战篇

    1、数组

    1、找出数组中出现次数大于数组长度一半和 N / K 的数【剑指Offer + 左神】【手撕】

    2、数组的奇偶位置问题:给定一个整型数组,请在原地调整这个数组,保证要么偶数位置上都是偶数,或者奇数位置上都是奇数。

    3、调整数组顺序使奇数位于偶数前面【剑指Offer】【手撕】

    4、数组的度(字节跳动面试题 + LeetCode)

    5、求一个数组中的第 k 小 / 大的数【BFPRT 算法、快排】【手撕】

    6、将一个整数数组划分为K个相等的子集问题【LeetCode + 字节跳动面试题】

    7、旋转数组中的最小数字【剑指Offer】

    8、在二维数组中查找一个数【剑指Offer】

    9、找出数组中重复的数字【剑指Offer】

    10、找出数组中只出现一次的那个数,其他都出现两次【字节跳动面试题】

    11、子数组问题:在条件下,每一个位置的元素都会作为子数组的开头或者结尾元素,那么遍历完整个数组,结果一定在其中

    1. 子数组最大累乘积:给定一个 double 类型的数组 arr,其中的元素可正、可负、可 0,返回子数组累乘的最大乘积。
    2. 需要排序的最短子数组长度
    3. 最长的可整合子数组的长度
    4. 最短无序连续子数组:双指针实现【LeetCode】
    5. 连续子数组的最大和【剑指Offer】:推荐动态规划实现【手撕】

    2、字符串

    1、字符串的排列与组合【手撕】

    2、最长回文子串:暴力+动态规划+Manacher算法【手撕:推荐用动态规划】

    3、正则表达式匹配:实现一个函数用来匹配包括'.'和'*'的正则表达式【剑指Offer】

    4、替换空格【剑指Offer】

    5、字符串的翻转和旋转及其应用【三步翻转法】

    6、字符串解码【华为笔试题 + LeetCode】

    7、无重复字符的最长子串【LeetCode】

    8、字符串的最长公共子串和最长公共子序列

    9、请实现一个函数用来判断字符串是否表示数值【剑指Offer】

    10、判断一个字符串是否是一个合法的 IPV4【美团面试题】


    3、哈希表

    1、手写一个简单的 HashMap【手撕】

    2、和为 K 的子数组:给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数【LeetCode】

    3、一种接收消息并按顺序打印的结构设计:单链表 + 两个HashMap【左神】

    4、哈希表增加 setAll 功能【左神】


    4、栈

    1、用固定大小的数组实现栈

    2、如何仅用队列实现栈【手撕】

    3、最小值栈:能够返回栈中最小元素的栈【剑指Offer:包含 min 函数的栈】

    4、栈的压入、弹出序列:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序【剑指Offer】

    单调栈结构问题


    5、队列

    1、用固定大小的数组实现队列

    2、如何仅用栈结构实现队列【手撕】


    6、链表

    1、反转单向链表【*****】

    2、反转双向链表

    3、K 个一组翻转链表(字节跳动面试题)

    4、合并两个排序的链表【剑指Offer】【*****】

    5、链表中倒数第 K 个节点【剑指Offer】【*****】

    6、O(1) 时间内删除一个节点【剑指Offer】

    7、删除链表中重复的节点【剑指Offer】

    8、从尾到头打印链表【剑指Offer】

    9、判断一个链表是否为回文结构【剑指Offer】

    10、给出两个有序链表的头结点,打印出两个链表中相同的元素

    11、将单向链表按某值划分成左边小、中间相等、右边大的形式【荷兰国旗问题】

    12、复制含有随机指针节点的链表

    13、两个单链表相交的一系列问题【*****】

    14、链表中环的入口节点【剑指Offer】【*****】

    15、复杂链表的复制【剑指Offer】


    7、树

    1、二叉树的遍历:

    2、二叉树的序列化与反序列化【剑指Offer】:

    3、在二叉树中找一个节点的后继节点

    4、判断一棵树是否是完全二叉树:层序遍历结合完全二叉树的特点

    5、判断一棵树是否是搜索二叉树:中序遍历结果升序

    6、判断一棵树是否是平衡二叉树:左平衡 && 右平衡 &&(左右高度差小于1)

    7、判断一棵树是否是对称的二叉树【剑指Offer】

    8、二叉树的镜像【剑指Offer】

    9、树的子结构:输入两棵二叉树A和B,判断B是不是A的子结构

    10、合并二叉树【LeetCode】

    11、二叉树中和为某一值的路径【剑指Offer】

    12、重建二叉树:输入某二叉树的前序遍历和中序遍历的结果,请重新构造出该二叉树【剑指Offer】

    13、求一棵完全二叉树的节点个数,时间复杂度低于O(N):结合满二叉树特点:2 ^  h - 1

    14、找二叉树左下角的值【LeetCode】

    15、把二叉搜索树转换为累加树(百度面试题)【LeetCode第538题】

    16、二叉树信息收集问题:


    8、图

    1、深度优先搜索

    2、广度优先搜索

    3、拓扑排序


    9、数字与位运算

    1、两数之和、三数之和【LeetCode】【手撕】

    2、大数问题:大数相加和大数相乘问题 + Karatsuba 算法【手撕】

    3、打印从 1 到最大的 n 位数:需要考虑大数问题【剑指Offer】

    4、数值的整数次方【剑指Offer】

    5、二进制中 1 的个数【剑指Offer】【手撕】


    10、排序的应用

    快排的应用:

    归并排序的应用:


    11、矩阵问题

    1、顺时针打印矩阵

    2、将一个正方形旋转90度

    3、之字型打印矩阵

    4、在一个行和列都有序的 m 行 n 列的矩阵中查找一个数是否存在


    12、递归

    1、求 n! 的结果

    2、汉诺塔问题【手撕】

    3、打印一个字符串的全部子序列,包括空字符串

    4、打印一个字符串的全排列

    5、母牛问题:母牛每年生一只母牛,新出生的母牛成长三年后也能每年生一只母牛,假设不会死。求 N 年后,母牛的数量

    6、机器人走路问题【递归+动态规划】

    7、给定一个数字组成的字符串,返回有多少种合法的 IPV4 组合【递归+动态规划】


    13、动态规划

    1、机器人走路问题【递归+动态规划】

    2、给定一个数字组成的字符串,返回有多少种合法的 IPV4 组合【递归+动态规划】

    3、矩阵最小路径问题:二维数组从左上角走到右下角的最短距离【手撕】

    4、剪绳子:剪成 m 段,最大乘积问题【剑指Offer】

    背包问题:


    14、贪心算法

    1、按最低字典序拼接字符串

    2、切分金条总代价最小

    3、最多做 K 个项目的最大利润

    4、安排最多的宣讲场次


    15、回溯算法

    1、机器人的运动范围【剑指Offer】


    16、经典结构

    1、单调栈结构【见3】

    2、滑动窗口结构


    17、经典算法

    1、蓄水池算法:解决等概率问题【多益网络笔试题】

    2、Manacher 算法:解决回文串问题

    3、KMP 算法:解决字符串匹配问题:时间复杂度为:O(N + M),空间复杂度为:O(M)

    4、BRPRT 算法:解决第 k 大数问题:选择中位数组的中位数作为 partition 的基准,时间复杂度 O(N)

    5、单例模式:懒汉+恶汉+静态内部类+双重校验锁【手撕】

    6、生产者消费者模式:wait/notify 、BlockingQueue 实现【手撕】

    7、多个线程交替打印:锁、信号量 Semaphore 实现【手撕】


    18、剑指 Offer

    《剑指Offer》中不容易分类的题目,在这里单独列出:

    第36题:二叉搜索树与双向链表:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表

    第41题:数据流中的中位数:两个堆实现:最大堆和最小堆


    19、LeetCode

    LeetCode 中不容易分类的题目,在这里单独列出:

     

     

    展开全文
  • 互联网常见算法笔试题分类总结,欢迎下载,全是干货。
  • 推荐算法分类

    千次阅读 2018-10-24 15:25:11
    推荐算法具有非常多的应用场景和商业价值,因此对推荐算法值得好好研究。推荐算法种类很多,但是目前应用最广泛的应该是协同过滤类别的推荐算法,本文就对协同过滤类别的推荐算法做一个概括总结,后续也会对一些典型...

    推荐算法具有非常多的应用场景和商业价值,因此对推荐算法值得好好研究。推荐算法种类很多,但是目前应用最广泛的应该是协同过滤类别的推荐算法,本文就对协同过滤类别的推荐算法做一个概括总结,后续也会对一些典型的协同过滤推荐算法做原理总结。

    1. 推荐算法概述

    推荐算法是非常古老的,在机器学习还没有兴起的时候就有需求和应用了。概括来说,可以分为以下5种:

    1)基于内容的推荐:这一类一般依赖于自然语言处理NLP的一些知识,通过挖掘文本的TF-IDF特征向量,来得到用户的偏好,进而做推荐。这类推荐算法可以找到用户独特的小众喜好,而且还有较好的解释性。这一类由于需要NLP的基础,本文就不多讲,在后面专门讲NLP的时候再讨论。

    2)协同过滤推荐:本文后面要专门讲的内容。协调过滤是推荐算法中目前最主流的种类,花样繁多,在工业界已经有了很多广泛的应用。它的优点是不需要太多特定领域的知识,可以通过基于统计的机器学习算法来得到较好的推荐效果。最大的优点是工程上容易实现,可以方便应用到产品中。目前绝大多数实际应用的推荐算法都是协同过滤推荐算法。

    3)混合推荐:这个类似我们机器学习中的集成学习,博才众长,通过多个推荐算法的结合,得到一个更好的推荐算法,起到三个臭皮匠顶一个诸葛亮的作用。比如通过建立多个推荐算法的模型,最后用投票法决定最终的推荐结果。混合推荐理论上不会比单一任何一种推荐算法差,但是使用混合推荐,算法复杂度就提高了,在实际应用中有使用,但是并没有单一的协调过滤推荐算法,比如逻辑回归之类的二分类推荐算法广泛。

    4)基于规则的推荐:这类算法常见的比如基于最多用户点击,最多用户浏览等,属于大众型的推荐方法,在目前的大数据时代并不主流。

    5)基于人口统计信息的推荐:这一类是最简单的推荐算法了,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后进行推荐,目前在大型系统中已经较少使用。
    在这里插入图片描述

    2. 协同过滤推荐概述

    协同过滤(Collaborative Filtering)作为推荐算法中最经典的类型,包括在线的协同和离线的过滤两部分。所谓在线协同,就是通过在线数据找到用户可能喜欢的物品,而离线过滤,则是过滤掉一些不值得推荐的数据,比比如推荐值评分低的数据,或者虽然推荐值高但是用户已经购买的数据。

    协同过滤的模型一般为m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时我们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。

    一般来说,协同过滤推荐分为三种类型。第一种是基于用户(user-based)的协同过滤,第二种是基于项目(item-based)的协同过滤,第三种是基于模型(model based)的协同过滤。

    基于用户(user-based)的协同过滤主要考虑的是用户和用户之间的相似度,只要找出相似用户喜欢的物品,并预测目标用户对对应物品的评分,就可以找到评分最高的若干个物品推荐给用户。而基于项目(item-based)的协同过滤和基于用户的协同过滤类似,只不过这时我们转向找到物品和物品之间的相似度,只有找到了目标用户对某些物品的评分,那么我们就可以对相似度高的类似物品进行预测,将评分最高的若干个相似物品推荐给用户。比如你在网上买了一本机器学习相关的书,网站马上会推荐一堆机器学习,大数据相关的书给你,这里就明显用到了基于项目的协同过滤思想。

    我们可以简单比较下基于用户的协同过滤和基于项目的协同过滤:基于用户的协同过滤需要在线找用户和用户之间的相似度关系,计算复杂度肯定会比基于基于项目的协同过滤高。但是可以帮助用户找到新类别的有惊喜的物品。而基于项目的协同过滤,由于考虑的物品的相似性一段时间不会改变,因此可以很容易的离线计算,准确度一般也可以接受,但是推荐的多样性来说,就很难带给用户惊喜了。一般对于小型的推荐系统来说,基于项目的协同过滤肯定是主流。但是如果是大型的推荐系统来说,则可以考虑基于用户的协同过滤,当然更加可以考虑我们的第三种类型,基于模型的协同过滤。

    基于模型(model based)的协同过滤是目前最主流的协同过滤类型了,我们的一大堆机器学习算法也可以在这里找到用武之地。下面我们就重点介绍基于模型的协同过滤。

    3. 基于模型的协同过滤

    基于模型的协同过滤作为目前最主流的协同过滤类型,其相关算法可以写一本书了,当然我们这里主要是对其思想做有一个归类概括。我们的问题是这样的m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时我们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。

    对于这个问题,用机器学习的思想来建模解决,主流的方法可以分为:用关联算法,聚类算法,分类算法,回归算法,矩阵分解,神经网络,图模型以及隐语义模型来解决。下面我们分别加以介绍。

    3.1 用关联算法做协同过滤

    一般我们可以找出用户购买的所有物品数据里频繁出现的项集活序列,来做频繁集挖掘,找到满足支持度阈值的关联物品的频繁N项集或者序列。如果用户购买了频繁N项集或者序列里的部分物品,那么我们可以将频繁项集或序列里的其他物品按一定的评分准则推荐给用户,这个评分准则可以包括支持度,置信度和提升度等。

    常用的关联推荐算法有Apriori,FP Tree和PrefixSpan。

    3.2 用聚类算法做协同过滤

    用聚类算法做协同过滤就和前面的基于用户或者项目的协同过滤有些类似了。我们可以按照用户或者按照物品基于一定的距离度量来进行聚类。如果基于用户聚类,则可以将用户按照一定距离度量方式分成不同的目标人群,将同样目标人群评分高的物品推荐给目标用户。基于物品聚类的话,则是将用户评分高物品的相似同类物品推荐给用户。

    常用的聚类推荐算法有K-Means, BIRCH, DBSCAN和谱聚类。

    3.3 用分类算法做协同过滤

    如果我们根据用户评分的高低,将分数分成几段的话,则这个问题变成分类问题。比如最直接的,设置一份评分阈值,评分高于阈值的就是推荐,评分低于阈值就是不推荐,我们将问题变成了一个二分类问题。虽然分类问题的算法多如牛毛,但是目前使用最广泛的是逻辑回归。为啥是逻辑回归而不是看起来更加高大上的比如支持向量机呢?因为逻辑回归的解释性比较强,每个物品是否推荐我们都有一个明确的概率放在这,同时可以对数据的特征做工程化,得到调优的目的。目前逻辑回归做协同过滤在BAT等大厂已经非常成熟了。

    常见的分类推荐算法有逻辑回归和朴素贝叶斯,两者的特点是解释性很强。

    3.4 用回归算法做协同过滤

    用回归算法做协同过滤比分类算法看起来更加的自然。我们的评分可以是一个连续的值而不是离散的值,通过回归模型我们可以得到目标用户对某商品的预测打分。

    常用的回归推荐算法有Ridge回归,回归树和支持向量回归。

    3.5 用矩阵分解做协同过滤

    用矩阵分解做协同过滤是目前使用也很广泛的一种方法。由于传统的奇异值分解SVD要求矩阵不能有缺失数据,必须是稠密的,而我们的用户物品评分矩阵是一个很典型的稀疏矩阵,直接使用传统的SVD到协同过滤是比较复杂的。

    目前主流的矩阵分解推荐算法主要是SVD的一些变种,比如FunkSVD,BiasSVD和SVD++。这些算法和传统SVD的最大区别是不再要求将矩阵分解为 U Σ V T U\Sigma V^T UΣVT的形式,而变是两个低秩矩阵 P T Q P^TQ PTQ的乘积形式。。

    3.6 用神经网络做协同过滤

    用神经网络乃至深度学习做协同过滤应该是以后的一个趋势。目前比较主流的用两层神经网络来做推荐算法的是限制玻尔兹曼机(RBM)。在目前的Netflix算法比赛中, RBM算法的表现很牛。当然如果用深层的神经网络来做协同过滤应该会更好,大厂商用深度学习的方法来做协同过滤应该是将来的一个趋势。

    3.7 用图模型做协同过滤

    用图模型做协同过滤,则将用户之间的相似度放到了一个图模型里面去考虑,常用的算法是SimRank系列算法和马尔科夫模型算法。对于SimRank系列算法,它的基本思想是被相似对象引用的两个对象也具有相似性。算法思想有点类似于大名鼎鼎的PageRank。而马尔科夫模型算法当然是基于马尔科夫链了,它的基本思想是基于传导性来找出普通距离度量算法难以找出的相似性。后续我会专门开篇来讲讲SimRank系列算法。

    3.8 用隐语义模型做协同过滤

    隐语义模型主要是基于NLP的,涉及到对用户行为的语义分析来做评分推荐,主要方法有隐性语义分析LSA和隐含狄利克雷分布LDA,这些等讲NLP的再专门讲。

    4. 协同过滤的一些新方向

    当然推荐算法的变革也在进行中,就算是最火爆的基于逻辑回归推荐算法也在面临被取代。哪些算法可能取代逻辑回归之类的传统协同过滤呢?下面是我的理解:

    a) 基于集成学习的方法和混合推荐:这个和混合推荐也靠在一起了。由于集成学习的成熟,在推荐算法上也有较好的表现。一个可能取代逻辑回归的算法是GBDT。目前GBDT在很多算法比赛都有好的表现,而有工业级的并行化实现类库。

    b)基于矩阵分解的方法:矩阵分解,由于方法简单,一直受到青睐。目前开始渐渐流行的矩阵分解方法有分解机(Factorization Machine)和张量分解(Tensor Factorization)。

    c) 基于深度学习的方法:目前两层的神经网络RBM都已经有非常好的推荐算法效果,而随着深度学习和多层神经网络的兴起,以后可能推荐算法就是深度学习的天下了?目前看最火爆的是基于CNN和RNN的推荐算法。

    5. 协同过滤总结

    协同过滤作为一种经典的推荐算法种类,在工业界应用广泛,它的优点很多,模型通用性强,不需要太多对应数据领域的专业知识,工程实现简单,效果也不错。这些都是它流行的原因。

    当然,协同过滤也有些难以避免的难题,比如令人头疼的“冷启动”问题,我们没有新用户任何数据的时候,无法较好的为新用户推荐物品。同时也没有考虑情景的差异,比如根据用户所在的场景和用户当前的情绪。当然,也无法得到一些小众的独特喜好,这块是基于内容的推荐比较擅长的。

    展开全文
  • k近邻算法,决策树,perception
  • 常见加密算法分类

    千次阅读 2018-07-10 17:20:00
    常见加密算法分类 常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。 对称加密 指加密和解密使用相同密钥的加密算法。对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。...
  • 常见分类算法

    万次阅读 2018-05-17 11:38:48
    常见分类算法 朴素贝叶斯网络、贝叶斯信念网络、随机森林、k-最近邻分类 云聚类算法引擎 k-Means、Canopy、Fuzzy K-Means、Mean Shift 云关联规则算法引起 FP-Growth关联规则 云智能推荐算法引擎 基于内存的...
  • 五大常用算法类型

    千次阅读 2020-09-14 16:29:30
    这个链接总结的很好 还有一个解释的更详细的博客链接
  • 1、分类和聚类的区别:  Classification (分类),对于一个classifier,通常需要你告诉它“这个东西被分为某某类”这样一些例子,理想情况下,一个 classifier 会从它得到的训练集中进行“学习”,从而具备对未知...
  • 常见的五种分类算法

    千次阅读 2021-06-16 23:20:58
    k-近邻、决策树、朴素贝叶斯、神经网络、支持向量机分类算法(以iris为例) 所需安装包: ibrary(class)##knn library(C50)##决策树 library(e1071)##朴素贝叶斯and支持向量机 library(neuralnet)##神经网络 构造...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 161,929
精华内容 64,771
关键字:

常见算法分类