sparkmlib算法使用有代码输入输出_第1页
sparkmlib算法使用有代码输入输出_第2页
sparkmlib算法使用有代码输入输出_第3页
sparkmlib算法使用有代码输入输出_第4页
sparkmlib算法使用有代码输入输出_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录第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 算法描述和定义 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.1 K-means 93.1.1 算法描述和定义 93.1.2 输入参数和含义 93.1.3 代码展示 93.1.4 应用场景 93.2 高斯混合 93.2.1 算法描述和定义 93.2.2 输入参数和含义 93.2.3 代码展示 93.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-means 103.6.1 算法描述和定义 103.6.2 输入参数和含义 103.6.3 代码展示 103.6.4 应用场景 10第4章 降维算法 114.1 奇异值分解 114.1.1 算法描述和定义 114.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 算法描述和定义 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.1 TF-IDF 146.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.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

分类与回归支持向量机算法描述和定义神经网络与支持向量机(包含核方法)都是非线性分类模型。1986年,Rummelhart与McClelland发明了神经网络的学习算法BackPropagation。后来,Vapnik等人于1992年提出了支持向量机。神经网络是多层(通常是三层)的非线性模型,支持向量机利用核技巧把非线性问题转换成线性问题。

神经网络与支持向量机一直处于“竞争”关系。

Scholkopf是Vapnik的大弟子,支持向量机与核方法研究的领军人物。据Scholkopf说,Vapnik当初发明支持向量机就是想’干掉’神经网络(HewantedtokillNeuralNetwork)。支持向量机确实很有效,一段时间支持向量机一派占了上风。由于神经网络等较新兴的机器学习方法的研究遇到一些重要的困难,比如如何确定网络结构的问题、过学习与欠学习问题、局部极小点问题等,使得SVM迅速发展和完善,在解决小样本、非线性及高维模式识别问题中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中.从此迅速的发展起来现在已经在许多领域(生物信息学,文本和手写识别等)都取得了成功的应用。在地球物理反演当中解决非线性反演也有显著成效,例如(支持向量机在预测地下水涌水量问题等)。现在已知该算法被被应用的主要有:石油测井中利用测井资料预测地层孔隙度及粘粒含量、天气预报工作等。通过核函数将特征映射到其他维度输入参数和含义代码展示importjava.text.SimpleDateFormatimportjava.util.Dateimportorg.apache.spark.mllib.classification.{SVMModel,SVMWithSGD}importorg.apache.spark.mllib.evaluation.BinaryClassificationMetricsimportorg.apache.spark.mllib.linalg.Vectorsimportorg.apache.spark.mllib.regression.LabeledPointimportorg.apache.spark.mllib.util.MLUtilsimportorg.apache.spark.{SparkConf,SparkContext}valdata=MLUtils.loadLibSVMFile(sc,"/root/sample_libsvm_data.txt")valsplits=data.randomSplit(Array(0.6,0.4),seed=11L)valtraining=splits(0).cache()valtest=splits(1)valnumIterations=10valmodel=SVMWithSGD.train(training,numIterations)valscoreAndLabels=test.map{point=>valscore=model.predict(point.features)(score,point.label)}scoreAndLabels.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.主要用来处理分类问题逻辑回归算法描述和定义逻辑回归的模型是一个非线性模型,sigmoid函数,又称逻辑回归函数。但是它本质上又是一个线性回归模型,因为除去igmoid映射函数关系,其他的步骤,算法都是线性回归的。可以说,逻辑回归,都是以线性回归为理论支持的。只不过,线性模型,无法做到sigmoid的非线性形式,sigmoid可以轻松处理0/1分类问题输入参数和含义输入数据:1|21|31|41|51|60|70|80|90|100|11代码展示代码展示:importorg.apache.spark.mllib.classification.LogisticRegressionWithSGDimportorg.apache.spark.mllib.linalg.Vectorsimportorg.apache.spark.mllib.regression.LabeledPointimportorg.apache.spark.{SparkConf,SparkContext}valdata=sc.textFile("/root/ttt1.txt")//获取数据集路径valparsedData=data.map{line=>valparts=line.split('|')LabeledPoint(parts(0).toDouble,Vectors.dense(parts(1).split('').map(_.toDouble)))}.cache()//转化数据格式parsedData.foreach(println)valmodel=LogisticRegressionWithSGD.train(parsedData,50)println(model.predict(Vectors.dense(10)))输出数据:scala>println(model.predict(Vectors.dense(10)))0.0scala>println(model.predict(Vectors.dense(11)))0.0scala>println(model.predict(Vectors.dense(20)))0.0应用场景可用于概率预测,也可用于分类。仅能用于线性问题广告系统中进行CTR预估,推荐系统中的预估转换率,反垃圾系统中的识别垃圾内容线性回归算法描述和定义什么是线性回归步骤:线性回归分析的整个过程可以简单描述为如下三个步骤:寻找合适的预测函数,即上文中的h(x)用来预测输入数据的判断结果。这个过程时非常关键的,需要对数据有一定的了解或分析,知道或者猜测预测函数的“大概”形式,比如是线性函数还是非线性函数,若是非线性的则无法用线性回归来得出高质量的结果。2.构造一个Loss函数(损失函数),该函数表示预测的输出(h)与训练数据标签之间的偏差,可以是二者之间的差(h-y)或者是其他的形式(如平方差开方)。综合考虑所有训练数据的“损失”,将Loss求和或者求平均,记为J(θ)函数,表示所有训练数据预测值与实际类别的偏差。3.显然,J(θ)函数的值越小表示预测函数越准确(即h函数越准确),所以这一步需要做的是找到J(θ)函数的最小值。找函数的最小值有不同的方法,Spark中采用的是梯度下降法(stochasticgradientdescent,SGD)。输入参数和含义代码展示输入数据:销量广告费价格10,538,436,3312,63代码:importorg.apache.spark.mllib.linalg.Vectorsimportorg.apache.spark.mllib.regression.{LinearRegressionWithSGD,LabeledPoint}importorg.apache.spark.{SparkConf,SparkContext}valdata=sc.textFile("/root/ttt.txt")//获取数据集路径valparsedData=data.map{line=>//开始对数据集处理valparts=line.split(',')//根据逗号进行分区LabeledPoint(parts(0).toDouble,Vectors.dense(parts(1).split('').map(_.toDouble)))}.cache()//转化数据格式parsedData.foreach(println)valmodel=LogisticRegressionWithSGD.train(parsedData,50)//建立模型println(result)//打印预测结果输出数据:scala>valresult=model.predict(Vectors.dense(5,3))//通过模型预测模型result:Double=9.853582413207473scala>valresult=model.predict(Vectors.dense(10,3))result:Double=17.454890879861697应用场景营销和促销分析,如评估直接邮件促销或一个电台广告活动的成功情况。根据历史数据预测股票升降、汇率浮动或其他频繁变动的金融信息。分析制造和工业流程。文本挖掘。分析多个输入和相对较少的输出之间的复杂关系的任何预测模型朴素贝叶斯算法描述和含义描述:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别步骤: (1)根据具体情况确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本(2)生成分类器,即计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录(3)使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系,由程序完成。输入参数和含义1.输入数据是LabeledPoint格式 2.lambda:参数为平滑参数,默认为1,可改 3.modelType:贝叶斯类型,多项为multinomial代码展示数据:代码:结果:应用场景医生对病人进行诊断账号分类等决策树算法描述和定义描述:是一个预测模型,它表示对象属性和对象值之间的一种映射,树中的每一个节点表示对象属性的判断条件,其分支表示符合节点条件的对象。树的叶子节点表示对象所属的预测结果步骤:1.将所有记录看作是一个节点2.遍历每个变量的每种分割方式,找到最好的分割点3.利用分割点将记录分割成两个子结点C1和C24.对子结点C1和C2重复执行步骤b)、c),直到满足特定条件为止输入参数和含义 1.numClasses:分类数 2.categoricalFeaturesInfo:为空则意味着所有的特征为连续变量 3.impurity:纯度计算 4.numTrees:树的个数 5.maxDepth:树的最大层数 6.maxBins:特征最大装箱数输入参数和含义代码展示数据:代码:结果:应用场景作为分类、预测问题的典型支持技术,它在用户划分、行为预测、规则梳理等方面具有广泛的应用前景随机森林算法描述和定义描述:使用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类能被选择最多,就预测这个样本为那一类。步骤:从样本集中有放回随机采样选出n个样本从所有特征中随机选择k个特征,对选出的样本利用这些特征建立决策树重复以上两步m次,即生成m棵决策树,形成随机森林对于新数据,经过每棵树决策,最后投票确认分到哪一类输入参数和含义 1.numClasses:分类数 2.categoricalFeaturesInfo:为空则意味着所有的特征为连续变量 3.impurity:纯度计算 4.numTrees:树的个数 5.maxDepth:树的最大层数 6.maxBins:特征最大装箱数 7.featureSubsetStrategy:特征子集采样策略,auto表示算法自取代码展示数据:测试数据: 代码:预测结果和决策树:应用场景网络游戏流失预测的场景,人体识别梯度提升树算法描述和定义思想:Boosting思想是训练多个模型,利用每个模型进行投票,每个模型的权重都一样,对于分类问题,取总票数最多作为分类,对于回归,取平均值。利用多个弱分类器,集成一个性能高的分类器,梯度提升树采用的是boosting的思想每一次建立模型是在之前建立模型损失函数的梯度下降方向。这句话有一点拗口,损失函数描述的是模型的不靠谱程度,损失函数越大,则说明模型越容易出错(其实这里有一个方差、偏差均衡的问题,但是这里就假设损失函数越大,模型越容易出错)。如果我们的模型能够让损失函数持续的下降,则说明我们的模型在不停的改进,而最好的方式就是让损失函数在其梯度的方向上下降。输入参数和含义 1.boostingStrategy:要说明是分类还是回归 2.trainingData:训练数据代码展示代码:结果:应用场景点击率预测,几乎可用于所有的回归问题(线性/非线性),也可以用来做搜索引擎排序应用RankNet、推荐算法保序回归算法描述和定义从该序列的首元素往后观察,一旦出现乱序现象停止该轮观察,从该乱序元素开始逐个吸收元素组成一个序列,直到该序列所有元素的平均值小于或等于下一个待吸收的元素。输入参数和含义1.输入数据以(feature,label)进行排序代码展示输入数据:代码:结果展示:应用场景判断药物是否有阳性反应等协同过滤算法描述和定义描述:协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤(CollaborativeFiltering,简称CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想步骤:收集用户偏好找到相似的用户和物品计算并推荐输入参数和含义用户电影评分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::4代码展示valsplits=ratings.randomSplit(Array(0.8,0.2),seed=111l)valtraining=splits(0).repartition(numPartitions)valtest=splits(1).repartition(numPartitions)valrank=12vallambda=0.01valnumIterations=20valmodel=ALS.train(ratings,rank,numIterations,lambda)users.take(5)//Array[Int]=Array(384,1084,4904,3702,5618)查看用户编号为384的用户的预测结果中预测评分排前10的商品:valuserId=users.take(1)(0)//384valK=10valtopKRecs=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)//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.8739823400539756)//(2190,0.8718466671129721)//(2050,0.8612639515847019)//(1011,0.8466911667526461)//(2903,0.8455764332511272)实时推荐可以把训练出来的模型保存,发布成web接口,在启动的时候生成或加载训练模型,然后提供API接口返回推荐接口valdata=sc.textFile("data/ml-1m/ratings.dat")接下来解析文件内容,获得用户对商品的评分记录:valratings=data.map(_.split("::")match{caseArray(user,item,rate,ts)=>Rating(user.toInt,item.toInt,rate.toDouble)}).cache()应用场景推荐物品发现兴趣相似的用户聚类K-means算法描述和定义步骤: 1.选择K个点作为初始聚类中心2.计算其余所有点到聚类中心的距离,并把每个点划分到离它最近的聚类中心所在的聚类中去。3.重新计算每个聚类中所有点的平均值,并将其作为新的聚类中心点算法在初始点选择上遵循一个基本原则:初始聚类中心点相互之间的距离应该尽可能的远输入参数和含义1.k

表示期望的聚类的个数。2.maxInterations

表示方法单次运行最大的迭代次数。3.runs

表示算法被运行的次数。K-means算法不保证能返回全局最优的聚类结果,所以在目标数据集上多次跑K-means算法,有助于返回最佳聚类结果。4.initializationMode

表示初始聚类中心点的选择方式,目前支持随机选择或者K-means||方式。默认是K-means||。5.initializationSteps表示K-means||方法中的部数。6.epsilon

表示K-means算法迭代收敛的阀值。7.seed

表示集群初始化时的随机种子。代码展示输入数据:代码:输出结果:K选择示例代码片段valks:Array[Int]=Array(3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)ks.foreach(cluster=>{valmodel:KMeansModel=KMeans.train(parsedTrainingData,cluster,30,1)valssd=puteCost(parsedTrainingData)println("sumofsquareddistancesofpointstotheirnearestcenterwhenk="+cluster+"->"+ssd))}应用场景一般是用来对数据对象按照其特征属性进行分组,经常被应用在客户分群,欺诈检测,图像分析等领域高斯混合算法描述和定义描述:它实际上与K-Means十分相像,主要的不同在于K-Means的结果是某个点被分到了某个类上,而GMM得到的结果则是某个点属于某一类的概率是多少思路:给定数据,假定它们是由GMM生成出来的,那么我们只要根据数据推出GMM的概率分布来就可以了GMM的实现过程中,主要涉及三个scala文件:1.GuassianMixtureModel.scala。管理混合高斯模型,主要参数是weights(各个高斯分布的权重组成的数组)、gaussians(各个多元高斯分布组成的数组)。2.GaussianMixture.scala。训练高斯混合模型的主要类,主要参数有k(聚类数)、convergenceTol(似然函数收敛阈值)、maxIterations(迭代次数)。3.MultivariateGaussian.scala。多元高斯分布类,主要参数有mu(各个特征的平均值)、sigma(各个特征之间的协方差)。输入参数和含义1.kisthenumberofdesiredclusters.//期望得到的聚类数2.convergenceTolisthemaximumchangeinlog-likelihoodatwhichweconsiderconvergenceachieved.//收敛阈值3.maxIterationsisthemaximumnumberofiterationstoperformwithoutreachingconvergence.//最大迭代次数4.initialModelisanoptionalstartingpointfromwhichtostarttheEMalgorithm.Ifthisparameterisomitted,arandomstartingpointwillbeconstructedfromthedata.//初始模型,如果该参数被省略,则使用一个随机的初始点代码展示代码:/docs/latest/mllib-clustering.html#gaussian-mixture结果:应用场景快速迭代聚类(图片)算法描述和定义有几个步骤或关键的地方:/s/blog_573ef4200102wqzi.html网络或关联的现象在现代社会中非常普遍,比如电话网络,社交网络,网页的链接,文献的引用,基因分析等等。用我们能够理解的方式来思考关系,最直接也最直观的方式就是关系图: 但是这个方式只能针对简单关系,节点多了,联系复杂了也就没法继续玩下去了。像下面这种关系网络该怎么用手工的方式画出来和分析呢?而这种复杂的关系图在电话、微博、微信中却是再常见不过的了。步骤:1、先将关系图转为矩阵表示,识别号需要转换为从0开始的索引数2、初始向量为每行初值之和除以矩阵总和,即初始向量的构成和归一化3、对矩阵的每行做归一化处理,使其转变为随机矩阵【或称概率转移矩阵,总之是这类矩阵的名字而已】4、其中(2)的处理比较特别。按理可以是任意非零向量,但按(2)的方式得到的初始向量收敛到稳态的速度很快5、迭代后得到的向量再对其做归一化处理输入参数和含义代码展示代码:输出结果:应用场景以应用到电话关联中的用户分类当中分类后可以对用户做群体操作三层贝叶斯概率模型算法描述和定义LDA是给文本建模的一种方法,属于生成模型。生成模型是指该模型可以随机生成可观测的数据,LDA可以随机生成一篇由N个主题组成的文章。通过对文本的建模,可以对文本进行主题分类,判断相似度等。LDA通过将文本映射到主题空间,即认为一篇文章有若干主题随机组成,从而获得文本间的关系。LDA模型有一个前提:bagofword。意思是认为文档就是一个词的集合,忽略任何语法或者出现顺序关系。对于语料库中的每篇文档,LDA定义了如下生成过程(generativeprocess):1.对每一篇文档,从主题分布中抽取一个主题;2.从上述被抽到的主题所对应的单词分布中抽取一个单词;3.重复上述过程直至遍历文档中的一个单词。每语料库中的每一篇文档与T(通过反复试验等方法事先给定)个主题的一个多项分布(multinomialdistribution)相对应,将该多项分布记为θ。每个主题又与词汇表(vocabulary)中的V个单词的一个多项分布相对应,将这个多项分布记为φ。LDA整体流程先定义一些字母的含义:文档集合D,topic集合TD中每个文档d看作一个单词序列<w1,w2,...,wn>,wi表示第i个单词,设d有n个单词。(LDA里面称之为wordbag,实际上每个单词的出现位置对LDA算法无影响)D中涉及的所有不同单词组成一个大集合VOCABULARY(简称VOC)LDA以文档集合D作为输入(会有切词,去停用词,取词干等常见的预处理,略去不表),希望训练出的两个结果向量(设聚成k个Topic,VOC中共包含m个词):对每个D中的文档d,对应到不同topic的概率θd

<pt1,...,ptk

>,其中,pti表示d对应T中第i个topic的概率。计算方法是直观的,pti=nti/n,其中nti表示d中对应第i个topic的词的数目,n是d中所有词的总数。对每个T中的topict,生成不同单词的概率φt

<pw1,...,pwm

>,其中,pwi表示t生成VOC中第i个单词的概率。计算方法同样很直观,pwi=Nwi/N,其中Nwi表示对应到topict的VOC中第i个单词的数目,N表示所有对应到topict的单词总数。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|ds),其中j取值1~k。然后可以根据这些概率值结果为ds中的第i个单词wi选择一个topic。最简单的想法是取令pj(wi|ds)最大的tj(注意,这个式子里只有j是变量),即

argmax[j]pj(wi|ds)

当然这只是一种方法(好像还不怎么常用),实际上这里怎么选择t在学术界有很多方法,我还没有好好去研究。

3)然后,如果ds中的第i个单词wi在这里选择了一个与原先不同的topic,就会对θd和φt有影响了(根据前面提到过的这两个向量的计算公式可以很容易知道)。它们的影响又会反过来影响对上面提到的p(w|d)的计算。对D中所有的d中的所有w进行一次p(w|d)的计算并重新选择topic看作一次迭代。这样进行n次循环迭代之后,就会收敛到LDA所需要的结果了。/a123456ei/article/details/227674291.主题模型: 到底什么是主题模型。一个主题,可以简单的认为是语义相似的词的集合,比如说“爱”和“喜欢”,或者“讨厌”或者“厌恶”一样,所以这时候可以把主题想象成为一个桶,而桶里面放的是出现概率较高的词,并且这些词和主题有着很强的相关性。2.生成模型:现在假设我们有大量的文档,那么我们怎么能够生成主题呢?这时候要用到生成模型的概念,让我们用概率模型,来写一篇文章。假如说我们要写一篇文章,那么这篇文章主要是关于什么的呢,也就是说它的主题是什么呢?哦,是关于爱情、亲情和友情的。并且这些主题在文章中都占有一定的比例,或者说主题在文档中具有一定的分布(多项式分布)。那么接下来怎么去表达这些主题呢?嗯,用句子表达。当然再细化一下,就是使用词语来表达,也就是从一个主题的“桶”里面挑选出来词语,而这些词语在主题当中又服从一定的分布(多项式分布)(通常这些词要进行一定的预处理,比如剔除stopword,对于英文来说还要stemming,当然中文似乎不用stemming了)。所以说一篇文章可以这样立体化的表示: doc

|

|

|...

|

topic_1

topic_2

topic_m

topic_i

|

|

|...

|

word_1

word_2

word_n

所以说一篇文章中的每个词可以是通过以一定的概率选择了某个主题(正如选择了爱情、亲情这样的主题一样),然后从这个主题当中又以一定的概率选择词语来进行表达,这样的过程就是一个生成模型。在这样的定义下,每篇文档中词语出现的概率为:使用矩阵表示就是:其中C中的每一列表示每个文档中词语出现的概率(或者说成文档中词语的分布),Φ中的每一列表示每个主题中每个单词出现的概率,θ每一列表示文档中每个主题出现的概率。产生文章过程:对于一篇文档,我们通过p(θ|α)产生θ,这是主题在此文档中对应的多项分布,通过多项分布抽取一个主题Z,然后我们再从主题Z对应的多项分布中抽取一个单词w。将这个过程重复N次便产生了一篇文章。用语言表述的话:

1.对每一篇文档,从主题分布中抽取一个主题;2.从上述被抽到的主题所对应的单词分布中抽取一个单词;3.重复上述过程直至遍历文档中的每一个单词。/pirage/article/details/50219323输入参数和含义每一列代表一个单词代码展示输出结果:应用场景1.判断两个文档的关联程度使用的方法是查看两个文档中出现相同的单词的个数,就如TF-IDF,这种方法未能够找到隐藏到文本后面的主题关联(或者语义关联),可能两个文档包含的相同的单词不多,但是他们表达的主题却是一样或者相似的。正如:“乔布斯离我们而去了。”和“苹果价格会不会降”一样。2.可以用在商品销售量的主题提取当中通过不同的销售量得到相应的主题以及主题中最主要的销售商品有哪些二分K-means聚类算法描述和定义步骤:1.初始化全部点的质心,并建立所需要的数据存储结构2.对每一个簇尝试二分(最开始就是一个簇),选出最好的3.更新各个簇的元素个数算法主要分为以下步骤,一开始是把所有数据初始化为一个cluster,第二步从所有cluster中选其中一个出来用基本k-means算法(k设为2)再划分成两个cluster(初始时只有一个cluster).然后是一直重复第二步的划分(选一个cluster划成两个)直到得到k个cluster算法停止。算法如下:1.把所有数据作为一个cluster加入clusterlist2.Repeat3.

从clusterlist中挑选一个SSE[最大]的cluster出来4.

fori=1to预设的循环次数5.

用k-means算法把挑出来的cluster划分成两个子cluster6.

计算两个子cluster的SSE和7.

endfor8.

把for循环中[sse和最小的]那两个子cluster加入clusterlist9.untilclusterlist拥有K个cluster输入参数和含义代码展示代码:结果:应用场景克服K均值算法收敛于局部最小值的问题分析一个公司的客户分类电子商务中分析商品相似度,归类商品流K-means算法描述和定义输入参数和含义searcher

-ASearcherthatisusedforperformingnearestneighborsearch.ItMUSTBEEMPTYinitiallybecauseitwillbeusedtokeeptrackoftheclustercentroids.numClusters

-Anestimatednumberofclusterstogenerateforthedatapoints.Thiscanadjusted,buttheactualnumberwilldependonthedata.ThedistanceCutoff

-Theinitialdistancecutoffrepresentingthevalueofthedistancebetweenapointanditsclosestcentroidafterwhichthenewpointwilldefinitelybeassignedtoanewcluster.beta

-RatioofgeometricprogressiontousewhenincreasingdistanceCutoff.Afternincreases,distanceCutoffbecomesdistanceCutoff*beta^n.AsmallervalueincreasesthedistanceCutofflessaggressively.clusterLogFactor

-Valuemultipliedwiththenumberofpointscountedsofarestimatingthenumberofclusterstoaimfor.Ifthefinalnumberofclustersisknownandthisclusteringisonlyforasketchofthedata,thiscanbethefinalnumberofclusters,k.clusterOvershoot

-Multiplicativeslackfactorforslowingdownthecollapseoftheclusters.可以通过stream处理增量的培训数据和测试数据代码展示代码:部分输出结果:应用场景降维算法奇异值分解算法描述和定义思想:SVD的想法抽象点来看就是将一个N行M列的评分矩阵R(R[u][i]代表第u个用户对第i个物品的评分),分解成一个N行F列的用户因子矩阵P(P[u][k]表示用户u对因子k的喜好程度)和一个M行F列的物品因子矩阵Q(Q[i][k]表示第i个物品的因子k的程度)输入参数和含义 1.K:矩阵列数代码展示输入数据: 代码:结果展示:RowMatrix矩阵左奇异向量奇异值右奇异值应用场景比如做featurereduction的PCA,还有做搜索引擎语义层次检索的LSI(LatentSemanticIndexing),LSA(隐性语义分析)、推荐系统、特征压缩(或称数据降维),基于SVD的协同过滤推荐系统主成分分析(PCA)算法描述和定义定义:可以将特征向量投影到低维空间,实现对特征向量的降维步骤:数据预处理。这里预处理包含两个部分:均值归一化和属性范围调整。均值归一化是相应属性减去其平均值;而属性范围则在归一化基础上除以属性方差。计算特征之间的协方差矩阵。该矩阵是一个n*n的对称矩阵计算协方差矩阵的特征值和特征向量将特征值从大到小排序保留最上面的N个特征向量将原数据映射到由N个特征向量构成的新空间中输入参数和含义部分数据:代码展示代码:结果展示:应用场景主要用作降维处理,对数据进行预处理统计相关统计算法描述和定义相关系数是用以反映变量之间相关关系密切程度的统计指标。简单的来说就是相关系数绝对值越大(值越接近1或者-1),当取值为0表示不相关,取值为(0~-1]表示负相关,取值为(0,

1]表示正相关。则表示数据越可进行线性拟合。输入参数和含义1.0,2.0,3.0,4.05.0,6.0,6.0,6.0代码展示应用场景1.估计某地家用电器的潜在用户分层采样算法描述和定义定义:根据在抽样时,将总体分成互不交叉的层,然后按照一定的比例,从各层独立地抽取一定数量的个体,将各层取出的个体合在一起作为样本输入参数和含义将字符串长度为2划分为层1和层2,对层1和层2按不同的概率进行抽样

数据aabbccddeeaaabbbcccDddeee代码展示输出数据:(2,aa)(1,bbb)(2,bb)(1,ccc)(2,cc)(1,ddd)(2,dd)(1,eee)(2,ee)(1,aaa)应用场景范围:总体中由差异明显的几部分组成即可卡方检验算法描述和定义描述:卡方检验是对样本的频数分布所来自总体分布是否服从某种理论分布或某种假设分所所作的假设检验。卡方检验在多数情况下不是对总体参数的检验,而是对总体分布的假设检验。所以,卡方检验属于自由分布的非参数检验。卡方检验可以同时处理一个因素分为多种类别,或多种因素各有多种类别的资料。总之,凡是可以应用比率进行检验的资料,都可以应用卡方检验。输入参数和含义分析一下吸烟与性别是否独立代码展示代码:结果: 统计量:pearson、独立性:1、值:5.48、概率:0.019。应用场景1.特定用户某项指标的分布与大盘的分布是否差异很大随机数发生器算法描述和定义描述:用于随机数的生成,众所周知,我们平时所使用的无论什么编程语言都会提供一个随机数函数,它是由\o"算法与数据结构知识库"\t"/zmazon/ar

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论