




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
H13-731V2R1V2R1關(guān)文政/gwx5114522017.11.30新開(kāi)發(fā)第九章SparkMLlib數(shù)據(jù)挖掘?qū)W完本課程后,您將能夠:了解SparkRDD的基本操作;了解SparkMLlib基礎(chǔ)統(tǒng)計(jì)分析;了解SparkMLlib特征提取和轉(zhuǎn)換;了解SparkMLlib分類(lèi)與回歸;了解SparkMLlib聚類(lèi)與降維;了解SparkMLlib關(guān)聯(lián)規(guī)則與推薦算法了解SparkMLlib評(píng)估矩陣。SparkMLlib基礎(chǔ)入門(mén)SparkMLlib簡(jiǎn)介SparkMLlib矩陣向量SparkMLlib基礎(chǔ)統(tǒng)計(jì)分析SparkMLlib特征提取和轉(zhuǎn)換SparkMLlib分類(lèi)與回歸SparkMLlib聚類(lèi)與降維SparkMLlib關(guān)聯(lián)規(guī)則與推薦算法SparkMLlib評(píng)估矩陣SparkMLlib概述MLlib是Spark的機(jī)器學(xué)習(xí)(MachineLearning)庫(kù),旨在簡(jiǎn)化機(jī)器學(xué)習(xí)的工程實(shí)踐工作,并方便擴(kuò)展到更大規(guī)模。MLlib由一些通用的學(xué)習(xí)算法和工具組成,包括分類(lèi)、回歸、聚類(lèi)、協(xié)同過(guò)濾、降維等,同時(shí)還包括底層的優(yōu)化原語(yǔ)和高層的管道API。SparkMLlib算法庫(kù)SparkMllib能夠提供所有類(lèi)型的機(jī)器學(xué)習(xí)算法。分類(lèi)算法回歸算法聚類(lèi)貝葉斯分類(lèi)SVM分類(lèi)邏輯回歸分類(lèi)線(xiàn)性回歸邏輯線(xiàn)性回歸嶺回歸K均值聚類(lèi)LDA主題模型ALS推薦協(xié)同過(guò)濾矩陣向量?jī)?yōu)化計(jì)算矩陣&分布式矩陣向量線(xiàn)性代數(shù)計(jì)算梯度下降算法擬牛頓法最小二乘法決策樹(shù)FPGrowth關(guān)聯(lián)規(guī)則Spark核心概念RDDRDD(ResilientDistributedDatasets)即彈性分布式數(shù)據(jù)集,是一個(gè)只讀的,可分區(qū)的分布式數(shù)據(jù)集。RDD默認(rèn)存儲(chǔ)在內(nèi)存,當(dāng)內(nèi)存不足時(shí),溢寫(xiě)到磁盤(pán)。RDD數(shù)據(jù)以分區(qū)的形式在集群中存儲(chǔ)。RDD具有血統(tǒng)機(jī)制(Lineage),發(fā)生數(shù)據(jù)丟失時(shí),可快速進(jìn)行數(shù)據(jù)恢復(fù)。HDFSSpark集群外部存儲(chǔ)HellosparkHellohadoopChinamoblie“Hellospark”“Hellohadoop”“Chinamobile”“Hello,spark”“Hello,hadoop”“China,mobile”RDD1RDD2RDD屬性RDD是在集群節(jié)點(diǎn)上的不可變的、只讀的、已分區(qū)的集合對(duì)象通過(guò)并行轉(zhuǎn)換的方式來(lái)創(chuàng)建如(map,filter,join等等)失敗自動(dòng)重建可以控制存儲(chǔ)級(jí)別(內(nèi)存、磁盤(pán)等)來(lái)進(jìn)行重用必須是可序列化的RDD特點(diǎn)(內(nèi)部)分區(qū)列表(數(shù)據(jù)塊列表)計(jì)算每個(gè)分片的函數(shù)(根據(jù)父RDD計(jì)算出此RDD)對(duì)父RDD的依賴(lài)列表RDD默認(rèn)是存儲(chǔ)于內(nèi)存,但當(dāng)內(nèi)存不足時(shí),會(huì)spill到disk(設(shè)置StorageLevel來(lái)控制)每個(gè)數(shù)據(jù)分區(qū)的地址(如HDFS),key-value數(shù)據(jù)類(lèi)型分區(qū)器,分區(qū)策略和分區(qū)數(shù)RDD:Lineage和DependencyDependency(依賴(lài))NarrowDependencies是指父RDD的每個(gè)分區(qū)最多被一個(gè)子RDD的一個(gè)分區(qū)所用。WideDependencies是指父RDD的每個(gè)分區(qū)對(duì)應(yīng)一個(gè)子RDD的多個(gè)分區(qū)。Lineage(血統(tǒng)):依賴(lài)的鏈條RDD數(shù)據(jù)集通過(guò)Lineage記住了它是如何從其他RDD中演變過(guò)來(lái)的。RDD的依賴(lài)關(guān)系Dataset簡(jiǎn)介DataSet是一個(gè)由特定域的對(duì)象組成的強(qiáng)類(lèi)型集合,可通過(guò)功能或關(guān)系操作并行轉(zhuǎn)換其中的對(duì)象。DataSet以Catalyst邏輯執(zhí)行計(jì)劃表示,并且數(shù)據(jù)以編碼的二進(jìn)制形式存儲(chǔ),不需要反序列化就可以執(zhí)行sort、filter、shuffle等操作。Dataset是“懶惰”的,只在執(zhí)行action操作時(shí)觸發(fā)計(jì)算。當(dāng)執(zhí)行action操作時(shí),Spark用查詢(xún)優(yōu)化程序來(lái)優(yōu)化邏輯計(jì)劃,并生成一個(gè)高效的并行分布式的物理計(jì)劃。DataFrame介紹
(1)DataFrame是一個(gè)以命名列方式組織的分布式數(shù)據(jù)集,等同于關(guān)系型數(shù)據(jù)庫(kù)中的一個(gè)表。DataFrame與生俱來(lái)就支持讀取最流行的格式,包括JSON文件、Parquet文件和Hive表格。DataFrame還支持從多種類(lèi)型的文件系統(tǒng)中讀取,比如本地文件系統(tǒng)、分布式文件系統(tǒng)(HDFS)以及云存儲(chǔ)(AmazonS3)。同時(shí),配合JDBC,它還可以讀取外部關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)。DataFrame介紹(2)DataFrame:指定列名稱(chēng)的Dataset。DataFrame是Dataset[Row]的特例。RDD[Person]DataFrameRDD、DataFrame與Dataset(1)RDD:優(yōu)點(diǎn):類(lèi)型安全,面向?qū)ο?。缺點(diǎn):序列化和反序列化的性能開(kāi)銷(xiāo)大;GC的性能開(kāi)銷(xiāo),頻繁的創(chuàng)建和銷(xiāo)毀對(duì)象,勢(shì)必會(huì)增加GC。DataFrame:優(yōu)點(diǎn):自帶scheme信息,降低序列化反序列化開(kāi)銷(xiāo)。缺點(diǎn):不是面向?qū)ο蟮?;編譯期不安全。RDD、DataFrame與Dataset(2)Dataset的特點(diǎn):快:大多數(shù)場(chǎng)景下,性能優(yōu)于RDD;Encoders優(yōu)于Kryo或者Java序列化;避免不必要的格式轉(zhuǎn)化。類(lèi)型安全:類(lèi)似于RDD,函數(shù)盡可能編譯時(shí)安全。和DataFrame,RDD互相轉(zhuǎn)化。Dataset具有RDD和DataFrame的優(yōu)點(diǎn),又避免它們的缺點(diǎn)。RDD的算子TransformationTransformation是通過(guò)轉(zhuǎn)換從一個(gè)或多個(gè)RDD生成新的RDD,該操作是lazy的,當(dāng)調(diào)用action算子,才發(fā)起job。典型算子:map、flatMap、filter、reduceByKey等。Action當(dāng)代碼調(diào)用該類(lèi)型算子時(shí),立即啟動(dòng)job。Action操作是從RDD生成最后的計(jì)算結(jié)果典型算子:take、count、saveAsTextFile等。SparkRDD基本操作外部數(shù)據(jù)源valdistFile1=sc.textFile("data.txt")//HDFS目錄下文件valdistFile2=sc.textFile("hdfs://00:9000/input/data.txt")//HDFS文件valdistFile3=sc.textFile(“file:///input/data.txt")//linux本地指定目錄下文件valdistFile4=sc.textFile("/input/data.txt")//HDFS指定目錄下文件注意:textFile可以讀取多個(gè)文件,或者1個(gè)文件夾,也支持壓縮文件、包含通配符的路徑。textFile("/input/001.txt,/input/002.txt")//讀取多個(gè)文件textFile("/input")//讀取目錄textFile("/input/*.txt")//含通配符的路徑textFile("/input/*.gz")//讀取壓縮文件SparkRDD算子-Transformation(1)1)mapmap是對(duì)RDD中的每個(gè)元素都執(zhí)行一個(gè)指定的函數(shù)來(lái)產(chǎn)生一個(gè)新的RDD;RDD之間的元素是一對(duì)一關(guān)系;2)filterFilter是對(duì)RDD元素進(jìn)行過(guò)濾;是經(jīng)過(guò)func函數(shù)后返回值為true的原元素組成,返回一個(gè)新的數(shù)據(jù)集;valrdd1=sc.parallelize(1to9,3)valrdd2=rdd1.map(x=>x*2)rdd2.collectvalrdd3=rdd2.filter(x=>x>10)rdd3.collectres4:Array[Int]=Array(12,14,16,18)SparkRDD算子-Transformation(2)3)flatMapflatMap類(lèi)似于map,但是每一個(gè)輸入元素,會(huì)被映射為0到多個(gè)輸出元素(因此,func函數(shù)的返回值是一個(gè)Seq,而不是單一元素),RDD之間的元素是一對(duì)多關(guān)系;4)mapPartitionsmapPartitions是map的一個(gè)變種。map的輸入函數(shù)是應(yīng)用于RDD中每個(gè)元素,而mapPartitions的輸入函數(shù)是每個(gè)分區(qū)的數(shù)據(jù),也就是把每個(gè)分區(qū)中的內(nèi)容作為整體來(lái)處理的。5)mapPartitionsWithIndexmapPartitionsWithSplit與mapPartitions的功能類(lèi)似,只是多傳入splitindex而已,所有func函數(shù)必需是(Int,Iterator<T>)=>Iterator<U>類(lèi)型。valrdd4=rdd3.flatMap(x=>xto20).collectres5:Array[Int]=Array(12,13,14,15,16,17,18,19,20,14,15,16,17,18,19,20,16,17,18,19,20,18,19,20)SparkRDD算子-Transformation(3)6)samplesample(withReplacement,fraction,seed)是根據(jù)給定的隨機(jī)種子seed,隨機(jī)抽樣出數(shù)量為frac的數(shù)據(jù)。withReplacement:是否放回抽樣;fraction:比例,0.1表示10%;7)unionunion(otherDataset)是數(shù)據(jù)合并,由原數(shù)據(jù)集和otherDataset聯(lián)合而成,返回一個(gè)新的數(shù)據(jù)集。vala=sc.parallelize(1to10000,3)a.sample(false,0.1,0).countvalrdd8=rdd1.union(rdd3)rdd8.collectres14:Array[Int]=Array(1,2,3,4,5,6,7,8,9,12,14,16,18)SparkRDD算子-Transformation(4)8)intersectionintersection(otherDataset)是數(shù)據(jù)交集,包含兩個(gè)數(shù)據(jù)集的交集數(shù)據(jù),返回一個(gè)新的數(shù)據(jù)集;9)distinctdistinct([numTasks]))是數(shù)據(jù)去重,是對(duì)兩個(gè)數(shù)據(jù)集去除重復(fù)數(shù)據(jù),numTasks參數(shù)是設(shè)置任務(wù)并行數(shù)量,返回一個(gè)數(shù)據(jù)集;valrdd9=ersection(rdd1)rdd9.collectres16:Array[Int]=Array(6,1,7,8,2,3,9,4,5)valrdd10=rdd8.union(rdd9).distinctrdd10.collectres19:Array[Int]=Array(12,1,14,2,3,4,16,5,6,18,7,8,9)SparkRDD算子-Transformation(5)10)groupByKeygroupByKey([numTasks])是數(shù)據(jù)分組操作,在一個(gè)由(K,V)對(duì)組成的數(shù)據(jù)集上調(diào)用,返回一個(gè)(K,Seq[V])對(duì)的數(shù)據(jù)集。11)reduceByKeyreduceByKey(func,[numTasks])是數(shù)據(jù)分組聚合操作,在一個(gè)(K,V)對(duì)的數(shù)據(jù)集上使用,返回一個(gè)(K,V)對(duì)的數(shù)據(jù)集,key相同的值,都被使用指定的reduce函數(shù)聚合到一起。valrdd0=sc.parallelize(Array((1,1),(1,2),(1,3),(2,1),(2,2),(2,3)),3)valrdd11=rdd0.groupByKey()rdd11.collectres33:Array[(Int,Iterable[Int])]=Array((1,ArrayBuffer(1,2,3)),(2,ArrayBuffer(1,2,3)))valrdd12=rdd0.reduceByKey((x,y)=>x+y)rdd12.collectres34:Array[(Int,Int)]=Array((1,6),(2,6))SparkRDD算子-Transformation(6)12)aggregateByKeyaggregateByKey(zeroValue:U)(seqOp:(U,T)=>U,combOp:(U,U)=>U)和reduceByKey的不同在于,reduceByKey輸入輸出都是(K,V),而aggregateByKey輸出是(K,U),可以不同于輸入(K,V),aggregateByKey的三個(gè)參數(shù):zeroValue:U,初始值,比如空列表{};seqOp:(U,T)=>U,seq操作符,描述如何將T合并入U(xiǎn),比如如何將item合并到列表;combOp:(U,U)=>U,comb操作符,描述如果合并兩個(gè)U,比如合并兩個(gè)列表;所以aggregateByKey可以看成更高抽象的,更靈活的reduce或group。示例valz=sc.parallelize(List(1,2,3,4,5,6),2)z.aggregate(0)(math.max(_,_),_+_)res40:Int=9valz=sc.parallelize(List((1,3),(1,2),(1,4),(2,3)))z.aggregateByKey(0)(math.max(_,_),_+_)res2:Array[(Int,Int)]=Array((2,3),(1,9))SparkRDD算子-Transformation
(7)13)combineByKeycombineByKey是對(duì)RDD中的數(shù)據(jù)集按照Key進(jìn)行聚合操作。聚合操作的邏輯是通過(guò)自定義函數(shù)提供給combineByKey。combineByKey[C](createCombiner:(V)?C,mergeValue:(C,V)?C,mergeCombiners:(C,C)?C,numPartitions:Int):RDD[(K,C)]把(K,V)類(lèi)型的RDD轉(zhuǎn)換為(K,C)類(lèi)型的RDD,C和V可以不一樣。示例valdata=Array((1,1.0),(1,2.0),(1,3.0),(2,4.0),(2,5.0),(2,6.0))valrdd=sc.parallelize(data,2)valcombine1=bineByKey(createCombiner=(v:Double)=>(v:Double,1),mergeValue=(c:(Double,Int),v:Double)=>(c._1+v,c._2+1),mergeCombiners=(c1:(Double,Int),c2:(Double,Int))=>(c1._1+c2._1,c1._2+c2._2),numPartitions=2)combine1.collectres0:Array[(Int,(Double,Int))]=Array((2,(15.0,3)),(1,(6.0,3)))SparkRDD算子-Transformation(8)14)sortByKeysortByKey([ascending],[numTasks])是排序操作,對(duì)(K,V)類(lèi)型的數(shù)據(jù)按照K進(jìn)行排序,其中K需要實(shí)現(xiàn)Ordered方法。15)joinjoin(otherDataset,[numTasks])是連接操作,將輸入數(shù)據(jù)集(K,V)和另外一個(gè)數(shù)據(jù)集(K,W)進(jìn)行Join,得到(K,(V,W));該操作是對(duì)于相同K的V和W集合進(jìn)行笛卡爾積操作,也即V和W的所有組合;連接操作除join外,還有左連接、右連接、全連接操作函數(shù):leftOuterJoin、rightOuterJoin、fullOuterJoin。valrdd14=rdd0.sortByKey()rdd14.collectres36:Array[(Int,Int)]=Array((1,1),(1,2),(1,3),(2,1),(2,2),(2,3))valrdd15=rdd0.join(rdd0)rdd15.collectSparkRDD算子-Transformation(9)16)cogroupcogroup(otherDataset,[numTasks])是將輸入數(shù)據(jù)集(K,V)和另外一個(gè)數(shù)據(jù)集(K,W)進(jìn)行cogroup,得到一個(gè)格式為(K,Seq[V],Seq[W])的數(shù)據(jù)集。17)cartesiancartesian(otherDataset)是做笛卡爾積:對(duì)于數(shù)據(jù)集T和U進(jìn)行笛卡爾積操作,得到(T,U)格式的數(shù)據(jù)集。valrdd16=rdd0.cogroup(rdd0)rdd16.collectres38:Array[(Int,(Iterable[Int],Iterable[Int]))]=Array((1,(ArrayBuffer(1,2,3),ArrayBuffer(1,2,3))),(2,(ArrayBuffer(1,2,3),ArrayBuffer(1,2,3))))valrdd17=rdd1.cartesian(rdd3)rdd17.collectres39:Array[(Int,Int)]=Array((1,12),(2,12),(3,12),..)SparkRDD算子-Action(1)1)reducereduce(func)是對(duì)數(shù)據(jù)集的所有元素執(zhí)行聚集(func)函數(shù),該函數(shù)必須是可交換的。2)collectcollect是將數(shù)據(jù)集中的所有元素以一個(gè)array的形式返回。3)count,返回?cái)?shù)據(jù)集中元素的個(gè)數(shù)。valrdd1=sc.parallelize(1to9,3)valrdd2=rdd1.reduce(_+_)rdd2:Int=45rdd1.collect()res8:Array[Int]=Array(1,2,3,4,5,6,7,8,9)rdd1.count()res9:Long=9SparkRDD算子-Action(2)4)takeOrderedtakeOrdered(n,[ordering])是返回包含隨機(jī)的n個(gè)元素的數(shù)組,按照順序輸出。5)saveAsTextFile把數(shù)據(jù)集中的元素寫(xiě)到一個(gè)文本文件,Spark會(huì)對(duì)每個(gè)元素調(diào)用toString方法來(lái)把每個(gè)元素存成文本文件的一行。6)countByKey對(duì)于(K,V)類(lèi)型的RDD.返回一個(gè)(K,Int)的map,Int為K的個(gè)數(shù)。7)foreachforeach(func)是對(duì)數(shù)據(jù)集中的每個(gè)元素都執(zhí)行func函數(shù)。rdd1.takeOrdered(4)res16:Array[Int]=Array(1,2,3,4)SparkMLlib簡(jiǎn)介SparkMLlib矩陣向量SparkMLlib基礎(chǔ)入門(mén)SparkMLlib簡(jiǎn)介SparkMLlib矩陣向量SparkMLlib基礎(chǔ)統(tǒng)計(jì)分析SparkMLlib特征提取和轉(zhuǎn)換SparkMLlib分類(lèi)與回歸SparkMLlib聚類(lèi)與降維SparkMLlib關(guān)聯(lián)規(guī)則與推薦算法SparkMLlib評(píng)估矩陣SparkMLlib矩陣向量Breeze:是機(jī)器學(xué)習(xí)和數(shù)值技術(shù)庫(kù),它是sparkMlib的核心,包括線(xiàn)性代數(shù)、數(shù)值技術(shù)和優(yōu)化,是一種通用、功能強(qiáng)大、有效的機(jī)器學(xué)習(xí)方法。SparkMLlib底層的向量、矩陣運(yùn)算使用了Breeze庫(kù),Breeze庫(kù)提供了Vector/Matrix的實(shí)現(xiàn)以及相應(yīng)計(jì)算的接口(Linalg),而MLlib同時(shí)也提供了Vector和Linalg等的實(shí)現(xiàn)。SparkMLlib矩陣向量在項(xiàng)目中使用Breeze庫(kù)時(shí),需要導(dǎo)入相關(guān)包:importbreeze.linalg._importbreeze.numerics._API方法說(shuō)明網(wǎng)站:/api/breeze/index.html#breeze.linalg.packageBreeze功能函數(shù)(1)矩陣構(gòu)造函數(shù)Breeze函數(shù)功能
函數(shù)示例全0矩陣DenseMatrix.zeros[Double](2,3)全0向量DenseVector.zeros[Double](3)全1向量DenseVector.ones[Double](3)按數(shù)值填充向量DenseVector.fill(3){1.0}生成隨機(jī)向量DenseVector.range(start,end,step),
Vector.rangeD(start,end,step)線(xiàn)性等分向量DenseVector.linspace(start,end,numvals)單位矩陣DenseMatr.eye[Double](3)對(duì)角矩陣Diag(DenseVector(1.0,2.0,3.0))按照行創(chuàng)建矩陣DenseMatrix((1.0,2.0),(3.0,4.0))按照行創(chuàng)建向量DenseVector(1,2,3,4)向量轉(zhuǎn)置DenseVector(1,2,3,4).t從函數(shù)創(chuàng)建向量DenseVector.tabulate(3){i
=>
i*2}Breeze功能函數(shù)(2)獲取矩陣子集函數(shù)Breeze函數(shù)功能
操作示例獲取指定位置a(0,1)獲取向量子集a(1
to
4),
a(1
until
5),
a.slice(1,5)按照指定步長(zhǎng)取子集a(5
to
0
by
-1)按照開(kāi)始位置至結(jié)尾取子集a(1
to
-1)獲取最后一個(gè)元素a(-1)獲取矩陣指定列a(::,
2)Breeze功能函數(shù)(3)矩陣元素訪(fǎng)問(wèn)及操作函數(shù)Breeze函數(shù)功能操作示例調(diào)整矩陣形狀a.reshape(3,2)矩陣轉(zhuǎn)成向量a.toDenseVector(Makes
copy)復(fù)制下三角lowerTriangular(a)復(fù)制上三角upperTriangular(a)矩陣復(fù)制a.copy取對(duì)角線(xiàn)元素diag(a)子集賦數(shù)值a(1
to
4)
:=
5.0子集賦向量a(1
to
4)
:=
DenseVector(1.0,2.0,3.0)矩陣賦值a(1
to
3,
1
to
3)
:=
5.0矩陣列賦值a(::,
2)
:=
5.0垂直連接矩陣DenseMatrix.vertcat(a,b)橫向連接矩陣DenseMatrix.horzcat(a,b)向量連接DenseVector.vertcat(a,b)Breeze功能函數(shù)(4)矩陣數(shù)值計(jì)算函數(shù)Breeze功能函數(shù)操作示例元素加法a
+
b元素乘法a
:*
b元素除法a
:/
b元素比較a
:<
b元素相等a
:==
b元素追加a
:+=
1.0元素追乘a
:*=
2.0向量點(diǎn)積a
dot
b,
a.t
*
bT元素最大值max(a)元素最大值及位置argmax(a)Breeze功能函數(shù)(5)矩陣求和函數(shù)矩陣布爾運(yùn)算函數(shù)Breeze函數(shù)功能操作示例元素求和sum(a)每一列求和sum(a,
axis._0),
sum(a(::,*))每一行求和sum(a,axis._1),
sum(a(*,
::))對(duì)角線(xiàn)元素和trace(a)累積和accumulate(a)Breeze函數(shù)功能操作示例元素與操作a
:&
b元素或操作a
:|
b元素非操作!a任意元素非零any(a)所有元素非零all(a)Breeze功能函數(shù)(6)矩陣線(xiàn)性代數(shù)計(jì)算函數(shù)Breeze函數(shù)功能操作示例線(xiàn)性求解a
\
b轉(zhuǎn)置a.t求行列式det(a)求逆inv(a)求偽逆pinv(a)求范數(shù)norm(a)特征值和特征向量eigSym(a)特征值val(er,ei,_)
=
eig(a)(實(shí)部與虛部分開(kāi))特征向量eig(a)._3奇異值分解val
svd.SVD(u,s,v)
=
svd(a)求矩陣的秩rank(a)矩陣長(zhǎng)度a.length矩陣行數(shù)a.rows矩陣列數(shù)a.colsBreeze功能函數(shù)(7)矩陣取整函數(shù)Breeze函數(shù)功能操作示例四舍五入round(a)最小整數(shù)ceil(a)最大整數(shù)floor(a)符號(hào)函數(shù)signum(a)取正數(shù)abs(a)SparkMLlib基礎(chǔ)入門(mén)SparkMLlib基礎(chǔ)統(tǒng)計(jì)分析BasicStatistics簡(jiǎn)介Summery
statistic(匯總統(tǒng)計(jì))Correlations(相關(guān)系數(shù))Stratified
sampling(分層抽樣)Hypothesis
Testing(假設(shè)檢驗(yàn))Random
data
generation(隨機(jī)數(shù)生成)Kernel
density
estimation(核密度估計(jì))BasicStatistics簡(jiǎn)介BasicStatistic是SparkMLlib提供專(zhuān)門(mén)用于進(jìn)行大數(shù)據(jù)集群上的統(tǒng)計(jì)分析工具。BasicStatistic為大數(shù)據(jù)集中數(shù)據(jù)預(yù)處理中數(shù)據(jù)的分析提供支撐方法,包括Summarystatistics,Correlations,Stratifiedsampling,Hypothesistesting等數(shù)據(jù)分析方法。SparkMLlib基礎(chǔ)入門(mén)SparkMLlib基礎(chǔ)統(tǒng)計(jì)分析BasicStatistics簡(jiǎn)介Summery
statistic(匯總統(tǒng)計(jì))Correlations(相關(guān)系數(shù))Stratified
sampling(分層抽樣)Hypothesis
Testing(假設(shè)檢驗(yàn))Random
data
generation(隨機(jī)數(shù)生成)Kernel
density
estimation(核密度估計(jì))Summerystatistic(匯總統(tǒng)計(jì))匯總統(tǒng)計(jì)主要是對(duì)RDD數(shù)據(jù)集進(jìn)行整體的統(tǒng)計(jì)性描述,主要通過(guò)調(diào)用colStats函數(shù)返回一個(gè)MultivariateStatisticalSummary對(duì)象,包括:count:long(大小)
max:vector
(每列的最大值)mean:vector(樣本均值)
min:vector(每列最小值)
normL1:vector(每列的L1范數(shù))
normL2:vector(每列的歐幾里得數(shù))numNonzeros:Vector(每列非零向量的個(gè)數(shù))
Variance:vector(樣本方差)SparkMLlib中Summarystatistics示例SparkMLlib中統(tǒng)計(jì)性描述的樣例代碼:importorg.apache.spark.mllib.linalg.Vectorsimportorg.apache.spark.mllib.stat.{MultivariateStatisticalSummary,Statistics}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)))//Computecolumnsummarystatistics.//統(tǒng)計(jì)性模型分析valsummary:MultivariateStatisticalSummary=Statistics.colStats(observations)println(summary.mean)//adensevectorcontainingthemeanvalueforeachcolumnprintln(summary.variance)//column-wisevarianceprintln(summary.numNonzeros)SparkMLlib基礎(chǔ)入門(mén)SparkMLlib基礎(chǔ)統(tǒng)計(jì)分析BasicStatistics簡(jiǎn)介Summery
statistic(匯總統(tǒng)計(jì))Correlations(相關(guān)系數(shù))Stratified
sampling(分層抽樣)Hypothesis
Testing(假設(shè)檢驗(yàn))Random
data
generation(隨機(jī)數(shù)生成)Kernel
density
estimation(核密度估計(jì))Correlations(相關(guān)系數(shù))Correlations,相關(guān)度量,是反映變量之間相關(guān)關(guān)系密切程度的統(tǒng)計(jì)指標(biāo)。相關(guān)系數(shù)絕對(duì)值越大(值越接近1或者-1),則二者關(guān)系越密切,越可進(jìn)行線(xiàn)性擬合;當(dāng)取值為0表示不相關(guān),取值為(0~-1]表示負(fù)相關(guān),取值為(0,
1]表示正相關(guān)。目前Spark支持兩種相關(guān)性系數(shù):皮爾遜相關(guān)系數(shù)(pearson)和斯皮爾曼等級(jí)相關(guān)系數(shù)(spearman)。SparkMLlib中Correlations示例SparkMLlib中相關(guān)性分析的樣例代碼:importorg.apache.spark.SparkContextimportorg.apache.spark.mllib.linalg._importorg.apache.spark.rdd.RDDimportorg.apache.spark.mllib.stat.StatisticsvalseriesX:RDD[Double]=sc.parallelize(Array(1,2,3,3,5))
//aseriesvalseriesY:RDD[Double]=sc.parallelize(Array(11,22,33,33,555))
//musthave//thesame//numberofpartitionsandcardinalityasseriesX//computethecorrelationusingPearson'smethod.Enter"spearman"http://forSpearman'smethod.Ifamethodisnotspecified,Pearson's//methodwillbeusedbydefault.valcorrelation:Double=Statistics.corr(seriesX,seriesY,"pearson")SparkMLlib基礎(chǔ)入門(mén)SparkMLlib基礎(chǔ)統(tǒng)計(jì)分析BasicStatistics簡(jiǎn)介Summery
statistic(匯總統(tǒng)計(jì))Correlations(相關(guān)系數(shù))Stratified
sampling(分層抽樣)Hypothesis
Testing(假設(shè)檢驗(yàn))Random
data
generation(隨機(jī)數(shù)生成)Kernel
density
estimation(核密度估計(jì))StratifiedSampling(分層抽樣)Stratifiedsampling是一個(gè)根據(jù)RDD的Key-Value來(lái)抽樣的功能,可以為每個(gè)key設(shè)置其被選中的概率。spark對(duì)于分層抽樣支持兩個(gè)版本sampleByKey和sampleByKeyExact。使用sampleByKeyExact方法進(jìn)行采樣,該方法資源消耗較sampleByKey更大,但采樣后的大小與預(yù)期大小更接近。SparkMLlib中Stratified
sampling示例SparkMLlib中分層抽樣的樣例代碼:importorg.apache.spark.SparkContextimportorg.apache.spark.SparkContext._importorg.apache.spark.rdd.PairRDDFunctionsvaldata=...//anRDD[(K,V)]valfractions:Map[String,Double]=Map("female"->0.6,"male"->0.4)
//設(shè)定抽樣格式及比例//withReplacementfalse表示不重復(fù)抽樣//Getanexactsamplefromeachstratum//依據(jù)key進(jìn)行抽樣valapproxSample=data.sampleByKey(withReplacement=false,fractions)valexactSample=data.sampleByKeyExact(withReplacement=false,fractions)approxSample.collect().foreach{println}exactSample.collect().foreach{println}SparkMLlib基礎(chǔ)入門(mén)SparkMLlib基礎(chǔ)統(tǒng)計(jì)分析BasicStatistics簡(jiǎn)介Summery
statistic(匯總統(tǒng)計(jì))Correlations(相關(guān)系數(shù))Stratified
sampling(分層抽樣)Hypothesis
Testing(假設(shè)檢驗(yàn))Random
data
generation(隨機(jī)數(shù)生成)Kernel
density
estimation(核密度估計(jì))Hypothesis
Testing(假設(shè)檢驗(yàn))假設(shè)檢驗(yàn)用于確定結(jié)果是否具有統(tǒng)計(jì)學(xué)意義,無(wú)論該結(jié)果是否偶然發(fā)生。SparkMLlib目前支持Pearson的卡方(χ2)檢驗(yàn),以獲得適合度和獨(dú)立性。適合度測(cè)試輸入數(shù)據(jù)類(lèi)型的Vector,而獨(dú)立性測(cè)試輸入數(shù)據(jù)類(lèi)型Matrix。SparkMLlib還支持輸入類(lèi)型RDD[LabeledPoint],通過(guò)卡方檢驗(yàn)來(lái)啟用特征選擇。SparkMLlib中Hypothesis
Testing示例SparkMLlib中假設(shè)檢驗(yàn)的樣例代碼:importorg.apache.spark.SparkContextimportorg.apache.spark.mllib.linalg._importorg.apache.spark.mllib.regression.LabeledPointimportorg.apache.spark.mllib.stat.Statisticsvalvec:Vector=Vectors.dense(0.1,0.15,0.2,0.3,0.25)
valgoodnessOfFitTestResult=Statistics.chiSqTest(vec)println(goodnessOfFitTestResult)//總結(jié)p值和自由度valmat:Matrix=Matrices.dense(3,2,Array(1.0,3.0,5.0,2.0,4.0,6.0))
valindependenceTestResult=Statistics.chiSqTest(mat)//卡方檢驗(yàn)println(independenceTestResult)//summaryofthetestincludingthep-value,degreesoffreedom...valobs:RDD[LabeledPoint]=sc.parallelize(Seq(LabeledPoint(1.0,Vectors.dense(1.0,0.0,3.0)),LabeledPoint(1.0,Vectors.dense(1.0,2.0,0.0)),LabeledPoint(-1.0,Vectors.dense(-1.0,0.0,-0.5))))//(feature,label)數(shù)值對(duì).valfeatureTestResults:Array[ChiSqTestResult]=Statistics.chiSqTest(obs)vari=1SparkMLlib基礎(chǔ)入門(mén)SparkMLlib基礎(chǔ)統(tǒng)計(jì)分析BasicStatistics簡(jiǎn)介Summery
statistic(匯總統(tǒng)計(jì))Correlations(相關(guān)系數(shù))Stratified
sampling(分層抽樣)Hypothesis
Testing(假設(shè)檢驗(yàn))Random
data
generation(隨機(jī)數(shù)生成)Kernel
density
estimation(核密度估計(jì))Random
data
generation(隨機(jī)數(shù)生成)隨機(jī)數(shù)據(jù)生成對(duì)于隨機(jī)算法,原型設(shè)計(jì)和性能測(cè)試很有用。SparkMLlib支持使用獨(dú)立同分布(independentidenticallydistributed,IID)
生成隨機(jī)RDD。從給定分布繪制的值服從分布的類(lèi)型包括:均勻,標(biāo)準(zhǔn)正?;虿此?。SparkMLlib中Random
data
generation示例SparkMLlib中RandomRDD提供庫(kù)方法來(lái)生成隨機(jī)RDD或向量RDD。以下示例生成隨機(jī)RDD,其值遵循標(biāo)準(zhǔn)正態(tài)分布N(0,1),然后映射到N(1,4)。importorg.apache.spark.SparkContextimportorg.apache.spark.mllib.random.RandomRDDs._//GeneratearandomdoubleRDDthatcontains1millioni.i.d.valuesdrawnfromthe//standardnormaldistribution`N(0,1)`,evenlydistributedin10partitions.valu=normalRDD(sc,1000000L,10)//標(biāo)準(zhǔn)正態(tài)分布的RDD//ApplyatransformtogetarandomdoubleRDDfollowing`N(1,4)`.valv=u.map(x=>1.0+2.0*x)v.collect.foreach(println)SparkMLlib基礎(chǔ)入門(mén)SparkMLlib基礎(chǔ)統(tǒng)計(jì)分析BasicStatistics簡(jiǎn)介Summery
statistic(匯總統(tǒng)計(jì))Correlations(相關(guān)系數(shù))Stratified
sampling(分層抽樣)Hypothesis
Testing(假設(shè)檢驗(yàn))Random
data
generation(隨機(jī)數(shù)生成)Kernel
density
estimation(核密度估計(jì))Kernel
density
estimation(核密度估計(jì))核心密度估計(jì)是一種用于可視化經(jīng)驗(yàn)概率分布的技術(shù),不需要對(duì)所觀察到的樣本的特定分布進(jìn)行假設(shè)。它主要是對(duì)給定的一組數(shù)據(jù)樣本點(diǎn)的隨機(jī)變量的概率密度函數(shù)的估計(jì)。通過(guò)將特定點(diǎn)的經(jīng)驗(yàn)分布的PDF(密度分布函數(shù))表示為以每個(gè)樣本為中心的正態(tài)分布的PDF的平均值來(lái)實(shí)現(xiàn)該估計(jì)。主要用于進(jìn)行原始數(shù)據(jù)的理解。非參數(shù)估計(jì)核密度估計(jì)(Kerneldensityestimation),是一種用于估計(jì)概率密度函數(shù)的非參數(shù)方法,為獨(dú)立同分布F的n個(gè)樣本點(diǎn),設(shè)其概率密度函數(shù)為f,核密度估計(jì)為以下:K(.)為核函數(shù)(非負(fù)、積分為1,符合概率密度性質(zhì),并且均值為0),h>0為一個(gè)平滑參數(shù),稱(chēng)作帶寬(bandwidth),也看到有人叫窗口。Kh(x)=1/hK(x/h).為縮放核函數(shù)(scaledKernel)。SparkMLlib中核密度估計(jì)示例SparkMLlib中核密度估計(jì)的樣例代碼:importorg.apache.spark.mllib.stat.KernelDensityimportorg.apache.spark.rdd.RDDvaldata:RDD[Double]=sc.parallelize(Seq(1,1,1,2,3,4,5,5,6,7,8,9,9))
//anRDDofsampledata//ConstructthedensityestimatorwiththesampledataandastandarddeviationfortheGaussian//kernels//設(shè)置箱,子寬度為3的概率密度估計(jì)valkd=newKernelDensity().setSample(data).setBandwidth(3.0)//Finddensityestimatesforthegivenvaluesvaldensities=kd.estimate(Array(-1.0,2.0,5.0))#輸出結(jié)果:Array[Double]=Array(0.04145944023341913,0.07902016933085627,0.08962920127312339)SparkMLlib基礎(chǔ)入門(mén)SparkMLlib基礎(chǔ)統(tǒng)計(jì)分析SparkMLlib特征提取和轉(zhuǎn)換TF-IDFWord2VecStandardScaler,MinMaxScaler,MaxAbsScalerNormalizerChiSqSelectorElementwiseProductTF-IDF-概述TF-IDF(Termfrequency-inversedocumentfrequency)是文本挖掘中一種廣泛使用的特征向量化方法。TF-IDF反映了語(yǔ)料中單詞對(duì)文檔的重要程度。假設(shè)單詞用t表示,F(xiàn)表示頻度,文檔用d表示,語(yǔ)料用D表示,那么文檔頻度DF(t,D)是包含單詞t的文檔數(shù)。如果僅使用詞的頻率來(lái)衡量重要性,則介詞、人稱(chēng)代詞等詞會(huì)對(duì)文檔的描述產(chǎn)生很重要的作用,而這些詞實(shí)質(zhì)上對(duì)文檔的描述并沒(méi)有決定性的作用,例如“a”,“the”,“of”,“we”和“I”。因此如果術(shù)語(yǔ)在語(yǔ)料庫(kù)中經(jīng)常出現(xiàn),則表示它不包含有關(guān)特定文檔的特殊信息。TF-IDF-公式逆文檔頻度(IDF)是單詞攜帶信息量的數(shù)值度量。其中|D|是語(yǔ)料中的文檔總數(shù),DF(t,D)是包含單詞t的文檔數(shù),文檔用d表示,語(yǔ)料用D表示。由于使用了log計(jì)算,如果單詞在所有文檔中出現(xiàn),那么IDF就等于0。注意這里做了平滑處理(+1操作),防止單詞沒(méi)有在語(yǔ)料中出現(xiàn)時(shí)IDF計(jì)算中除0。TF-IDF度量是TF和IDF的簡(jiǎn)單相乘:MLlib中詞頻統(tǒng)計(jì)的實(shí)現(xiàn)使用了hashingtrick(散列技巧),也就是使用哈希函數(shù)將原始特征映射到一個(gè)數(shù)字索引。然后基于這個(gè)索引來(lái)計(jì)算詞頻。SparkMLlib中TF-IDF示例(1)SparkMLlib中樣例代碼:在spark中TF和IDF的實(shí)現(xiàn)是HashingTF和IDF。HashingTF以RDD為輸入。importorg.apache.spark.rdd.RDDimportorg.apache.spark.SparkContextimportorg.apache.spark.mllib.feature.HashingTFimportorg.apache.spark.mllib.linalg.Vectorimportorg.apache.spark.mllib.feature.IDFvalsc:SparkContext=...//讀取文檔數(shù)據(jù)保存到RDD:documents中valdocuments:RDD[Seq[String]]=sc.textFile("...").map(_.split("").toSeq)valhashingTF=newHashingTF()//獲取文檔數(shù)據(jù)的單詞頻度矩陣valtf:RDD[Vector]=hashingTF.transform(documents)//依據(jù)tf計(jì)算文檔的IDF值validf=newIDF().fit(tf)//依據(jù)idf和tf計(jì)算文檔的tfidf值valtfidf:RDD[Vector]=idf.transform(tf)SparkMLlib中TF-IDF示例(2)在SparkMLlib中IDF可以設(shè)置文檔的最低頻度,用于過(guò)濾少于最小數(shù)量的文檔中出現(xiàn)的術(shù)語(yǔ),設(shè)置參數(shù)為minDocFreq。importorg.apache.spark.rdd.RDDimportorg.apache.spark.SparkContextimportorg.apache.spark.mllib.feature.HashingTFimportorg.apache.spark.mllib.linalg.Vectorimportorg.apache.spark.mllib.feature.IDF//讀取文檔數(shù)據(jù)保存到RDD:documents中valdocuments:RDD[Seq[String]]=sc.textFile("...").map(_.split("").toSeq)valhashingTF=newHashingTF()//獲取文檔數(shù)據(jù)的單詞頻度矩陣valtf:RDD[Vector]=hashingTF.transform(documents)//依據(jù)tf計(jì)算文檔的IDF值//設(shè)置最小文檔數(shù)minDocFreq,用于過(guò)濾不滿(mǎn)足頻率要求的文檔validf=newIDF(minDocFreq=2).fit(tf)valtfidf:RDD[Vector]=idf.transform(tf)SparkMLlib基礎(chǔ)入門(mén)SparkMLlib基礎(chǔ)統(tǒng)計(jì)分析SparkMLlib特征提取和轉(zhuǎn)換TF-IDFWord2VecStandardScaler,MinMaxScaler,MaxAbsScalerNormalizerChiSqSelectorElementwiseProductWord2Vec
-概述Word2Vec用于進(jìn)行文本分布式向量化算法。分布式表示的主要優(yōu)點(diǎn)是類(lèi)似的單詞在向量空間中很接近,能使得對(duì)新穎模式的推廣更容易,并且模型估計(jì)更加穩(wěn)健。分布式向量化表示被證明在許多自然語(yǔ)言處理應(yīng)用中是有用的,例如命名實(shí)體識(shí)別,消歧,解析,標(biāo)記和機(jī)器翻譯。Word2Vec
-原理
SparkMLlib中Word2Vec示例SparkMLlib中Word2Vec樣例代碼importorg.apache.spark._importorg.apache.spark.rdd._importorg.apache.spark.SparkContext._importorg.apache.spark.mllib.feature.{Word2Vec,Word2VecModel}valinput=sc.textFile("text8").map(line=>line.split("").toSeq)valword2vec=newWord2Vec()valmodel=word2vec.fit(input)//
china為詞向量,40表示的是查找的與改詞同義的40個(gè)詞valsynonyms=model.findSynonyms(“china”,40)for((synonym,cosineSimilarity)<-synonyms){
println(s“$synonym$cosineSimilarity”)//輸出同義詞和相似度}//Saveandloadmodelmodel.save(sc,"myModelPath")valsameModel=Word2VecModel.load(sc,"myModelPath")SparkMLlib基礎(chǔ)入門(mén)SparkMLlib基礎(chǔ)統(tǒng)計(jì)分析SparkMLlib特征提取和轉(zhuǎn)換TF-IDFWord2VecStandardScaler,MinMaxScaler,MaxAbsScalerNormalizerChiSqSelectorElementwiseProduct數(shù)據(jù)標(biāo)準(zhǔn)化回顧數(shù)據(jù)歸一化是數(shù)據(jù)標(biāo)準(zhǔn)化的一種典型做法,即將數(shù)據(jù)統(tǒng)一映射到[0,1]區(qū)間上;數(shù)據(jù)的標(biāo)準(zhǔn)化是指將數(shù)據(jù)按照比例縮放,使之落入一個(gè)特定的區(qū)間。例如,當(dāng)所有特征具有單位方差和/或零均值時(shí),支持向量機(jī)的RBF內(nèi)核或L1和L2正則化線(xiàn)性模型通常工作得更好。標(biāo)準(zhǔn)化可以在優(yōu)化過(guò)程中提高收斂速度,并且還可以防止在模型訓(xùn)練期間對(duì)具有非常大的差異的特征施加過(guò)大的影響。SparkMLlib中StandardScaler示例SparkMLlib中StandardScaler樣例代碼importorg.apache.spark.SparkContext._importorg.apache.spark.mllib.feature.StandardScalerimportorg.apache.spark.mllib.linalg.Vectorsimportorg.apache.spark.mllib.util.MLUtilsvaldata=MLUtils.loadLibSVMFile(sc,"data/mllib/sample_libsvm_data.txt")//對(duì)數(shù)據(jù)集進(jìn)行標(biāo)準(zhǔn)化valscaler1=newStandardScaler().fit(data.map(x=>x.features))//設(shè)置withMean使均值對(duì)數(shù)據(jù)去中心化處理,withStd使用標(biāo)準(zhǔn)差進(jìn)行數(shù)據(jù)的縮放,采用Z-Score標(biāo)準(zhǔn)化valscaler2=newStandardScaler(withMean=true,withStd=true).fit(data.map(x=>x.features))//scaler3isanidenticalmodeltoscaler2,andwillproduceidenticaltransformationsvalscaler3=newStandardScalerModel(scaler2.std,scaler2.mean)//data1只進(jìn)行標(biāo)準(zhǔn)差進(jìn)行縮放處理,數(shù)據(jù)比較稀疏,容易出現(xiàn)0均值的風(fēng)險(xiǎn)valdata1=data.map(x=>(x.label,scaler1.transform(x.features)))//data2進(jìn)行了均值化和方差縮放,數(shù)據(jù)密集程度較好.valdata2=data.map(x=>(x.label,scaler2.transform(Vectors.dense(x.features.toArray))))SparkMLlib中StandardScaler參數(shù)說(shuō)明StandardScaler在Spark中具有以下參數(shù):withMean默認(rèn)為False。在縮放之前使用均值將數(shù)據(jù)去中心化處理,構(gòu)建一個(gè)密集的輸出。withStd默認(rèn)為T(mén)rue。將數(shù)據(jù)縮放到單位標(biāo)準(zhǔn)偏差。SparkMLlib中MinMaxScaler示例SparkMLlib中MinMaxScaler樣例代碼importorg.apache.spark.ml.feature.MinMaxScalerimportorg.apache.spark.ml.linalg.VectorsvaldataFrame=spark.createDataFrame(Seq(
(0,Vectors.dense(1.0,0.1,-1.0)),
(1,Vectors.dense(2.0,1.1,1.0)),
(2,Vectors.dense(3.0,10.1,3.0)))).toDF("id","features")//配置MinMaxScaler數(shù)據(jù)標(biāo)準(zhǔn)化valscaler=newMinMaxScaler().setInputCol("features").setOutputCol("scaledFeatures")//ComputesummarystatisticsandgenerateMinMaxScalerModelvalscalerModel=scaler.fit(dataFrame)//rescaleeachfeaturetorange[min,max].valscaledData=scalerModel.transform(dataFrame)println(s"Featuresscaledtorange:[${scaler.getMin},${scaler.getMax}]")scaledData.select("features","scaledFeatures").show()SparkMLlib中MinMaxScaler參數(shù)說(shuō)明MinMaxScaler轉(zhuǎn)換Vector行的數(shù)據(jù)集,將每個(gè)要素重新縮放到特定范圍(通常為[0,1])。它需要參數(shù):min:默認(rèn)為0.0。轉(zhuǎn)換后的下限,由所有功能共享。max:默認(rèn)為1.0。轉(zhuǎn)換后的上限,由所有功能共享。MinMaxScaler計(jì)算數(shù)據(jù)集的摘要統(tǒng)計(jì)信息并生成一個(gè)MinMaxScalerModel。然后,模型可以單獨(dú)轉(zhuǎn)換每個(gè)特征,使其處于給定范圍內(nèi)。SparkMLlib中MaxAbsScaler特征回顧MaxAbsScaler轉(zhuǎn)換Vector行的數(shù)據(jù)集,通過(guò)除以每個(gè)要素中的最大絕對(duì)值,將每個(gè)要素重新縮放到范圍[-1,1]。它不會(huì)居中數(shù)據(jù),因此不會(huì)破壞任何稀疏性。SparkMLlib中MaxAbsScaler示例SparkMllib中MaxAbsScaler樣例代碼importorg.apache.spark.ml.feature.MaxAbsScalerimportorg.apache.spark.ml.linalg.VectorsvaldataFrame=spark.createDataFrame(Seq(
(0,Vectors.dense(1.0,0.1,-8.0)),
(1,Vectors.dense(2.0,1.0,-4.0)),
(2,Vectors.dense(4.0,10.0,8.0)))).toDF("id","features")//配置最大絕對(duì)值縮放模型,配置輸入數(shù)據(jù)和輸出數(shù)據(jù)valscaler=newMaxAbsScaler().setInputCol("features").setOutputCol("scaledFeatures")//計(jì)算統(tǒng)計(jì)性描述信息,同時(shí)獲取最大絕對(duì)值的縮放模型//ComputesummarystatisticsandgenerateMaxAbsScalerModelvalscalerModel=scaler.fit(dataFrame)//rescaleeachfeaturetorange[-1,1]valscaledData=scalerModel.transform(dataFrame)scaledData.select("features","scaledFeatures").show()SparkMLlib基礎(chǔ)入門(mén)SparkMLlib基礎(chǔ)統(tǒng)計(jì)分析SparkMLlib特征提取和轉(zhuǎn)換TF-IDFWord2VecStandardScaler,MinMaxScaler,MaxAbsScalerNormalizerChiSqSelectorElementwiseProductNormalizer回顧-原理正則化在監(jiān)督學(xué)習(xí)和無(wú)監(jiān)督學(xué)習(xí)算法的模型訓(xùn)練中被廣泛使用,而正則化的具體體現(xiàn)就是范數(shù),主要用于對(duì)數(shù)據(jù)進(jìn)行規(guī)范化處理。L0范數(shù):向量中非零元素的個(gè)數(shù)。L1范數(shù):向量中各元素的絕對(duì)值之和。L2范數(shù):向量中各元素平方和。SparkMLlib中Normalizer正則化SparkMLlib中Normalizer樣例代碼importorg.apache.spark.SparkContext._importorg.apache.spark.mllib.feature.Normalizerimportorg.apache.spark.mllib.linalg.Vectorsimportorg.apache.spark.mllib.util.MLUtilsvaldata=MLUtils.loadLibSVMFile(sc,"data/mllib/sample_libsvm_data.txt")//正則化模型配置,默認(rèn)情況下是L2正則化valnormalizer1=newNormalizer()//設(shè)置p為正無(wú)窮,則認(rèn)為是L1正則化valnormalizer2=newNormalizer(p=Double.PositiveInfinity)//Eachsampleindata1willbenormalizedusing$L^2$norm.valdata1=data.map(x=>(x.label,normalizer1.transform(x.features)))////Eachsampleindata2willbenormalizedusing$L^\infty$norm.valdata2=data.map(x=>(x.label,normalizer2.transform(x.features)))SparkMLlib基礎(chǔ)入門(mén)SparkMLlib基礎(chǔ)統(tǒng)計(jì)分析SparkMLlib特征提取和轉(zhuǎn)換TF-IDFWord2VecStandardScaler,MinMaxScaler,MaxAbsScalerNormalizerChiSqSelectorElementwiseProductChiSquared相關(guān)檢驗(yàn)原理回顧假設(shè)??有??個(gè)不同值??_1,??_2,…,??_??,??有??個(gè)不同值??_1,??_2,…,??_??,??和??描述的數(shù)據(jù)元組可以用一個(gè)相依表顯示,其中??的??個(gè)值構(gòu)成列,??的??個(gè)值構(gòu)成行。令(??_??,??_??)表示屬性??取值??_??、屬性??取值??_??的聯(lián)合事件,即(??=??_??,??=??_??)。??^2值(又稱(chēng)Pearson統(tǒng)計(jì)量)可以用下式計(jì)算:其中??_????是聯(lián)合事件,(??_??,??_??)的觀測(cè)頻度,而??_????是(??_??,??_??)的期望頻度,可以用下式計(jì)算:
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Office 應(yīng)用培訓(xùn)課件
- 洗車(chē)出租合同范本
- 浙江國(guó)企招聘2024寧波市奉化區(qū)文化旅游集團(tuán)有限公司招聘2人筆試參考題庫(kù)附帶答案詳解
- 進(jìn)口酒銷(xiāo)售合同范本
- 浙江國(guó)企招聘2024麗水經(jīng)濟(jì)技術(shù)開(kāi)發(fā)區(qū)國(guó)有企業(yè)公開(kāi)招聘19人筆試參考題庫(kù)附帶答案詳解
- 2025至2030年中國(guó)光六角螺栓數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)人物雕刻產(chǎn)品數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 肝硬化患者護(hù)理
- 二零二五年度客戶(hù)協(xié)議封面圖片定制、印刷、市場(chǎng)拓展合同
- 2025年中國(guó)紙燈籠市場(chǎng)調(diào)查研究報(bào)告
- 2024年無(wú)錫工藝職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 劇本殺范本完整版
- 北師大版一年級(jí)語(yǔ)文下冊(cè)第一單元元宵節(jié)《1元宵節(jié)》
- 2024年全球協(xié)作機(jī)器人產(chǎn)業(yè)發(fā)展白皮書(shū)
- 消防設(shè)施維保過(guò)程風(fēng)險(xiǎn)及保障措施
- 智能交通系統(tǒng)概論 課件全套 朱文興 第1-10章 緒論 - 城市交通子區(qū)控制系統(tǒng)
- 一鍵自動(dòng)生成spccpkmsappk數(shù)據(jù)工具
- 2024年湖南省中考英語(yǔ)真題卷及答案解析
- 2024年安防監(jiān)控系統(tǒng)技術(shù)標(biāo)準(zhǔn)與規(guī)范
- 作業(yè)區(qū)鐵路專(zhuān)用線(xiàn)工程項(xiàng)目可行性研究報(bào)告
- 2024年黑龍江省綏化市中考物理試題含答案
評(píng)論
0/150
提交評(píng)論