sparkmlib算法使用有代码输入输出.docx

上传人:小飞机 文档编号:1665026 上传时间:2022-12-13 格式:DOCX 页数:59 大小:2.19MB
返回 下载 相关 举报
sparkmlib算法使用有代码输入输出.docx_第1页
第1页 / 共59页
sparkmlib算法使用有代码输入输出.docx_第2页
第2页 / 共59页
sparkmlib算法使用有代码输入输出.docx_第3页
第3页 / 共59页
sparkmlib算法使用有代码输入输出.docx_第4页
第4页 / 共59页
sparkmlib算法使用有代码输入输出.docx_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《sparkmlib算法使用有代码输入输出.docx》由会员分享,可在线阅读,更多相关《sparkmlib算法使用有代码输入输出.docx(59页珍藏版)》请在三一办公上搜索。

1、目录第1章分类与回归61.1支持向量机61.1.1算法描述和定义61.1.2输入参数和含义61.1.3代码展示61.1.4应用场景61.2逻辑回归61.2.1算法描述和定义61.2.2输入参数和含义61.2.3代码展示61.2.4应用场景61.3线性回归61.3.1算法描述和定义61.3.2输入参数和含义61.3.3代码展示61.3.4应用场景61.4朴素贝叶斯61.4.1算法描述和含义61.4.2输入参数和含义61.4.3代码展示61.4.4应用场景61.5决策树61.5.1算法描述和定义71.5.2输入参数和含义71.5.3代码展示71.5.4应用场景71.6随机森林71.6.1算法描述和

2、定义71.6.2输入参数和含义71.6.3代码展示71.6.4应用场景71.7梯度提升树71.7.1算法描述和定义71.7.2输入参数和含义71.7.3代码展示71.7.4应用场景71.8保序回归71.8.1算法描述和定义71.8.2输入参数和含义71.8.3代码展示71.8.4应用场景7第2章协同过滤82.1算法描述和定义82.2输入参数和含义82.3代码展示82.4应用场景8第3章聚类93.1K-means93.1.1算法描述和定义93.1.2输入参数和含义93.1.3代码展示93.1.4应用场景93.2高斯混合93.2.1算法描述和定义93.2.2输入参数和含义93.2.3代码展示93.

3、2.4应用场景93.3快速迭代聚类(图片)93.3.1算法描述和定义103.3.2输入参数和含义103.3.3代码展示103.3.4应用场景103.4三层贝叶斯概率模型103.4.1算法描述和定义103.4.2输入参数和含义103.4.3代码展示103.4.4应用场景103.5二分K-means聚类103.5.1算法描述和定义103.5.2输入参数和含义103.5.3代码展示103.5.4应用场景103.6流K-means103.6.1算法描述和定义103.6.2输入参数和含义103.6.3代码展示103.6.4应用场景10第4章降维算法114.1奇异值分解114.1.1算法描述和定义114.

4、1.2输入参数和含义114.1.3代码展示114.1.4应用场景114.2主成分分析(PCA)114.2.1算法描述和定义114.2.2输入参数和含义114.2.3代码展示114.2.4应用场景11第5章统计125.1相关统计125.1.1算法描述和定义125.1.2输入参数和含义125.1.3代码展示125.1.4应用场景125.2分层采样125.2.1算法描述和定义125.2.2输入参数和含义125.2.3代码展示125.2.4应用场景125.3假设检验125.3.1算法描述和定义125.3.2输入参数和含义125.3.3代码展示125.3.4应用场景125.4流式显著性测试125.4.1

5、算法描述和定义125.4.2输入参数和含义125.4.3代码展示125.4.4应用场景125.5随机数发生器125.5.1算法描述和定义135.5.2输入参数和含义135.5.3代码展示135.5.4应用场景135.6核密度估计135.6.1算法描述和定义135.6.2输入参数和含义135.6.3代码展示135.6.4应用场景13第6章特征抽取和变换146.1TF-IDF146.1.1算法描述和定义146.1.2输入参数和含义146.1.3代码展示146.1.4应用场景146.2词到变量146.2.1算法描述和定义146.2.2输入参数和含义146.2.3代码展示146.2.4应用场景146.

6、3标准化146.3.1算法描述和定义146.3.2输入参数和含义146.3.3代码展示146.3.4应用场景146.4正规化146.4.1算法描述和定义146.4.2输入参数和含义146.4.3代码展示146.4.4应用场景14第1章 分类与回归1.1 支持向量机1.1.1 算法描述和定义神经网络与支持向量机(包含核方法)都是非线性分类模型。1986年,Rummelhart与McClelland发明了神经网络的学习算法Back Propagation。后来,Vapnik等人于1992年提出了支持向量机。神经网络是多层(通常是三层)的非线性模型,支持向量机利用核技巧把非线性问题转换成线性问题。神

7、经网络与支持向量机一直处于“竞争”关系。Scholkopf是Vapnik的大弟子,支持向量机与核方法研究的领军人物。据Scholkopf说,Vapnik当初发明支持向量机就是想干掉神经网络(He wanted to kill Neural Network)。支持向量机确实很有效,一段时间支持向量机一派占了上风。由于神经网络等较新兴的机器学习方法的研究遇到一些重要的困难,比如如何确定网络结构的问题、过学习与欠学习问题、局部极小点问题等,使得SVM迅速发展和完善,在解决小样本 、非线性及高维模式识别问题中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中.从此迅速的发展起来 现在已

8、经在许多领域(生物信息学,文本和手写识别等)都取得了成功的应用。在地球物理反演当中解决非线性反演也有显著成效,例如(支持向量机在预测地下水涌水量问题等)。现在已知该算法被被应用的主要有:石油测井中利用测井资料预测地层孔隙度及粘粒含量、天气预报工作等。通过核函数将特征映射到其他维度1.1.2 输入参数和含义1.1.3 代码展示import java.text.SimpleDateFormatimport java.util.Date import org.apache.spark.mllib.classification.SVMModel, SVMWithSGD import org.apach

9、e.spark.mllib.evaluation.BinaryClassificationMetrics import org.apache.spark.mllib.linalg.Vectors import org.apache.spark.mllib.regression.LabeledPoint import org.apache.spark.mllib.util.MLUtils import org.apache.spark.SparkConf, SparkContext val data = MLUtils.loadLibSVMFile(sc, /root/sample_libsvm

10、_data.txt)val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L) val training = splits(0).cache() val test = splits(1)val numIterations = 10 val model = SVMWithSGD.train(training, numIterations)val scoreAndLabels = test.map point = val score = model.predict(point.features) (score, point.label) s

11、coreAndLabels.take(10).foreach(println)输出数据:(-893656.2467488575,0.0) (553216.1154887225,1.0) (-1030793.6628224523,0.0) (-660018.4363039621,0.0) (473494.1478776787,1.0) (474484.8472541839,1.0) (625896.1173054989,1.0) (-1179877.5567907898,0.0) (459173.33117972035,1.0) (547268.1947242465,1.0)1.1.4 应用场景

12、1.主要用来处理分类问题1.2 逻辑回归1.2.1 算法描述和定义逻辑回归的模型是一个非线性模型,sigmoid函数,又称逻辑回归函数。但是它本质上又是一个线性回归模型,因为除去igmoid映射函数关系,其他的步骤,算法都是线性回归的。可以说,逻辑回归,都是以线性回归为理论支持的。只不过,线性模型,无法做到sigmoid的非线性形式,sigmoid可以轻松处理0/1分类问题1.2.2 输入参数和含义输入数据:1|2 1|3 1|4 1|5 1|6 0|7 0|8 0|9 0|10 0|111.2.3 代码展示代码展示:import org.apache.spark.mllib.classifi

13、cation.LogisticRegressionWithSGD import org.apache.spark.mllib.linalg.Vectors import org.apache.spark.mllib.regression.LabeledPoint import org.apache.spark.SparkConf, SparkContextval data = sc.textFile(/root/ttt1.txt) /获取数据集路径 val parsedData = data.map line = val parts = line.split(|) LabeledPoint(p

14、arts(0).toDouble, Vectors.dense(parts(1).split( ).map(_.toDouble) .cache() /转化数据格式 parsedData.foreach(println) val model = LogisticRegressionWithSGD.train(parsedData, 50) println(model.predict(Vectors.dense(10)输出数据:scala println(model.predict(Vectors.dense(10)0.0scala println(model.predict(Vectors.d

15、ense(11)0.0scala println(model.predict(Vectors.dense(20)0.01.2.4 应用场景1) 可用于概率预测,也可用于分类。2) 仅能用于线性问题3) 广告系统中进行CTR预估,推荐系统中的预估转换率,反垃圾系统中的识别垃圾内容1.3 线性回归1.3.1 算法描述和定义什么是线性回归步骤:线性回归分析的整个过程可以简单描述为如下三个步骤:1. 寻找合适的预测函数,即上文中的 h(x)用来预测输入数据的判断结果。这个过程时非常关键的,需要对数据有一定的了解或分析,知道或者猜测预测函数的“大概”形式,比如是线性函数还是非线性函数,若是非线性的则无法

16、用线性回归来得出高质量的结果。 2.构造一个Loss函数(损失函数),该函数表示预测的输出(h)与训练数据标签之间的偏差,可以是二者之间的差(h-y)或者是其他的形式(如平方差开方)。综合考虑所有训练数据的“损失”,将Loss求和或者求平均,记为 J()函数,表示所有训练数据预测值与实际类别的偏差。 3.显然, J() 函数的值越小表示预测函数越准确(即h函数越准确),所以这一步需要做的是找到 J() 函数的最小值。找函数的最小值有不同的方法,Spark中采用的是梯度下降法(stochastic gradient descent, SGD)。1.3.2 输入参数和含义1.3.3 代码展示输入数

17、据:销量 广告费 价格10,5 38,4 36,3 312,6 3代码:import org.apache.spark.mllib.linalg.Vectors import org.apache.spark.mllib.regression.LinearRegressionWithSGD, LabeledPoint import org.apache.spark.SparkConf, SparkContextval data = sc.textFile(/root/ttt.txt) /获取数据集路径 val parsedData = data.map line = /开始对数据集处理 val

18、 parts = line.split(,) /根据逗号进行分区 LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split( ).map(_.toDouble) .cache() /转化数据格式 parsedData.foreach(println) val model = LogisticRegressionWithSGD.train(parsedData, 50) /建立模型println(result) /打印预测结果输出数据:scala val result = model.predict(Vectors.dense(5,

19、3) /通过模型预测模型 result: Double = 9.853582413207473scala val result = model.predict(Vectors.dense(10,3) result: Double = 17.4548908798616971.3.4 应用场景 营销和促销分析,如评估直接邮件促销或一个电台广告活动的成功情况。 根据历史数据预测股票升降、汇率浮动或其他频繁变动的金融信息。 分析制造和工业流程。 文本挖掘。 分析多个输入和相对较少的输出之间的复杂关系的任何预测模型1.4 朴素贝叶斯1.4.1 算法描述和含义描述:对于给出的待分类项,求解在此项出现的条件

20、下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别步骤:(1)根据具体情况确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本(2)生成分类器,即计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录(3)使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系,由程序完成。1.4.2 输入参数和含义1.输入数据是LabeledPoint格式2.lambda:参数为平滑参数,默认为1,可改3.modelType:贝叶斯

21、类型,多项为multinomial1.4.3 代码展示数据:代码:结果:1.4.4 应用场景1. 医生对病人进行诊断2. 账号分类等1.5 决策树1.5.1 算法描述和定义描述:是一个预测模型,它表示对象属性和对象值之间的一种映射,树中的每一个节点表示对象属性的判断条件,其分支表示符合节点条件的对象。树的叶子节点表示对象所属的预测结果步骤:1.将所有记录看作是一个节点2.遍历每个变量的每种分割方式,找到最好的分割点3.利用分割点将记录分割成两个子结点 C1 和 C24.对子结点 C1 和 C2 重复执行步骤 b)、c),直到满足特定条件为止1.5.2 输入参数和含义1.numClasses:分

22、类数2.categoricalFeaturesInfo:为空则意味着所有的特征为连续变量3.impurity:纯度计算4.numTrees:树的个数5.maxDepth:树的最大层数6.maxBins:特征最大装箱数1.5.3 输入参数和含义1.5.4 代码展示数据:代码:结果:1.5.5 应用场景作为分类、预测问题的典型支持技术,它在用户划分、行为预测、规则梳理等方面具有广泛的应用前景1.6 随机森林1.6.1 算法描述和定义描述:使用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候, 就让森林的每一棵

23、决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类能被选择最多,就预测这个样本为那一类。步骤:1) 从样本集中有放回随机采样选出n个样本2) 从所有特征中随机选择k个特征,对选出的样本利用这些特征建立决策树3) 重复以上两步m次,即生成m棵决策树,形成随机森林4) 对于新数据,经过每棵树决策,最后投票确认分到哪一类1.6.2 输入参数和含义1.numClasses:分类数2.categoricalFeaturesInfo:为空则意味着所有的特征为连续变量3.impurity:纯度计算4.numTrees:树的个数5.maxDepth:树的最大层数6.maxBin

24、s:特征最大装箱数7.featureSubsetStrategy:特征子集采样策略,auto表示算法自取1.6.3 代码展示数据: 测试数据:代码:预测结果和决策树:1.6.4 应用场景网络游戏流失预测的场景,人体识别1.7 梯度提升树1.7.1 算法描述和定义思想:Boosting思想是训练多个模型,利用每个模型进行投票,每个模型的权重都一样,对于分类问题,取总票数最多作为分类,对于回归,取平均值。利用多个弱分类器,集成一个性能高的分类器,梯度提升树采用的是boosting的思想每一次建立模型是在之前建立模型损失函数的梯度下降方向。这句话有一点拗口,损失函数描述的是模型的不靠谱程度,损失函数

25、越大,则说明模型越容易出错(其实这里有一个方差、偏差均衡的问题,但是这里就假设损失函数越大,模型越容易出错)。如果我们的模型能够让损失函数持续的下降,则说明我们的模型在不停的改进,而最好的方式就是让损失函数在其梯度的方向上下降。1.7.2 输入参数和含义1.boostingStrategy:要说明是分类还是回归2.trainingData:训练数据1.7.3 代码展示代码:结果:1.7.4 应用场景点击率预测,几乎可用于所有的回归问题(线性/非线性),也可以用来做搜索引擎排序应用RankNet、推荐算法1.8 保序回归1.8.1 算法描述和定义从该序列的首元素往后观察,一旦出现乱序现象停止该轮

26、观察,从该乱序元素开始逐个吸收元素组成一个序列,直到该序列所有元素的平均值小于或等于下一个待吸收的元素。1.8.2 输入参数和含义1.输入数据以(feature,label)进行排序1.8.3 代码展示输入数据:代码:结果展示:1.8.4 应用场景判断药物是否有阳性反应等第2章 协同过滤2.1 算法描述和定义描述:协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤 (Collaborative Filtering, 简称CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推 荐,而我们一般更倾向于从口

27、味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想步骤:1. 收集用户偏好2. 找到相似的用户和物品3. 计算并推荐2.2 输入参数和含义用户 电影 评分 1:480:51:520:51:539:51:586:51:588:51:589:51:594:51:616:52:110:52:151:32:260:53:1148:43:1246:43:1252:42.3 代码展示val splits = ratings.randomSplit(Array( 0.8 , 0.2 ), seed = 111 l)val training = splits( 0 ).repartition(numPar

28、titions)val test = splits( 1 ).repartition(numPartitions)val rank = 12val lambda = 0.01val numIterations = 20val model = ALS.train(ratings, rank, numIterations, lambda)users.take( 5 )/ArrayInt = Array(384, 1084, 4904, 3702, 5618)查看用户编号为384的用户的预测结果中预测评分排前10的商品:val userId = users.take( 1 )( 0 ) /384va

29、l K = 10val topKRecs = model.recommendProducts(userId, K)println(topKRecs.mkString( n )/ Rating(384,2545,8.354966018818265)/ Rating(384,129,8.113083736094676)/ Rating(384,184,8.038113395650853)/ Rating(384,811,7.983433591425284)/ Rating(384,1421,7.912044967873945)/ Rating(384,1313,7.719639594879865)

30、/ Rating(384,2892,7.53667094600392)输出数据集:基于用户的推荐:384用户预测评分前4个/ Rating(384,2545,8.354966018818265)/ Rating(384,129,8.113083736094676)/ Rating(384,184,8.038113395650853)/ Rating(384,811,7.983433591425284)基于商品的推荐:显示跟该用户评分商品最相近的商品/ (2055,0.9999999999999999)/ (2051,0.9138311231145874)/ (3520,0.8739823400

31、539756)/ (2190,0.8718466671129721)/ (2050,0.8612639515847019)/ (1011,0.8466911667526461)/ (2903,0.8455764332511272)实时推荐可以把训练出来的模型保存,发布成web接口,在启动的时候生成或加载训练模型,然后提供API接口返回推荐接口val data = sc.textFile( data/ml-1m/ratings.dat )接下来解析文件内容,获得用户对商品的评分记录:val ratings = data.map(_.split( : ) match case Array(user

32、, item, rate, ts) =Rating(user.toInt, item.toInt, rate.toDouble).cache()2.4 应用场景1. 推荐物品2. 发现兴趣相似的用户第3章 聚类3.1 K-means3.1.1 算法描述和定义步骤:1.选择 K 个点作为初始聚类中心2.计算其余所有点到聚类中心的距离,并把每个点划分到离它最近的聚类中心所在的聚类中去。3. 重新计算每个聚类中所有点的平均值,并将其作为新的聚类中心点算法在初始点选择上遵循一个基本原则: 初始聚类中心点相互之间的距离应该尽可能的远3.1.2 输入参数和含义1.k表示期望的聚类的个数。2.maxInte

33、rations表示方法单次运行最大的迭代次数。3.runs表示算法被运行的次数。K-means 算法不保证能返回全局最优的聚类结果,所以在目标数据集上多次跑 K-means 算法,有助于返回最佳聚类结果。4.initializationMode表示初始聚类中心点的选择方式, 目前支持随机选择或者 K-means|方式。默认是 K-means|。5.initializationSteps表示 K-means|方法中的部数。6.epsilon表示 K-means 算法迭代收敛的阀值。7.seed表示集群初始化时的随机种子。3.1.3 代码展示输入数据:代码:输出结果:K 选择示例代码片段val k

34、s:ArrayInt = Array(3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)ks.foreach(cluster = val model:KMeansModel = KMeans.train(parsedTrainingData, cluster,30,1) val ssd = puteCost(parsedTrainingData) println(sum of squared distances of points to their nearest center when k= + cluster + - + ssd)3.1.4 应用

35、场景一般是用来对数据对象按照其特征属性进行分组,经常被应用在客户分群,欺诈检测,图像分析等领域3.2 高斯混合3.2.1 算法描述和定义描述:它实际上与K-Means十分相像,主要的不同在于K-Means的结果是某个点被分到 了某个类上,而GMM得到的结果则是某个点属于某一类的概率是多少思路:给定数据,假定它们是由GMM生成出来的,那么我们只要根据数据推出GMM的概率分布来就可以了GMM的实现过程中,主要涉及三个scala文件:1.GuassianMixtureModel.scala。管理混合高斯模型,主要参数是weights(各个高斯分布的权重组成的数组)、gaussians(各个多元高斯分

36、布组成的数组)。2.GaussianMixture.scala。训练高斯混合模型的主要类,主要参数有k(聚类数)、convergenceTol(似然函数收敛阈值)、maxIterations(迭代次数)。3.MultivariateGaussian.scala。多元高斯分布类,主要参数有mu(各个特征的平均值)、sigma(各个特征之间的协方差)。3.2.2 输入参数和含义1.k is the number of desired clusters./期望得到的聚类数2.convergenceTol is the maximum change in log-likelihood at which

37、 we consider convergence achieved./收敛阈值3.maxIterations is the maximum number of iterations to perform without reaching convergence./最大迭代次数4.initialModel is an optional starting point from which to start the EM algorithm. If this parameter is omitted, a random starting point will be constructed from

38、the data./初始模型,如果该参数被省略,则使用一个随机的初始点3.2.3 代码展示代码:http:/spark.apache.org/docs/latest/mllib-clustering.html#gaussian-mixture结果:3.2.4 应用场景3.3 快速迭代聚类(图片)3.3.1 算法描述和定义有几个步骤或关键的地方:网络或关联的现象在现代社会中非常普遍,比如电话网络,社交网络,网页的链接,文献的引用,基因分析等等。用我们能够理解的方式来思考关系,最直接也最直观的方式就是关系图:但是这个方式只能针对简单关系,节点多了,联系复杂了也就没法继续玩下去了。像下面这种关系网络

39、该怎么用手工的方式画出来和分析呢?而这种复杂的关系图在电话、微博、微信中却是再常见不过的了。步骤:1、先将关系图转为矩阵表示,识别号需要转换为从0开始的索引数2、初始向量为每行初值之和除以矩阵总和,即初始向量的构成和归一化3、对矩阵的每行做归一化处理,使其转变为随机矩阵【或称概率转移矩阵,总之是这类矩阵的名字而已】4、其中(2)的处理比较特别。按理可以是任意非零向量,但按(2)的方式得到的初始向量收敛到稳态的速度很快5、迭代后得到的向量再对其做归一化处理3.3.2 输入参数和含义3.3.3 代码展示代码:输出结果:3.3.4 应用场景以应用到电话关联中的用户分类当中 分类后可以对用户做群体操作

40、3.4 三层贝叶斯概率模型3.4.1 算法描述和定义LDA是给文本建模的一种方法,属于生成模型。生成模型是指该模型可以随机生成可观测的数据,LDA可以随机生成一篇由N个主题组成的文章。通过对文本的建模,可以对文本进行主题分类,判断相似度等。LDA通过将文本映射到主题空间,即认为一篇文章有若干主题随机组成,从而获得文本间的关系。LDA模型有一个前提:bag of word。意思是认为文档就是一个词的集合,忽略任何语法或者出现顺序关系。对于语料库中的每篇文档,LDA定义了如下生成过程(generativeprocess):1.对每一篇文档,从主题分布中抽取一个主题;2.从上述被抽到的主题所对应的单

41、词分布中抽取一个单词;3.重复上述过程直至遍历文档中的一个单词。每语料库中的每一篇文档与T(通过反复试验等方法事先给定)个主题的一个多项分布 (multinomialdistribution)相对应,将该多项分布记为。每个主题又与词汇表(vocabulary)中的V个单词的一个多项分布相对应,将这个多项分布记为。LDA整体流程先定义一些字母的含义: 文档集合D,topic集合T D中每个文档d看作一个单词序列,wi表示第i个单词,设d有n个单词。(LDA里面称之为word bag,实际上每个单词的出现位置对LDA算法无影响) D中涉及的所有不同单词组成一个大集合VOCABULARY(简称VOC

42、)LDA以文档集合D作为输入(会有切词,去停用词,取词干等常见的预处理,略去不表),希望训练出的两个结果向量(设聚成k个Topic,VOC中共包含m个词): 对每个D中的文档d,对应到不同topic的概率d,其中,pti表示d对应T中第i个topic的概率。计算方法是直观的,pti=nti/n,其中nti表示d中对应第i个topic的词的数目,n是d中所有词的总数。 对每个T中的topic t,生成不同单词的概率t,其中,pwi表示t生成VOC中第i个单词的概率。计算方法同样很直观,pwi=Nwi/N,其中Nwi表示对应到topic t的VOC中第i个单词的数目,N表示所有对应到topic t

43、的单词总数。LDA的核心公式如下:p(w|d) = p(w|t)*p(t|d)直观的看这个公式,就是以Topic作为中间层,可以通过当前的d和t给出了文档d中出现单词w的概率。其中p(t|d)利用d计算得到,p(w|t)利用t计算得到。实际上,利用当前的d和t,我们可以为一个文档中的一个单词计算它对应任意一个Topic时的p(w|d),然后根据这些结果来更新这个词应该对应的topic。然后,如果这个更新改变了这个单词所对应的Topic,就会反过来影响d和t。LDA学习过程LDA算法开始时,先随机地给d和t赋值(对所有的d和t)。然后上述过程不断重复,最终收敛到的结果就是LDA的输出。再详细说一下这个迭代的学习过程:1)针对一个特定的文档ds中的第i单词wi,如果令该单词对应的topic为tj,可以把上述公式改写为:pj(wi|ds) = p(wi|tj)*p(tj|ds)先不管这个值怎么计算(可以先理解成直接从ds和tj中取对应的项。实际没这么简单,但对理解整个LDA流程没什么影响,后文再说)。2)现在我们可以枚举T中的topic,得到所有的pj(wi|d

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号