PLSA

Probabilistic Latent Semantic Analysis是Thomas Hofmann于1999年在UCB读博期间提出的算法。

原文:

https://dslpitt.org/uai/papers/99/p289-hofmann.pdf

示意图:

PLSA将生成文档的过程,分为两个步骤:

1.生成文档的主题。(doc->topic)

2.根据主题生成相关的词.(topic->word)

第m篇文档dmd_m中的每个词的生成概率为:

p(w|dm)=∑z=1Kp(w|z)p(z|dm)=∑z=1Kφzwθmz

p(w|d_m) = \sum_{z=1}^K p(w|z)p(z|d_m) = \sum_{z=1}^K \varphi_{zw} \theta_{mz}

LDA

利用贝叶斯学派的观点改造PLSA,可得:

LDA生成模型包含两个过程:

1.生成第m篇文档中的所有词对应的topics。

α→−→−−−−Dirichletθ→m−→−−−−−−Multinomialz→m

\overrightarrow{\alpha}\xrightarrow[Dirichlet]{} \overrightarrow{\theta}_m \xrightarrow[Multinomial]{} \overrightarrow{z}_{m}

2.K个由topics生成words的独立过程。

β→−→−−−−Dirichletφ→k−→−−−−−−Multinomialw→(k)

\overrightarrow{\beta} \xrightarrow[Dirichlet]{} \overrightarrow{\varphi}_k \xrightarrow[Multinomial]{} \overrightarrow{w}_{(k)}

因此,总共就是M+KM+K个Dirichlet-Multinomial共轭结构。

LDA的Gibbs Sampling图示:

LDA模型的目标有两个:

训练模型:估计模型中的参数:φ→1,⋯,φ→K\overrightarrow{\varphi}_1, \cdots, \overrightarrow{\varphi}_K和θ→1,⋯,θ→M\overrightarrow{\theta}_1, \cdots, \overrightarrow{\theta}_M。

由于参数θ→m\overrightarrow{\theta}_m是和训练语料中的每篇文档相关的,对于我们理解新的文档并无用处,所以工程上最终存储LDA模型时,一般没有必要保留。

使用模型:对于新来的一篇文档docnewdoc_{new},我们能够计算这篇文档的topic分布θ→new\overrightarrow{\theta}_{new}。

从最终给出的算法可以看出,虽然LDA用到了MCMC和Gibbs Sampling算法,但最终目的并不是生成符合相应分布的随机数,而是求出模型参数φ→\overrightarrow{\varphi}的值,并用于预测。

参考

http://www.arbylon.net/publications/text-est.pdf

《Parameter estimation for text analysis》,Gregor Heinrich著

http://www.inference.phy.cam.ac.uk/itprnn/book.pdf

《Information Theory, Inference, and Learning Algorithms》,David J.C. MacKay著

关于MCMC和Gibbs Sampling的更多的内容,可参考《Neural Networks and Learning Machines》,Simon Haykin著。该书有中文版。

注:Sir David John Cameron MacKay,1967~2016,加州理工学院博士,导师John Hopfield,剑桥大学教授。英国能源与气候变化部首席科学顾问,英国皇家学会会员。在机器学习领域和可持续能源领域有重大贡献。

Simon Haykin,英国伯明翰大学博士,加拿大McMaster University教授。初为雷达和信号处理专家,80年代中后期,转而从事神经计算方面的工作。加拿大皇家学会会员。

http://www.cs.cmu.edu/~epxing/Class/10708-14/lectures/lecture17-MCMC.pdf

决策树

Decision Tree讲的最好的,首推周志华的《机器学习》。这里只对要点进行备忘。

当前样本集合D中,第k类样本所占的比例为pk(k=1,2,…,|y|)p_k(k=1,2,\dots,\vert y\vert),则D的信息熵(information entropy)定义为:

Ent(D)=−∑k=1|y|pklog2pk

Ent(D)=-\sum_{k=1}^{|y|}p_k\log_2p_k

假定离散属性a有V个可能的取值,若使用a对D进行划分,则第v个分支结点包含了D中所有在a上取值ava^v的样本,记为DvD^v。则信息增益(information gain)为:

Gain(D,a)=Ent(D)−∑v=1V|Dv||D|Ent(Dv)

Gain(D,a)=Ent(D)-\sum_{v=1}^V\frac{|D^v|}{|D|}Ent(D^v)

增益率(gain ratio):

Gain_ratio(D,a)=Gain(D,a)IV(a)

Gain\_ratio(D,a)=\frac{Gain(D,a)}{IV(a)}

其中

IV(a)=−∑v=1V|Dv||D|log2|Dv||D|

IV(a)=-\sum_{v=1}^V\frac{|D^v|}{|D|}\log_2 \frac{|D^v|}{|D|}

基尼值:

Gini(D)=1−∑k=1|y|p2k

Gini(D)=1-\sum_{k=1}^{|y|}p_k^2

基尼指数:

Gini_index(D,a)=∑v=1V|Dv||D|Gini(Dv)

Gini\_index(D,a)=\sum_{v=1}^V\frac{|D^v|}{|D|}Gini(D^v)

各种决策树和它的划分依据如下表所示:

名称 划分依据
ID3 Gain
C4.5 Gain_ratio
CART Gini_index

决策树是一种可以将训练误差变为0的算法,只要每个样本对应一个叶子结点即可,然而这样做会导致过拟合。为了限制树的生长,我们可以加入阈值,当增益大于阈值时才让节点分裂。

GBDT

GBDT这个算法有很多名字,但都是同一个算法:

GBRT (Gradient BoostRegression Tree)渐进梯度回归树

GBDT (Gradient BoostDecision Tree)渐进梯度决策树

MART (Multiple Additive Regression Tree)多决策回归树

Tree Net决策树网络

GBDT属于集成学习(Ensemble Learning)的范畴。集成学习的思路是在对新的实例进行分类的时候,把若干个单个分类器集成起来,通过对多个分类器的分类结果进行某种组合来决定最终的分类,以取得比单个分类器更好的性能。

集成学习的算法主要分为两大类:

并行算法:若干个不同的分类器同时分类,选择票数多的分类结果。这类算法包括bagging和随机森林等。

串行算法:使用同种或不同的分类器,不断迭代。每次迭代的目标是缩小残差或者提高预测错误项的权重。这类算法包括Adaboost和GBDT等。

GBDT写的比较好的,有以下blog:

http://blog.csdn.net/w28971023/article/details/8240756

摘录要点如下:

决策树分为两大类:

回归树:用于预测实数值,如明天的温度、用户的年龄、网页的相关程度。其结果加减是有意义的,如10岁+5岁-3岁=12岁。

分类树:用于分类标签值,如晴天/阴天/雾/雨、用户性别、网页是否是垃圾页面。其结果加减无意义,如男+男+女=到底是男是女?

GBDT的核心在于累加所有树的结果作为最终结果。例如根到某叶子结点的路径上的决策值为10岁、5岁、-3岁,则该叶子的最终结果为10岁+5岁-3岁=12岁。

所以GBDT中的树都是回归树,不是分类树

上面举的例子中,越靠近叶子,其决策值的绝对值越小。这不是偶然的。决策树的基本思路就是“分而治之”,自然越靠近根结点,其划分的粒度越粗。每划分一次,预测误差(即残差)越小,这样也就变相提高了下一步划分中预测错误项的权重,这就是算法名称中Gradient的由来。

为了防止过拟合,GBDT还采用了Shrinkage(缩减)的思想,每次只走一小步来逐渐逼近结果,这样各个树的残差就是渐变的,而不是陡变的。

参考:

http://blog.csdn.net/u010691898/article/details/38292937

http://www.cs.cmu.edu/~tom/

XGBoost

XGBoost是陈天奇于2014年提出的一套并行boost算法的工具库。

注:陈天奇,华盛顿大学计算机系博士生,研究方向为大规模机器学习。上海交通大学本科(2006~2010)和硕士(2010~2013)。
http://homes.cs.washington.edu/~tqchen/

原始论文:

https://arxiv.org/pdf/1603.02754v3.pdf

参考文献中的部分结论非常精彩,摘录如下。

从算法实现的角度,把握一个机器学习算法的关键点有两个,一个是loss function的理解(包括对特征X/标签Y配对的建模,以及基于X/Y配对建模的loss function的设计,前者应用于inference,后者应用于training,而前者又是后者的组成部分),另一个是对求解过程的把握。这两个点串接在一起构成了算法实现的主框架。

GBDT的求解算法,具体到每颗树来说,其实就是不断地寻找分割点(split point),将样本集进行分割,初始情况下,所有样本都处于一个结点(即根结点),随着树的分裂过程的展开,样本会分配到分裂开的子结点上。分割点的选择通过枚举训练样本集上的特征值来完成,分割点的选择依据则是减少Loss。

XGBoost的步骤:

I. 对loss function进行二阶Taylor Expansion,展开以后的形式里,当前待学习的Tree是变量,需要进行优化求解。

II. Tree的优化过程,包括两个环节:

I). 枚举每个叶结点上的特征潜在的分裂点

II). 对每个潜在的分裂点,计算如果以这个分裂点对叶结点进行分割以后,分割前和分割后的loss function的变化情况。

因为Loss Function满足累积性(对MLE取log的好处),并且每个叶结点对应的weight的求取是独立于其他叶结点的(只跟落在这个叶结点上的样本有关),所以,不同叶结点上的loss function满足单调累加性,只要保证每个叶结点上的样本累积loss function最小化,整体样本集的loss function也就最小化了。

可见,XGBoost算法之所以能够并行,其要害在于其中枚举分裂点的计算,是能够分布式并行计算的。

参考:

https://www.zhihu.com/question/41354392

推荐系统进阶

除了《机器学习(十三~十五)》提及的ALS和PCA之外,相关的算法还包括:

FM:Factorization Machines

Factorization Machines是Steffen Rendle于2010年提出的算法。

注:Steffen Rendle,弗赖堡大学博士,现为Google研究员。libFM的作者,被誉为推荐系统的新星。

FM算法实际上是一大类与矩阵分解有关的算法的广义模型。

参考文献1是Rendle本人的论文,其中有章节证明了SVD++、PITF、FPMC等算法,都是FM算法的特例。《机器学习(十四)》中提到的ALS算法,也是FM的特例。

参考文献2是国人写的中文说明,相对浅显一些。

参考:

1.https://www.ismll.uni-hildesheim.de/pub/pdfs/Rendle2010FM.pdf

2.http://blog.csdn.net/itplus/article/details/40534885

PITF

配对互动张量分解(Pairwise Interaction Tensor Factorization)算法,也是最早由Rendle引入推荐系统领域的。

论文:

http://www.wsdm-conference.org/2010/proceedings/docs/p81.pdf

关联规则挖掘

基本概念

关联规则挖掘(Association rule mining)是机器学习的一个子领域。它最早的案例就是以下的尿布和啤酒的故事:

沃尔玛曾今对数据仓库中一年多的原始交易数据进行了详细的分析,发现与尿布一起被购买最多的商品竟然是啤酒。
借助数据仓库和关联规则,发现了这个隐藏在背后的事实:美国妇女经常会嘱咐丈夫下班后为孩子买尿布,而30%~40%的丈夫在买完尿布之后又要顺便购买自己爱喝的啤酒。
根据这个发现,沃尔玛调整了货架的位置,把尿布和啤酒放在一起销售,大大增加了销量。

这里借用一个引例来介绍关联规则挖掘的基本概念。

交易号TID 顾客购买的商品 交易号TID 顾客购买的商品
T1 bread, cream, milk, tea T6 bread, tea
T2 bread, cream, milk T7 beer, milk, tea
T3 cake, milk T8 bread, tea
T4 milk, tea T9 bread, cream, milk, tea
T5 bread, cake, milk T10 bread, milk, tea

机器学习(十七)——决策树, 推荐系统进阶相关推荐

  1. 机器学习从入门到进阶✅

    1. 放弃海量资料!!! 没错,就是放弃海量资料!在我们想要入门机器学习的时候,往往会搜集很多资料,什么 xx学院机器学习内部资源.机器学习从入门到进阶百 G 资源.xx 人工智能教程,等等.很多时候 ...

  2. 第四范式程晓澄:机器学习如何优化推荐系统

    本文经AI新媒体量子位(公众号ID:qbitai )授权转载,转载请联系出处 本文长度为9532字,建议阅读10分钟 本文为你介绍推荐系统的诞生土壤和早起演进.推荐系统当下的基本架构以及如何搭建一个推 ...

  3. Scikit-Learn 机器学习笔记 -- 决策树

    Scikit-Learn 机器学习笔记 – 决策树 参考文档: handson-ml import numpy as np# 加载鸢尾花数据集 def load_dataset():from skle ...

  4. 阿里巴巴虾米的机器学习与深度学习进阶记

    20世纪70年代初,一名名叫Geoffrey Hinton的英国研究生开始制作简单的数学模型,来描述人脑中的神经元是如何直观地理解世界的.被称为人工神经网络的技术几十年来一直被认为是不切实际的.但是在 ...

  5. 机器学习实战-决策树-22

    机器学习实战-决策树-叶子分类 import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplo ...

  6. 利用计算机语言实现ID3算法,机器学习之决策树学习-id3算法-原理分析及c语言代码实现.pdf...

    机器学习之决策树学习-id3算法-原理分析及c语言代码实现.pdf 还剩 23页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保 ...

  7. 【火炉炼AI】机器学习006-用决策树回归器构建房价评估模型

    [火炉炼AI]机器学习006-用决策树回归器构建房价评估模型 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplo ...

  8. gini系数 决策树_案例7:机器学习--使用决策树实现泰坦尼克号乘客生存率预测...

    一.决策树简介 1.1 什么是决策树? 决策树:是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果,本质是一颗由多个判断节点组成的树. ...

  9. 机器学习实战 —— 决策树(完整代码)

    声明: 此笔记是学习<机器学习实战> -- Peter Harrington 上的实例并结合西瓜书上的理论知识来完成,使用Python3 ,会与书上一些地方不一样. 机器学习实战-- 决策 ...

最新文章

  1. 远程桌面怎么持续连接_如何拥有成功且可持续的远程产品管理职业
  2. g(n)= d∣n ∑ f( d n )_专栏F|Cora单词25衣服 (下):衣服也要配饰来搭配
  3. LINQ学习(六):OrderBy/Group By子句
  4. MutationObserver 监听DOM树变化
  5. PMCAFF | 智能硬件2.0时代:用户导向,内容连接
  6. Solr所有的查询解析器Query Parsers(转:http://blog.csdn.net/jiangchao858/article/details/53859731)
  7. Python基础(5) - 文件
  8. idea编辑器无法识别jdk
  9. Linux下的屏保设置 xset s 与 xset dpms
  10. allegro导出坐标文件正反面_Orcad与Allegro交互
  11. linux DISPLAY变量
  12. 几维安全:千锤百炼,锻造移动游戏安全防护黄金铠甲
  13. 大学最应该学习的 5 门课, 毕业后大厂 Offer 直接拿到手软!
  14. python注册大漠插件,大漠插件安装包
  15. 如何用计算机发匿名短信,电脑如何给手机发信息_电脑匿名给手机发短信
  16. P8195 [传智杯 #4 决赛] 小智的疑惑 —KMP
  17. python实现mysql多条件查询筛选功能
  18. Python3入门教程:Excel 基础操作(上)
  19. 展开说说:Adobe XD 哪个版本好用?
  20. 免费赠送20个帆布包和2个咖啡杯活动规则必看(会搜索+复制粘贴就行)

热门文章

  1. 庐山真面-Oxite的HelloWorld
  2. jekenis父子结构项目打包_自动打包机的型号怎么选择?自动打包机型号选择须知...
  3. 计算机专业科普知识图文并茂,科普下计算机专业需要什么基础知识?
  4. python将txt文件中的大小写转换_面试题:Python大小写转换
  5. 用原生JS实现旋转轮播图
  6. 获取数组中连续相同的元素
  7. 遍历元素根据状态显示不同颜色
  8. 前端返回的json中文变问号
  9. linux应用程序后台操作
  10. py2exe打包OpenCV,找不到libiomp5md.dll