版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
通信數(shù)據(jù)分析與實(shí)戰(zhàn)SparkMLlib機(jī)器學(xué)習(xí)算法庫第八章第1節(jié)2知道機(jī)器學(xué)習(xí)的作用熟悉機(jī)器學(xué)習(xí)的學(xué)習(xí)方式熟悉機(jī)器學(xué)習(xí)的應(yīng)用學(xué)習(xí)目標(biāo)TARGET機(jī)器學(xué)習(xí)概述機(jī)器學(xué)習(xí)是一門多領(lǐng)域交叉學(xué)科,涉及概率論、統(tǒng)計(jì)學(xué)、逼近論、凸分析、算法復(fù)雜度理論等多門學(xué)科,專門研究計(jì)算機(jī)如何模擬或?qū)崿F(xiàn)人類的學(xué)習(xí)行為,以獲取新的知識(shí)或技能,重新組織已有的知識(shí)結(jié)構(gòu)使之不斷改善自身的性能。機(jī)器學(xué)習(xí)概述機(jī)器學(xué)習(xí)是一種能夠賦予機(jī)器進(jìn)行自主學(xué)習(xí),不依靠人工進(jìn)行自主判斷的技術(shù),它和人類對(duì)歷史經(jīng)驗(yàn)歸納的過程有著相似之處。機(jī)器學(xué)習(xí)概述1.人類思考2.機(jī)器學(xué)習(xí)人類在學(xué)習(xí)成長(zhǎng)的過程中,積累了很多歷史經(jīng)驗(yàn),將經(jīng)驗(yàn)進(jìn)行歸納總結(jié),得到規(guī)律,因此當(dāng)我們遇到一些問題時(shí),總能從事物的發(fā)展規(guī)律找到方向,進(jìn)行推測(cè)。機(jī)器學(xué)習(xí)是對(duì)人類思考過程一個(gè)抽象,由于機(jī)器學(xué)習(xí)不是通過編程的形式得出結(jié)果,因此它的處理過程不是因果的邏輯,而是通過歸納思想得出的相關(guān)結(jié)論。機(jī)器學(xué)習(xí)概述在機(jī)器學(xué)習(xí)領(lǐng)域中,按照學(xué)習(xí)方式分類,可以讓研究人員在建模和算法選擇的時(shí)候,考慮根據(jù)輸入數(shù)據(jù)來選擇合適的算法從而得到更好的效果,通常機(jī)器學(xué)習(xí)可以分為有監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)兩種。1.有監(jiān)督學(xué)習(xí)通過已有的訓(xùn)練樣本(即已知數(shù)據(jù)以及其對(duì)應(yīng)的輸出)訓(xùn)練得到一個(gè)最優(yōu)模型,再利用這個(gè)模型將所有的輸入映射為相應(yīng)的輸出,對(duì)輸出進(jìn)行簡(jiǎn)單的判斷從而實(shí)現(xiàn)分類的目的。例如分類、回歸和推薦算法都屬于有監(jiān)督學(xué)習(xí)。2.無監(jiān)督學(xué)習(xí)根據(jù)類別未知(沒有被標(biāo)記)的訓(xùn)練樣本,而需要直接對(duì)數(shù)據(jù)進(jìn)行建模,我們無法知道要預(yù)測(cè)的答案。例如聚類、降維和文本處理的某些特征提取都屬于無監(jiān)督學(xué)習(xí)。機(jī)器學(xué)習(xí)的應(yīng)用1.電子商務(wù)機(jī)器學(xué)習(xí)在電商領(lǐng)域的應(yīng)用主要涉及搜索、廣告、推薦三個(gè)方面,在機(jī)器學(xué)習(xí)的參與下,搜索引擎能夠更好的理解語義,對(duì)用戶搜索的關(guān)鍵詞進(jìn)行匹配,同時(shí)它可以對(duì)點(diǎn)擊率與轉(zhuǎn)化率進(jìn)行深度分析,從而利于用戶選擇更加符合自己需求的商品。2.醫(yī)療普通醫(yī)療體系并不能永遠(yuǎn)保持精準(zhǔn)且快速的診斷,在目前研究階段中,技術(shù)人員利用機(jī)器學(xué)習(xí)對(duì)上百萬個(gè)病例數(shù)據(jù)庫的醫(yī)學(xué)影像進(jìn)行圖像識(shí)別分析數(shù)據(jù),并訓(xùn)練模型,幫助醫(yī)生做出更精準(zhǔn)高效的診斷。機(jī)器學(xué)習(xí)的應(yīng)用3.金融機(jī)器學(xué)習(xí)正在對(duì)金融行業(yè)產(chǎn)生重大的影響,例如在金融領(lǐng)域最常見的應(yīng)用是過程自動(dòng)化,該技術(shù)可以替代體力勞動(dòng),從而提高生產(chǎn)力,例如摩根大通推出了利用自然語言處理技術(shù)的智能合同的解決方案,該解決方案可以從文件合同中提取重要數(shù)據(jù),大大節(jié)省了人工體力勞動(dòng)成本;機(jī)器學(xué)習(xí)還可以應(yīng)用于風(fēng)控領(lǐng)域,銀行通過大數(shù)據(jù)技術(shù),監(jiān)控賬戶的交易參數(shù),分析持卡人的用戶行為,從而判斷該持卡人信用級(jí)別。9小結(jié)知道機(jī)器學(xué)習(xí)的作用熟悉機(jī)器學(xué)習(xí)的學(xué)習(xí)方式熟悉機(jī)器學(xué)習(xí)的應(yīng)用通信數(shù)據(jù)分析與實(shí)戰(zhàn)SparkMLlib機(jī)器學(xué)習(xí)算法庫第八章第2節(jié)11知道MLlib庫的作用知道機(jī)器學(xué)習(xí)的三大流程學(xué)習(xí)目標(biāo)TARGETMLlib的簡(jiǎn)介MLlib是Spark提供的可擴(kuò)展的機(jī)器學(xué)習(xí)庫,其中封裝了一些通用機(jī)器學(xué)習(xí)算法和工具類,包括分類、回歸、聚類、降維等,開發(fā)人員在開發(fā)過程中只需要關(guān)注數(shù)據(jù),而不需要關(guān)注算法本身,只需要傳遞參數(shù)和調(diào)試參數(shù)。機(jī)器學(xué)習(xí)的流程階段Spark中的機(jī)器學(xué)習(xí)流程大致分為三個(gè)階段,即數(shù)據(jù)準(zhǔn)備階段、訓(xùn)練模型評(píng)估階段以及部署預(yù)測(cè)階段。1.數(shù)據(jù)準(zhǔn)備階段在數(shù)據(jù)準(zhǔn)備階段,將數(shù)據(jù)收集系統(tǒng)采集的原始數(shù)據(jù)進(jìn)行預(yù)處理,清洗后的數(shù)據(jù)便于提取特征字段與標(biāo)簽字段,從而生產(chǎn)機(jī)器學(xué)習(xí)所需的數(shù)據(jù)格式,然后將數(shù)據(jù)隨機(jī)分為3個(gè)部分,即訓(xùn)練數(shù)據(jù)模塊、驗(yàn)證數(shù)據(jù)模塊和測(cè)試數(shù)據(jù)模塊。2.訓(xùn)練模型評(píng)估階段通過SparkMLlib庫中的函數(shù)將訓(xùn)練數(shù)據(jù)轉(zhuǎn)換為一種適合機(jī)器學(xué)習(xí)模型的表現(xiàn)形式,然后使用驗(yàn)證數(shù)據(jù)集對(duì)模型進(jìn)行測(cè)試來判斷準(zhǔn)確率,這個(gè)過程需要重復(fù)許多次,才能得出最佳模型,最后使用測(cè)試數(shù)據(jù)集再次檢驗(yàn)最佳模型,以避免過渡擬合的問題。機(jī)器學(xué)習(xí)的流程階段3.部署預(yù)測(cè)階段通過多次訓(xùn)練測(cè)試得到最佳模型后,就可以部署到生產(chǎn)系統(tǒng)中,在該階段的生產(chǎn)系統(tǒng)數(shù)據(jù),經(jīng)過特征提取產(chǎn)生數(shù)據(jù)特征,使用最佳模型進(jìn)行預(yù)測(cè),最終得到預(yù)測(cè)結(jié)果。這個(gè)過程也是重復(fù)檢驗(yàn)最佳模型的階段,可以使生產(chǎn)系統(tǒng)環(huán)境下的預(yù)測(cè)更加準(zhǔn)確。機(jī)器學(xué)習(xí)的流程階段16小結(jié)知道MLlib庫的作用知道機(jī)器學(xué)習(xí)的三大流程通信數(shù)據(jù)分析與實(shí)戰(zhàn)SparkMLlib機(jī)器學(xué)習(xí)算法庫第八章第3節(jié)18熟悉本地向量數(shù)據(jù)類型熟悉標(biāo)注點(diǎn)數(shù)據(jù)類型熟悉本地矩陣數(shù)據(jù)類型學(xué)習(xí)目標(biāo)TARGET數(shù)據(jù)類型本地向量1.密集向量(Dense)
密集向量是由Double類型的數(shù)組支持,例如,向量(1.0,0.0,3.0)的密集向量表示的格式為[1.0,0.0,3.0]。#創(chuàng)建一個(gè)密集本地向量valdv:Vector=Vectors.dense(1.0,0.0,3.0)dv:org.apache.spark.mllib.linalg.Vector=[1.0,0.0,3.0]數(shù)據(jù)類型本地向量2.稀疏向量(Sparse)
#創(chuàng)建一個(gè)稀疏本地向量valsv1:Vector=Vectors.sparse(3,Array(0,2),Array(1.0,3.0))sv1:org.apache.spark.mllib.linalg.Vector=(3,[0,2],[1.0,3.0])稀疏向量是由兩個(gè)并列的數(shù)組支持,例如向量(1.0,0.0,3.0)的稀疏向量表示的格式為(3,[0,2],[1.0,3.0]),其中3是向量(1.0,0.0,3.0)的長(zhǎng)度,[0,2]是向量中非0維度的索引值,即向量索引0和2的位置為非0元素,[1.0,3.0]是按索引排列的數(shù)組元素值。數(shù)據(jù)類型本地向量#導(dǎo)包scala>importorg.apache.spark.mllib.linalg.{Vector,Vectors}#創(chuàng)建一個(gè)密集本地向量scala>valdv:Vector=Vectors.dense(1.0,0.0,3.0)dv:org.apache.spark.mllib.linalg.Vector=[1.0,0.0,3.0]#創(chuàng)建一個(gè)稀疏本地向量scala>valsv1:Vector=Vectors.sparse(3,Array(0,2),Array(1.0,3.0))sv1:org.apache.spark.mllib.linalg.Vector=(3,[0,2],[1.0,3.0])#通過指定非零項(xiàng)目,創(chuàng)建稀疏本地向量scala>valsv2:Vector=Vectors.sparse(3,Seq((0,1.0),(2,3.0)))sv2:org.apache.spark.mllib.linalg.Vector=(3,[0,2],[1.0,3.0])數(shù)據(jù)類型標(biāo)注點(diǎn)標(biāo)注點(diǎn)實(shí)現(xiàn)類org.apache.spark.mllib.regression.LabeledPoint創(chuàng)建帶有正標(biāo)簽和密集向量的標(biāo)注點(diǎn)valpos=LabeledPoint(1.0,Vectors.dense(1.0,0.0,3.0))創(chuàng)建帶有負(fù)標(biāo)簽和稀疏向量的標(biāo)注點(diǎn)valneg=LabeledPoint(0.0,Vectors.sparse(3,Array(0,2),Array(1.0,3.0)))標(biāo)注點(diǎn)是一種帶有標(biāo)簽的本地向量,標(biāo)注點(diǎn)通常用于監(jiān)督學(xué)習(xí)算法中,MLlib使用Double數(shù)據(jù)類型存儲(chǔ)標(biāo)簽,因此可以在回歸和分類中使用標(biāo)記點(diǎn)。稀疏向量數(shù)據(jù)在機(jī)器學(xué)習(xí)應(yīng)用中較為常見,MLlib支持讀取LIBSVM的格式數(shù)據(jù),LIBSVM格式是一種每一行表示一個(gè)標(biāo)簽稀疏向量的文本格式,其格式如下:labelindex1:value1index2:value2……上述格式中,label是該樣本點(diǎn)的標(biāo)簽值,“index:value”代表了該樣本向量中所有非零的索引和元素值,需要注意的是,index是以1遞增的。數(shù)據(jù)類型本地矩陣1.密集矩陣
importorg.apache.spark.mllib.linalg.{Matrix,Matrices}創(chuàng)建一個(gè)3行2列的密集矩陣scala>valdm:Matrix=Matrices.dense(3,2,Array(1.0,3.0,5.0,2.0,4.0,6.0))密集矩陣將所有元素的值存儲(chǔ)在一個(gè)列優(yōu)先的雙精度數(shù)組中。數(shù)據(jù)類型本地矩陣2.稀疏矩陣
稀疏矩陣則將以列優(yōu)先的非零元素壓縮到稀疏列(CSC)格式中。創(chuàng)建一個(gè)3行2列的密集矩陣scala>valsm:Matrix=Matrices.sparse(3,2,Array(0,1,3),Array(0,2,1),
Array(9,6,8))25小結(jié)熟悉本地向量數(shù)據(jù)類型熟悉標(biāo)注點(diǎn)數(shù)據(jù)類型熟悉本地矩陣數(shù)據(jù)類型通信數(shù)據(jù)分析與實(shí)戰(zhàn)SparkMLlib機(jī)器學(xué)習(xí)算法庫第八章第4節(jié)27熟悉統(tǒng)計(jì)方法學(xué)習(xí)目標(biāo)TARGETSparkMLlib基本統(tǒng)計(jì)方法名稱相關(guān)說明count列的大小mean每列的均值variance每列的方差max每列的最大值min每列的最小值numNonzeros每列非零向量的個(gè)數(shù)MLlib提供了很多統(tǒng)計(jì)方法,包含摘要統(tǒng)計(jì)、相關(guān)統(tǒng)計(jì)、分層抽樣、假設(shè)檢驗(yàn)、隨機(jī)數(shù)生成等統(tǒng)計(jì)方法,利用這些統(tǒng)計(jì)方法可幫助用戶更好地對(duì)結(jié)果數(shù)據(jù)進(jìn)行處理和分析。統(tǒng)計(jì)量的計(jì)算用到Statistics類,摘要統(tǒng)計(jì)主要方法如下所示。SparkMLlib基本統(tǒng)計(jì)#導(dǎo)包scala>importorg.apache.spark.mllib.linalg.Vectorsscala>importorg.apache.spark.mllib.stat.{MultivariateStatisticalSummary,Statistics}#創(chuàng)建密集矩陣scala>valobservations=sc.parallelize(Seq(Vectors.dense(1.0,10.0,100.0),Vectors.dense(2.0,20.0,200.0),Vectors.dense(3.0,30.0,300.0)))#計(jì)算列摘要統(tǒng)計(jì)信息scala>valsummary:MultivariateStatisticalSummary=Statistics.colStats(observations)#打印平均值scala>println(summary.mean)[2.0,20.0,200.0]#打印方差scala>println(summary.variance)[1.0,100.0,10000.0]#打印每列非零元素的個(gè)數(shù)scala>println(summary.numNonzeros)[3.0,3.0,3.0]SparkMLlib基本統(tǒng)計(jì)相關(guān)系數(shù)是反應(yīng)兩個(gè)變量之間相關(guān)關(guān)系密切程度的統(tǒng)計(jì)指標(biāo),這也是統(tǒng)計(jì)學(xué)中常用的統(tǒng)計(jì)方式,MLlib提供了計(jì)算多個(gè)序列之間相關(guān)統(tǒng)計(jì)的方法,目前MLlib默認(rèn)采用皮爾森相關(guān)系數(shù)計(jì)算方法。皮爾森相關(guān)系數(shù)也稱皮爾森積矩相關(guān)系數(shù),它是一種線性相關(guān)系數(shù)。相關(guān)統(tǒng)計(jì)SparkMLlib基本統(tǒng)計(jì)相關(guān)統(tǒng)計(jì)importorg.apache.spark.mllib.linalg._importorg.apache.spark.mllib.stat.Statisticsimportorg.apache.spark.rdd.RDD#創(chuàng)建序列scala>valseriesX:RDD[Double]=sc.parallelize(Array(1,2,3,3,5))scala>valseriesY:RDD[Double]=sc.parallelize(Array(11,22,33,33,555))#計(jì)算seriesX,seriesY的相關(guān)系數(shù)scala>valcorrelation:Double=Statistics.corr(seriesX,seriesY,"pearson")Correlationis:0.8500286768773001#利用皮爾森方法計(jì)算密集矩陣相關(guān)系數(shù)scala>valdata:RDD[Vector]=sc.parallelize(Seq(Vectors.dense(1.0,10.0,100.0),Vectors.dense(2.0,20.0,200.0),Vectors.dense(5.0,33.0,366.0)))
scala>valcorrelMatrix:Matrix=Statistics.corr(data,"pearson")1.00.97888346588947310.99038956952756730.97888346588947311.00.99774832339861010.99038956952756730.99774832339861011.0SparkMLlib基本統(tǒng)計(jì)分層抽樣法也叫類型抽樣法,將總體按某種特征分為若干層級(jí),再?gòu)拿恳粚觾?nèi)進(jìn)行獨(dú)立取樣,組成一個(gè)樣本的統(tǒng)計(jì)學(xué)計(jì)算方法。例如某手機(jī)廠家估算當(dāng)?shù)貪撛谟脩?,可以將?dāng)?shù)鼐用裣M(fèi)水平作為分層基礎(chǔ),減少樣本中的誤差,如果不采取分層抽樣,僅在消費(fèi)水平較高的用戶中做調(diào)查,是不能準(zhǔn)確的估算出潛在的用戶。分層抽樣SparkMLlib基本統(tǒng)計(jì)分層抽樣#創(chuàng)建鍵值對(duì)RDDscala>valdata=sc.parallelize(Seq((1,'a'),(1,'b'),(2,'c'),(2,'d'),(2,'e'),(3,'f')))#設(shè)定抽樣格式scala>valfractions=Map(1->0.1,2->0.6,3->0.3)#從每層獲取抽樣樣本scala>valapproxSample=data.sampleByKey(withReplacement=false,fractions=fractions)
#從每層獲取精確樣本scala>valexactSample=data.sampleByKeyExact(withReplacement=false,fractions=fractions)
#打印抽樣樣本scala>approxSample.foreach(println)(2,e)#打印精確樣本scala>exactSample.foreach(println)(2,d)(3,f)(1,b)(2,c)34小結(jié)熟悉統(tǒng)計(jì)方法通信數(shù)據(jù)分析與實(shí)戰(zhàn)SparkMLlib機(jī)器學(xué)習(xí)算法庫第八章第5節(jié)36熟悉Mllib的分類學(xué)習(xí)目標(biāo)TARGET分類分析方法相關(guān)算法二元分類線性支持向量機(jī)、邏輯回歸、決策樹、隨機(jī)森林、梯度提升樹、樸素貝葉斯多元分類邏輯回歸、決策樹、隨機(jī)森林、樸素貝葉斯分類是指將事物分成不同類別,在分類模型中,可根據(jù)一組特征來判斷類別,這些特征代表了物體、事物或上下文的相關(guān)屬性。分類算法又被稱為分類器,它是數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)領(lǐng)域中的一個(gè)重要分支。MLlib支持多種分類分析方法,例如二元分類、多元分類,表中列出了不同種類的問題可采用不同的分類算法。分類線性支持向量機(jī)1.線性支持向量機(jī)線性支持向量機(jī)是一種常見判別方法,在機(jī)器學(xué)習(xí)領(lǐng)域中是一個(gè)有監(jiān)督學(xué)習(xí)模型,用來進(jìn)行模式識(shí)別、分類以及回歸分析。使用MLlib提供的線性支持向量機(jī)算法訓(xùn)練模型,需要導(dǎo)入線性支持向量機(jī)所需包。分類線性支持向量機(jī)//導(dǎo)入線性支持向量機(jī)所需包importorg.apache.spark.mllib.classification.{SVMModel,SVMWithSGD}//導(dǎo)入二元分類評(píng)估類importorg.apache.spark.mllib.evaluation.BinaryClassificationMetrics
//MLUtils提供了一些輔助方法,用于加載,保存和預(yù)處理MLLib中使用的數(shù)據(jù)importorg.apache.spark.mllib.util.MLUtils#加載Spark官方提供數(shù)據(jù)集scala>valdata=MLUtils.loadLibSVMFile(sc,"file:///export/servers/spark/data/mllib/sample_libsvm_data.txt")#將數(shù)據(jù)的60%分為訓(xùn)練數(shù)據(jù),40%分為測(cè)試數(shù)據(jù)scala>valsplits=data.randomSplit(Array(0.6,0.4),seed=11L)scala>valtraining=splits(0).cache()scala>valtest=splits(1)#設(shè)置迭代次數(shù)scala>valnumIterations=100執(zhí)行算法來構(gòu)建模型scala>valmodel=SVMWithSGD.train(training,numIterations)
#用測(cè)試數(shù)據(jù)評(píng)估模型scala>valscoreAndLabels=test.map{point=>valscore=model.predict(point.features)(score,point.label)}#獲取評(píng)估指標(biāo)scala>valmetrics=newBinaryClassificationMetrics(scoreAndLabels)#計(jì)算二元分類的PR和ROC曲線下的面積scala>valauROC=metrics.areaUnderROC()auROC:Double=1.0#保存并加載模型scala>model.save(sc,"target/tmp/scalaSVMWithSGDModel")scala>valsameModel=SVMModel.load(sc,"target/tmp/scalaSVMWithSGDModel"分類2.邏輯回歸邏輯回歸又稱為邏輯回歸分析,是一個(gè)概率模型的分類算法,用于數(shù)據(jù)挖掘、疾病自動(dòng)診斷及經(jīng)濟(jì)預(yù)測(cè)等領(lǐng)域。例如在流行病學(xué)研究中,探索引發(fā)某一疾病的危險(xiǎn)因素,根據(jù)模型預(yù)測(cè)在不同自變量情況下,推測(cè)發(fā)生某一疾病。分類#導(dǎo)入邏輯回歸所需包importorg.apache.spark.mllib.classification.{LogisticRegressionModel,LogisticRegressionWithLBFGS}#導(dǎo)入分類評(píng)估器importorg.apache.spark.mllib.evaluation.MulticlassMetricsimportorg.apache.spark.mllib.regression.LabeledPointimportorg.apache.spark.mllib.util.MLUtils#加載Spark官方提供數(shù)據(jù)集scala>valdata=MLUtils.loadLibSVMFile(sc,"file:///export/servers/spark/data/mllib/sample_libsvm_data.txt")#將數(shù)據(jù)的60%分為訓(xùn)練數(shù)據(jù),40%分為測(cè)試數(shù)據(jù)scala>valsplits=data.randomSplit(Array(0.6,0.4),seed=11L)scala>valtraining=splits(0).cache()scala>valtest=splits(1)分類#運(yùn)行訓(xùn)練算法來構(gòu)建模型scala>valmodel=newLogisticRegressionWithLBFGS().setNumClasses(10).run(training)#用測(cè)試數(shù)據(jù)評(píng)估模型scala>valpredictionAndLabels=test.map{caseLabeledPoint(label,features)=> valprediction=model.predict(features)(prediction,label)}#獲取評(píng)估指標(biāo)scala>valmetrics=newMulticlassMetrics(predictionAndLabels)scala>valaccuracy=metrics.accuracyaccuracy:Double=1.0#保存并加載模型model.save(sc,"target/tmp/scalaLogisticRegressionWithLBFGSModel")valsameModel=LogisticRegressionModel.load(sc,"target/tmp/scalaLogisticRegressionWithLBFGSModel")43小結(jié)熟悉MLlib的分類通信數(shù)據(jù)分析與實(shí)戰(zhàn)SparkMLlib機(jī)器學(xué)習(xí)算法庫第八章第6節(jié)45熟悉推薦模型的分類掌握推薦系統(tǒng)案例實(shí)現(xiàn)學(xué)習(xí)目標(biāo)TARGET推薦模型分類推薦系統(tǒng)的研究已相當(dāng)廣泛,也是最為大眾所知的一種機(jī)器學(xué)習(xí)模型,目前最為流行的推薦系統(tǒng)所應(yīng)用的算法是協(xié)同過濾,協(xié)同過濾用于推薦系統(tǒng),這項(xiàng)技術(shù)是為填補(bǔ)關(guān)聯(lián)矩陣的缺失項(xiàng)而實(shí)現(xiàn)推薦效果。簡(jiǎn)單的說,協(xié)同過濾是利用大量已有的用戶偏好,來估計(jì)用戶對(duì)其未接觸過的物品的喜好程度。在協(xié)同過濾算法中有著兩個(gè)分支:
基于物品的協(xié)同過濾(ItemCF)基于群體用戶的協(xié)同過濾(UserCF)
推薦模型分類1.基于物品的推薦(ItemCF)基于物品的推薦是利用現(xiàn)有用戶對(duì)物品的偏好或是評(píng)級(jí)情況,計(jì)算物品之間的某種相似度,以用戶接觸過的物品來表示這個(gè)用戶,再尋找出和這些物品相似的物品,并將這些物品推薦給用戶。2.基于用戶的推薦(UserCF)基于用戶的推薦,可用“志趣相投”一詞所表示,通常是對(duì)用戶歷史行為數(shù)據(jù)分析,如購(gòu)買、收藏商品或搜索內(nèi)容,通過某種算法將用戶喜好物品進(jìn)行打分。根據(jù)不同用戶對(duì)相同物品或內(nèi)容數(shù)據(jù)的態(tài)度和偏好程度計(jì)算用戶間關(guān)系程度,在相同喜好用戶間進(jìn)行商品推薦。利用MLlib實(shí)現(xiàn)電影推薦在電影推薦系統(tǒng)中,通常分為針對(duì)用戶推薦電影和針對(duì)電影推薦用戶兩種方式。若采用基于用戶的推薦模型,則會(huì)利用相似用戶的評(píng)級(jí)來計(jì)算對(duì)某個(gè)用戶的推薦。若采用基于物品的推薦模型,則會(huì)依靠用戶接觸過的物品與候選物品之間的相似度來獲得推薦。在SparkMLlib實(shí)現(xiàn)了交替最小二乘(ALS)算法,它是機(jī)器學(xué)習(xí)的協(xié)同過濾式推薦算法,機(jī)器學(xué)習(xí)的協(xié)同過濾式推薦算法是通過觀察所有用戶給產(chǎn)品的評(píng)分來推斷每個(gè)用戶的喜好,并向用戶推薦合適的產(chǎn)品。利用MLlib實(shí)現(xiàn)電影推薦1.準(zhǔn)備訓(xùn)練模型數(shù)據(jù)利用MLlib實(shí)現(xiàn)電影推薦用戶評(píng)分文件,即u.data文件利用MLlib實(shí)現(xiàn)電影推薦電影數(shù)據(jù)文件,即u.item文件利用MLlib實(shí)現(xiàn)電影推薦1.將數(shù)據(jù)文件解壓上傳到HDFS/spark/mldata/下(1)上傳到Hadoop01cd/export/data/rz(2)解壓ml-100kyuminstallunzip#如果沒有安裝,需要先安裝unzip–jmk-100k(3)上傳到HDFShadoopfs–put–rml-100k/spark/mkdata/利用MLlib實(shí)現(xiàn)電影推薦2.編寫程序,訓(xùn)練模型(1)采用Spark-Shell讀取u.data數(shù)據(jù)文件,將其轉(zhuǎn)換為RDD$spark-shell--masterlocal[2]scala>valdataRdd=sc.textFile("/spark/mldata/ml-100k/u.data")scala>dataRdd.first()res0:String=1962423881250949(2)使用take()方法提取前三個(gè)字段scala>valdataRdds=dataRdd.map(_.split("\t").take(3))scala>dataRdds.first()res1:Array[String]=Array(196,242,3)利用MLlib實(shí)現(xiàn)電影推薦2.編寫程序,訓(xùn)練模型importorg.apache.spark.mllib.recommendation.Rating(3)將RDD的數(shù)據(jù)轉(zhuǎn)換成Rating類型scala>valratings=dataRdds.map{caseArray(user,movie,rating)=>Rating(user.toInt,movie.toInt,rating.toDouble)}scala>ratings.first()res6:org.apache.spark.mllib.recommendation.Rating=Rating(196,242,3.0)利用MLlib實(shí)現(xiàn)電影推薦2.編寫程序,訓(xùn)練模型(4)使用train()函數(shù)訓(xùn)練模型importorg.apache.spark.mllib.recommendation.ALSscala>valmodel=ALS.train(ratings,50,10,0.01)model:org.apache.spark.mllib.recommendation.MatrixFactorizationModel=org.apache.spark.mllib.recommendation.MatrixFactorizationModel@6580f76c利用MLlib實(shí)現(xiàn)電影推薦3.為用戶推薦多個(gè)電影#定義用戶idscala>valuserid=100#定義推薦數(shù)量scala>valnum=10scala>valtopRecoPro=model.recommendProducts(userid,num)topRecoPro:Array[org.apache.spark.mllib.recommendation.Rating]=Array(Rating(100,207,5.704436943409341),Rating(100,845,4.957373351732721),Rating(100,489,4.955561012970148),Rating(100,242,4.930681946988706),Rating(100,315,4.927258436518516),Rating(100,316,4.905582861372857),Rating(100,313,4.8170984786843265),Rating(100,12,4.795107
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人借款權(quán)益轉(zhuǎn)讓合同模板(2024年版)版B版
- 2025年度幕墻抗風(fēng)抗震加固工程合同范本4篇
- 2025年度文化娛樂品牌授權(quán)使用許可
- 2025年度出租車司機(jī)職業(yè)操守與信息保密合同
- 2025年度墓地陵園墓地使用權(quán)購(gòu)買協(xié)議3篇
- 2025年度肉類產(chǎn)品加工與銷售一體化合同3篇
- 2025年度餐飲加盟店品牌授權(quán)與維護(hù)合同3篇
- 二零二五年度寵物貓寵物用品代理銷售合同3篇
- 2025版基因編輯技術(shù)合作項(xiàng)目建議書編制范本3篇
- 2025年KTV主題房間租賃及定制服務(wù)協(xié)議3篇
- 成長(zhǎng)小說智慧樹知到期末考試答案2024年
- 紅色革命故事《王二小的故事》
- 海洋工程用高性能建筑鋼材的研發(fā)
- 蘇教版2022-2023學(xué)年三年級(jí)數(shù)學(xué)下冊(cè)開學(xué)摸底考試卷(五)含答案與解析
- 英語48個(gè)國(guó)際音標(biāo)課件(單詞帶聲、附有聲國(guó)際音標(biāo)圖)
- GB/T 6892-2023一般工業(yè)用鋁及鋁合金擠壓型材
- 冷庫安全管理制度
- 2023同等學(xué)力申碩統(tǒng)考英語考試真題
- 家具安裝工培訓(xùn)教案優(yōu)質(zhì)資料
- 在雙減政策下小學(xué)音樂社團(tuán)活動(dòng)有效開展及策略 論文
- envi二次開發(fā)素材包-idl培訓(xùn)
評(píng)論
0/150
提交評(píng)論