05-項(xiàng)目五:Spark MLlib-機(jī)器學(xué)習(xí)庫_第1頁
05-項(xiàng)目五:Spark MLlib-機(jī)器學(xué)習(xí)庫_第2頁
05-項(xiàng)目五:Spark MLlib-機(jī)器學(xué)習(xí)庫_第3頁
05-項(xiàng)目五:Spark MLlib-機(jī)器學(xué)習(xí)庫_第4頁
05-項(xiàng)目五:Spark MLlib-機(jī)器學(xué)習(xí)庫_第5頁
已閱讀5頁,還剩218頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Spark大數(shù)據(jù)技術(shù)與應(yīng)用案例教程主講教師:目錄項(xiàng)目一Spark入門項(xiàng)目二SparkRDD——彈性分布式數(shù)據(jù)集項(xiàng)目三SparkSQL——結(jié)構(gòu)化數(shù)據(jù)處理項(xiàng)目四SparkStreaming——實(shí)時(shí)計(jì)算框架目錄項(xiàng)目五SparkMLlib——機(jī)器學(xué)習(xí)庫項(xiàng)目六GraphFrames——圖計(jì)算框架項(xiàng)目七綜合案例——分析銀行個(gè)人信貸

業(yè)務(wù)數(shù)據(jù)項(xiàng)目五SparkMLlib——機(jī)器學(xué)習(xí)庫任務(wù)一加載鳶尾花數(shù)據(jù)任務(wù)二提取鳶尾花的特征任務(wù)三使用聚類算法處理鳶尾花數(shù)據(jù)任務(wù)四使用分類算法處理鳶尾花數(shù)據(jù)第6頁在大數(shù)據(jù)時(shí)代,僅依靠人工處理龐雜的數(shù)據(jù)已無法滿足需求,因此促進(jìn)了機(jī)器學(xué)習(xí)的迅速發(fā)展。Spark提供了強(qiáng)大的機(jī)器學(xué)習(xí)庫MLlib,用戶使用它可以實(shí)現(xiàn)大數(shù)據(jù)與機(jī)器學(xué)習(xí)的無縫對(duì)接。本項(xiàng)目結(jié)合分析鳶尾花數(shù)據(jù)案例,介紹SparkMLlib的組成、基本數(shù)據(jù)類型、運(yùn)行流程、特征化工具(如特征提取、特征轉(zhuǎn)換、特征選擇等)、聚類算法和分類算法。第7頁了解SparkMLlib的組成。熟悉SparkMLlib的基本數(shù)據(jù)類型。理解SparkMLlib的運(yùn)行流程。第8頁能使用SparkMLlib的特征提取、特征轉(zhuǎn)換和特征選擇等特征化工具處理數(shù)據(jù)。能使用SparkMLlib的聚類算法處理數(shù)據(jù)。能使用SparkMLlib的分類算法處理數(shù)據(jù)。第9頁能熟練運(yùn)用機(jī)器學(xué)習(xí)算法解決日常生活中的數(shù)據(jù)分析問題。培養(yǎng)自主學(xué)習(xí)意識(shí),提升實(shí)踐操作能力。任務(wù)一加載鳶尾花數(shù)據(jù)第11頁使用SparkMLlib對(duì)鳶尾花數(shù)據(jù)進(jìn)行處理和分析之前,需要先加載數(shù)據(jù)創(chuàng)建DataFrame。在加載鳶尾花數(shù)據(jù)之前,我們先認(rèn)識(shí)一下機(jī)器學(xué)習(xí),并學(xué)習(xí)SparkMLlib的組成、基本數(shù)據(jù)類型和運(yùn)行流程。第12頁一、認(rèn)識(shí)機(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)以不斷改善自身的性能。第13頁按照不同的維度,機(jī)器學(xué)習(xí)有多種分類方式。從學(xué)習(xí)方式的維度進(jìn)行劃分,機(jī)器學(xué)習(xí)可以以下幾種方式。監(jiān)督學(xué)習(xí)無監(jiān)督學(xué)習(xí)半監(jiān)督學(xué)習(xí)一、認(rèn)識(shí)機(jī)器學(xué)習(xí)第14頁一、認(rèn)識(shí)機(jī)器學(xué)習(xí)監(jiān)督學(xué)習(xí)是一種比較簡單且直接的學(xué)習(xí)方法,它利用含有標(biāo)簽的數(shù)據(jù)集對(duì)學(xué)習(xí)模型進(jìn)行訓(xùn)練,然后得到預(yù)測模型,最后利用測試集對(duì)預(yù)測模型的性能進(jìn)行評(píng)估。(1)監(jiān)督學(xué)習(xí)第15頁一、認(rèn)識(shí)機(jī)器學(xué)習(xí)無監(jiān)督學(xué)習(xí)是在沒有標(biāo)簽的數(shù)據(jù)集里發(fā)現(xiàn)數(shù)據(jù)之間潛在關(guān)系的學(xué)習(xí)方法。無監(jiān)督學(xué)習(xí)是一種沒有明確目的的學(xué)習(xí)方法,無法提前知道結(jié)果,且它的學(xué)習(xí)效果幾乎無法量化。(2)無監(jiān)督學(xué)習(xí)第16頁一、認(rèn)識(shí)機(jī)器學(xué)習(xí)半監(jiān)督學(xué)習(xí)是一種介于監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)之間的學(xué)習(xí)方法。它利用少量有標(biāo)簽的數(shù)據(jù)集和大量無標(biāo)簽的數(shù)據(jù)集進(jìn)行訓(xùn)練,旨在擴(kuò)展模型的覆蓋范圍,并提高模型的泛化能力。(3)半監(jiān)督學(xué)習(xí)第17頁一、認(rèn)識(shí)機(jī)器學(xué)習(xí)半監(jiān)督學(xué)習(xí)通常應(yīng)用于數(shù)據(jù)標(biāo)注成本較高或難以獲得大量含有標(biāo)簽的數(shù)據(jù)集的場景。(3)半監(jiān)督學(xué)習(xí)第18頁二、SparkMLlib概述傳統(tǒng)的機(jī)器學(xué)習(xí)算法通常需要對(duì)整個(gè)數(shù)據(jù)集進(jìn)行操作,這可能會(huì)導(dǎo)致計(jì)算時(shí)間過長或內(nèi)存不足等問題。隨著HDFS等分布式文件系統(tǒng)的出現(xiàn),海量數(shù)據(jù)存儲(chǔ)成為可能。第19頁二、SparkMLlib概述由于MapReduce自身的限制,使用MapReduce實(shí)現(xiàn)分布式機(jī)器學(xué)習(xí)算法仍然存在延遲高、磁盤開銷大等問題。為此,Spark提供了一個(gè)基于海量數(shù)據(jù)的機(jī)器學(xué)習(xí)庫MLlib,使得開發(fā)者可以通過調(diào)用API實(shí)現(xiàn)基于海量數(shù)據(jù)的機(jī)器學(xué)習(xí)過程。第20頁二、SparkMLlib概述SparkMLlib包含了一系列通用的學(xué)習(xí)算法和工具,涵蓋了特征提取、特征轉(zhuǎn)換、特征選擇、聚類、分類、回歸和協(xié)同過濾等。此外,SparkMLlib還提供了底層的優(yōu)化功能和高層的管道API,用于構(gòu)建復(fù)雜的機(jī)器學(xué)習(xí)工作流程。第21頁二、SparkMLlib概述SparkMLlib的組成如圖所示。第22頁三、SparkMLlib的基本數(shù)據(jù)類型SparkMLlib提供了一系列基本數(shù)據(jù)類型,用于支持底層的機(jī)器學(xué)習(xí)算法。常見的基本數(shù)據(jù)類型包括本地向量、本地矩陣和標(biāo)注點(diǎn)等。其中,本地向量和本地矩陣作為公共接口提供簡單的數(shù)據(jù)模型;標(biāo)注點(diǎn)表示監(jiān)督學(xué)習(xí)中的一個(gè)訓(xùn)練樣本。第23頁三、SparkMLlib的基本數(shù)據(jù)類型詳細(xì)說明如表所示。數(shù)據(jù)類型說明本地向量(localVector)本地向量是一個(gè)數(shù)值數(shù)組,表示特征集合或樣本。根據(jù)元素的存在情況和存儲(chǔ)方式,本地向量可分為稠密本地向量(denselocalVector)和稀疏本地向量(sparselocalVector)。其中,稠密本地向量是一個(gè)存儲(chǔ)著所有特征值的數(shù)組,每個(gè)元素都代表向量的一個(gè)特征;稀疏本地向量只存儲(chǔ)非零特征及其對(duì)應(yīng)的索引本地矩陣(localMatrix)本地矩陣是一個(gè)二維數(shù)組,用于存儲(chǔ)和處理數(shù)值型數(shù)據(jù)。本地矩陣可分為稠密本地矩陣(denselocalMatrix)和稀疏本地矩陣(sparselocalMatrix)。稠密本地矩陣中的每個(gè)元素都有一個(gè)值;稀疏本地矩陣中大部分元素的值為零標(biāo)注點(diǎn)(LabeledPoint)標(biāo)注點(diǎn)表示監(jiān)督學(xué)習(xí)中的一個(gè)訓(xùn)練樣本,由特征向量和與之關(guān)聯(lián)的標(biāo)簽組成。特征向量表示輸入樣本的特征;標(biāo)簽是一個(gè)浮點(diǎn)數(shù)或整數(shù),表示樣本的類別或輸出第24頁四、SparkMLlib的運(yùn)行流程SparkMLlib的運(yùn)行流程如圖所示。第25頁四、SparkMLlib的運(yùn)行流程使用Spark提供的方法讀取數(shù)據(jù)創(chuàng)建DataFrame。1)數(shù)據(jù)加載(1)數(shù)據(jù)加載第26頁對(duì)加載的數(shù)據(jù)進(jìn)行特征處理,包括特征提取、特征轉(zhuǎn)換、特征選擇等。(2)特征處理四、SparkMLlib的運(yùn)行流程第27頁使用Spark提供的工具類,如randomSplit()方法,將數(shù)據(jù)按照比例劃分為訓(xùn)練集和測試集。該方法的基本格式如下。(3)劃分訓(xùn)練集和測試集randomSplit(weights,seed)四、SparkMLlib的運(yùn)行流程第28頁其中,參數(shù)weights為一個(gè)包含權(quán)重(權(quán)重之和為1)的列表,表示每個(gè)子數(shù)據(jù)集的相對(duì)大??;參數(shù)seed(可選)為一個(gè)整數(shù)種子,用于控制隨機(jī)數(shù)生成器的種子值。(3)劃分訓(xùn)練集和測試集四、SparkMLlib的運(yùn)行流程第29頁選擇合適的機(jī)器學(xué)習(xí)算法構(gòu)建機(jī)器學(xué)習(xí)模型。(4)模型構(gòu)建四、SparkMLlib的運(yùn)行流程第30頁輸入訓(xùn)練數(shù)據(jù),使用fit()方法訓(xùn)練機(jī)器學(xué)習(xí)模型。(5)模型訓(xùn)練fit(dataset)其中,參數(shù)dataset為DataFrame類型的數(shù)據(jù)四、SparkMLlib的運(yùn)行流程第31頁使用transform()方法執(zhí)行轉(zhuǎn)換操作,將訓(xùn)練好的模型應(yīng)用于測試數(shù)據(jù),生成預(yù)測結(jié)果。該方法的基本格式如下。(6)模型測試transform(dataset))其中,參數(shù)dataset為DataFrame類型的數(shù)據(jù)。四、SparkMLlib的運(yùn)行流程第32頁首先創(chuàng)建MulticlassClassificationEvaluator對(duì)象,然后使用評(píng)估器(evaluator)評(píng)估訓(xùn)練好的模型,計(jì)算模型的性能指標(biāo),如準(zhǔn)確率、召回率、F1值等。該方法的基本格式如下。(7)模型評(píng)估四、SparkMLlib的運(yùn)行流程第33頁#創(chuàng)建MulticlassClassificationEvaluator對(duì)象eval=MulticlassClassificationEvaluator(labelCol,predictionCol,metricName)eval_value=eval.evaluate(dataset)(7)模型評(píng)估四、SparkMLlib的運(yùn)行流程第34頁其中,參數(shù)labelCol(可選)表示真實(shí)標(biāo)簽列的名稱,默認(rèn)值為label;參數(shù)predictionCol(可選)表示預(yù)測標(biāo)簽列的名稱,默認(rèn)值為prediction;(7)模型評(píng)估四、SparkMLlib的運(yùn)行流程第35頁參數(shù)metricName(可選)表示評(píng)估指標(biāo)的名稱,可選值包括accuracy、f1、weightedPrecision、weightedRecall等,默認(rèn)值為f1;參數(shù)dataset表示包含標(biāo)簽和預(yù)測值的DataFrame(7)模型評(píng)估四、SparkMLlib的運(yùn)行流程第36頁任務(wù)分析

Iris數(shù)據(jù)集是一組包含150個(gè)樣本和4個(gè)特征的多元數(shù)據(jù)集。每個(gè)樣本都包含Iris花卉的萼片長度、萼片寬度、花瓣長度和花瓣寬度,以及花卉對(duì)應(yīng)的品種(setosa、versicolor或virginica)。加載鳶尾花數(shù)據(jù)點(diǎn)擊此處播放微課第37頁任務(wù)分析該數(shù)據(jù)集存放在“usr/local/spark/mycode/Mllib/iris.csv”文件中,內(nèi)容如圖所示。第38頁打開PyCharm,創(chuàng)建“Mllib”目錄,然后新建“IrisFeature.py”文件,并在該文件中編寫應(yīng)用程序,實(shí)現(xiàn)鳶尾花數(shù)據(jù)的讀取。具體實(shí)現(xiàn)步驟如下。步驟1創(chuàng)建SparkSession對(duì)象。第39頁步驟2使用read.csv()方法加載鳶尾花數(shù)據(jù)創(chuàng)建DataFrame(即data)。其中,inferSchema=True表示自動(dòng)推斷字段類型;header=False表示不使用首行數(shù)據(jù)作為列名。第40頁步驟3使用toDF()方法為data指定列名,得到一個(gè)新的DataFrame(即iris)。第41頁步驟4frompyspark.sqlimportSparkSessionfrompyspark.ml.featureimportVectorAssembler,StringIndexer,PCAfrompyspark.ml.clusteringimportKMeansfrompyspark.ml.classificationimportDecisionTreeClassifier【參考代碼】使用show()方法顯示iris中的數(shù)據(jù)。第42頁步驟4frompyspark.ml.evaluationimportMulticlassClassificationEvaluatorfrompyspark.sql.functionsimportcol#創(chuàng)建SparkSession對(duì)象spark=SparkSession.builder.appName("IrisFeature").getOrCreate()#加載鳶尾花數(shù)據(jù)創(chuàng)建DataFramedata=spark.read.csv("file:///usr/local/spark/mycode/Mllib/iris.csv",inferSchema=True,header=False)第43頁步驟4#使用toDF()方法為data指定列名iris=data.toDF("sepal_length","sepal_width","petal_length","petal_width","label")#顯示iris中的數(shù)據(jù)iris.show()第44頁步驟4【運(yùn)行結(jié)果】在PyCharm中運(yùn)行代碼,控制臺(tái)顯示Iris數(shù)據(jù)集的前20行數(shù)據(jù),如圖所示。第45頁認(rèn)識(shí)機(jī)器學(xué)習(xí)SparkMLlib概述SparkMLlib的基本數(shù)據(jù)類型SparkMLlib的運(yùn)行流程任務(wù)二提取鳶尾花的特征第47頁機(jī)器學(xué)習(xí)過程中,對(duì)數(shù)據(jù)進(jìn)行特征處理可以提取出與事物最相關(guān)、最有用的特征,從而達(dá)到更好的聚類或分類效果。本任務(wù)將使用特征處理方法提取鳶尾花的特征,為后續(xù)的聚類和分類模型提供有效數(shù)據(jù)。在提取鳶尾花的特征之前,我們先學(xué)習(xí)一下特征提取、特征轉(zhuǎn)換和特征選擇等特征處理方法。第48頁一、特征提取特征提取是指從原始數(shù)據(jù)中提取有用的、可數(shù)的、可比較的特征的過程。它可以將復(fù)雜的數(shù)據(jù)轉(zhuǎn)換成便于分析和處理的數(shù)據(jù)形式,同時(shí)減少計(jì)算量和存儲(chǔ)空間。第49頁一、特征提取(1)TF-IDFpyspark.ml包提供的特征提取算法(2)Word2Vec等第50頁詞頻-逆文檔頻率(TF-IDF)算法是文本挖掘領(lǐng)域常用的特征提取方法。它用于評(píng)估一個(gè)詞語對(duì)于語料庫中的某個(gè)文檔的重要程度,可應(yīng)用于搜索引擎、推薦系統(tǒng)、文本分類、聚類分析等多個(gè)領(lǐng)域。一、特征提取1.TF-IDF第51頁詞頻(

TF)表示一個(gè)詞語在文檔中出現(xiàn)的頻率。逆文檔頻率(IDF)用于衡量一個(gè)詞語在整個(gè)語料庫中的稀有程度。一、特征提取1.TF-IDF第52頁一、特征提取TF-IDF算法的工作原理如下。

(1)計(jì)算詞頻1.TF-IDF第53頁一、特征提取TF-IDF算法的工作原理如下。1.TF-IDF(2)計(jì)算逆文檔頻率

第54頁一、特征提取TF-IDF算法的工作原理如下。

(3)計(jì)算TF-IDF1.TF-IDF第55頁一、特征提取在SparkMLlib中,TF-IDF算法的實(shí)現(xiàn)步驟如下。首先使用HashingTF()方法計(jì)算詞頻,該方法的基本格式如下。HashingTF(inputCol,outputCol,numFeatures,binary)1.TF-IDF第56頁參數(shù)inputCol表示輸入列的名稱;參數(shù)outputCol表示輸出列的名稱;參數(shù)numFeatures(可選)表示特征向量的維度大小,默認(rèn)值為262144;參數(shù)binary(可選)表示是否將特征向量中的非零值設(shè)置為1,默認(rèn)值為False。一、特征提取1.TF-IDF第57頁一、特征提取使用IDF()方法計(jì)算每個(gè)詞語的TF-IDF度量值,該方法的基本格式如下。IDF(inputCol,outputCol,minDocFreq)1.TF-IDF第58頁參數(shù)inputCol表示輸入列的名稱,該輸入列為HashingTF()方法的輸出列;參數(shù)outputCol表示輸出列的名稱;參數(shù)minDocFreq(可選)表示詞語至少出現(xiàn)在語料庫中的minDocFreq個(gè)文檔中才會(huì)被考慮,默認(rèn)值為0。一、特征提取1.TF-IDF第59頁一、特征提取【例5-1】使用TF-IDF算法計(jì)算每個(gè)詞語的TF-IDF度量值,輸出結(jié)果如圖所示。1.TF-IDF第60頁一、特征提取1.TF-IDF[hadoop@bogon~]$pyspark>>>frompyspark.ml.featureimportHashingTF,IDF>>>frompyspark.sql.functionsimportsplit#定義數(shù)據(jù)>>>data=[(0,"ApacheSparkisafastandgeneral-purposeclustercomputingsystem"),(1,"Hadoopisanopen-sourcesoftwareframeworkforstoringandprocessingbigdata"),(2,"SparkandHadoopareoftenusedtogethertoprocesslarge-scaledatasets")]第61頁一、特征提取1.TF-IDF#創(chuàng)建DataFrame>>>df=spark.createDataFrame(data,["labels","text"])#將text列的文本拆分為單詞,并將該列的列名修改為words>>>df=df.withColumn("words",split(df.text,""))#創(chuàng)建HashingTF對(duì)象>>>hashingTF=HashingTF(inputCol="words",outputCol="rawFeatures",numFeatures=2000)#執(zhí)行轉(zhuǎn)換操作,應(yīng)用HashingTF模型進(jìn)行數(shù)據(jù)轉(zhuǎn)換>>>featurizedData=hashingTF.transform(df)第62頁一、特征提取#創(chuàng)建IDF對(duì)象>>>idf=IDF(inputCol="rawFeatures",outputCol="features")#訓(xùn)練IDF模型>>>idfModel=idf.fit(featurizedData)#應(yīng)用IDF模型進(jìn)行數(shù)據(jù)轉(zhuǎn)換>>>rescaledData=idfModel.transform(featurizedData)#選擇標(biāo)簽和特征列并顯示結(jié)果>>>rescaledData.select("labels","features").show(truncate=False)1.TF-IDF第63頁一、特征提取輸出結(jié)果中特征列features的數(shù)據(jù)說明如表所示。特征列數(shù)據(jù)說明2000代表特征向量的維度大小為2000[202,467,845,891,1209,1263,1286,1583,1720,1996]表示“Apache,Spark,is,a,fast,and,general-purpose,cluster,computing,system”的哈希值[0.6931471805599453,0.6931471805599453,0.6931471805599453,...,0.6931471805599453]表示每個(gè)詞語的TF-IDF度量值1.TF-IDF第64頁詞向量(Word2Vec)是一種基于神經(jīng)網(wǎng)絡(luò)的自然語言處理模型,用于將詞語表示為高維向量。Word2Vec模型一旦訓(xùn)練完成,就可以使用該模型獲得每個(gè)詞語的向量表示。這些向量可以作為輸入特征用于各種任務(wù),如文檔分類、情感分析和推薦系統(tǒng)等。一、特征提取2.Word2Vec第65頁一、特征提取Word2Vec()方法的基本格式如下。Word2Vec(inputCol,outputCol,vectorSize,minCount,Partitions,maxIter,stepSize,seed,windowSize,maxSentenceLength,inputTokenizer,outputWordEmbeddings)2.Word2Vec第66頁一、特征提?、賗nputCol:表示輸入列的名稱。②outputCol:表示輸出列的名稱。其中,常用參數(shù)的含義如下2.Word2Vec第67頁一、特征提取③vectorSize(可選):表示生成的詞向量的維度大小,默認(rèn)值為100。④minCount(可選):表示一個(gè)詞語在文檔中出現(xiàn)的最小次數(shù),如果一個(gè)詞語的出現(xiàn)次數(shù)低于該值,則會(huì)被忽略,默認(rèn)值為5。其中,常用參數(shù)的含義如下2.Word2Vec第68頁一、特征提取2.Word2Vec【例5-2】使用Word2Vec算法將單詞表示為高維向量,輸出結(jié)果如圖所示。第69頁一、特征提取2.Word2Vec[hadoop@bogon~]$pyspark>>>frompyspark.ml.featureimportWord2Vec>>>frompyspark.sql.functionsimportsplit,col#定義一些句子,每個(gè)句子分解為單詞組成的列表>>>seq=["IheardaboutSparkandIloveSpark".split(""),"IwishJavacouldusecaseclasses".split(""),"Logisticregressionmodelsareneat".split("")第70頁一、特征提取2.Word2Vec#創(chuàng)建DataFrame,將列表中的每個(gè)元素轉(zhuǎn)換為一行數(shù)據(jù),并將列名命名為“text”>>>df=spark.createDataFrame([(s,)forsinseq],["text"])#創(chuàng)建Word2Vec對(duì)象,設(shè)置輸入和輸出列、詞向量的維度大小和最小詞頻第71頁一、特征提取2.Word2Vec>>>word2Vec=Word2Vec(inputCol="text",outputCol="result",vectorSize=3,minCount=0)#訓(xùn)練Word2Vec模型>>>model=word2Vec.fit(df)第72頁一、特征提取2.Word2Vec#應(yīng)用Word2Vec模型進(jìn)行數(shù)據(jù)轉(zhuǎn)換>>>result=model.transform(df)>>>result.select("text","result").show(truncate=False)第73頁二、特征轉(zhuǎn)換特征轉(zhuǎn)換是指將原始數(shù)據(jù)中特征值的表示形式轉(zhuǎn)換為新的特征表示形式,以便更好地進(jìn)行數(shù)據(jù)分析和模型訓(xùn)練。特征轉(zhuǎn)換可以通過對(duì)原始特征進(jìn)行加工、組合、降維等方式來實(shí)現(xiàn)。第74頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。Tokenizer用于分割給定的文本數(shù)據(jù),將文本中的句子轉(zhuǎn)換為小寫的、獨(dú)立的單詞序列。Tokenizer()方法的基本格式如下。其中,參數(shù)inputCol表示輸入列的名稱;參數(shù)outputCol表示輸出列的名稱。Tokenizer(inputCol,outputCol)(1)Tokenizer第75頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。Binarizer可以將某個(gè)特征的取值二值化,即將小于某個(gè)閾值的值設(shè)置為0,大于等于該閾值的值設(shè)置為1。Binarizer()方法的基本格式如下。Binarizer(inputCol,outputCol,threshold)(2)Binarizer第76頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。其中,參數(shù)inputCol表示輸入列的名稱;參數(shù)outputCol表示輸出列的名稱;參數(shù)threshold(可選)表示閾值,默認(rèn)值為0.0。(2)BinarizerBinarizer(inputCol,outputCol,threshold)第77頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。StringIndexer可以將原始的字符串類型的特征映射到一個(gè)整數(shù)序列上,其中不同的字符串會(huì)被映射到唯一的整數(shù)值上。StringIndexer()方法的基本格式如下。(3)StringIndexerStringIndexer(inputCol,outputCol,handleInvalid,stringOrderType)第78頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。參數(shù)inputCol表示輸入列的名稱;參數(shù)outputCol表示輸出列的名稱;參數(shù)handleInvalid表示如何處理無效的輸入數(shù)據(jù),可選值包括error(拋出異常)、skip(跳過該特征值)和keep(將其視為一個(gè)新的特征值),默認(rèn)值為error;(3)StringIndexer第79頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。參數(shù)stringOrderType表示字符串的索引順序類型,可選值包括:frequencyDesc(按照出現(xiàn)頻率降序排序);frequencyAsc(按照出現(xiàn)頻率升序排序);alphabetDesc(按照字母表順序降序排序)等(3)StringIndexer默認(rèn)值為frequencyDesc第80頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。Normalizer可以對(duì)每個(gè)樣本進(jìn)行“規(guī)范化”操作。Normalizer()方法的基本格式如下。(4)NormalizerNormalizer(inputCol,outputCol,p)第81頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。參數(shù)inputCol表示輸入列的名稱;參數(shù)outputCol表示輸出列的名稱;參數(shù)p表示要使用的范數(shù)類型,常見的取值有1.0(L1范數(shù))、2.0(L2范數(shù))和np.inf(無窮范數(shù)),默認(rèn)值為2.0。(4)NormalizerNormalizer(inputCol,outputCol,p)第82頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。MinMaxScaler可以將每個(gè)特征縮放到給定的范圍,使所有特征都具有相同的重要性。MinMaxScaler()方法的基本格式如下。(5)MinMaxScalerMinMaxScaler(inputCol,outputCol,min,max)第83頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。參數(shù)inputCol表示輸入列的名稱;參數(shù)outputCol表示輸出列的名稱;參數(shù)min(可選)表示特征縮放后的最小值,默認(rèn)值為0.0;參數(shù)max(可選)表示特征縮放后的最大值,默認(rèn)值為1.0。(5)MinMaxScalerMinMaxScaler(inputCol,outputCol,min,max)第84頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。PCA可以將高維的數(shù)據(jù)轉(zhuǎn)換為低維的數(shù)據(jù),同時(shí)盡量保留原始數(shù)據(jù)中的關(guān)鍵信息。PCA()方法的基本格式如下。(6)主成分分析(PCA)PCA(k,inputCol,outputCol)第85頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。參數(shù)k表示要保留的主成分?jǐn)?shù)量,如果未設(shè)置此參數(shù),則保留所有主成分;參數(shù)inputCol表示輸入列的名稱;參數(shù)outputCol表示輸出列的名稱。(6)主成分分析(PCA)PCA(k,inputCol,outputCol)第86頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。VectorAssembler可以將多列數(shù)據(jù)合并為單個(gè)向量列。VectorAssembler()方法的基本格式如下。(7)VectorAssemblerVectorAssembler(inputCols,outputCol,handleInvalid)第87頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。參數(shù)inputCols表示輸入列的名稱;參數(shù)outputCol表示輸出列的名稱;handleInvalid表示如何處理無效的輸入數(shù)據(jù),可選值包括error、skip和keep,默認(rèn)值為error。(7)VectorAssemblerVectorAssembler(inputCols,outputCol,handleInvalid)第88頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。StandardScaler用于對(duì)數(shù)據(jù)集中的特征進(jìn)行標(biāo)準(zhǔn)化處理。StandardScaler()方法的基本格式如下。(8)StandardScalerStandardScaler(withMean,withStd,inputCol,outputCol)第89頁二、特征轉(zhuǎn)換pyspark.ml包常用的特征轉(zhuǎn)換算法如下。參數(shù)withMean表示是否將數(shù)據(jù)進(jìn)行均值歸一化處理,默認(rèn)值為True;參數(shù)withStd表示是否將數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)差歸一化處理,默認(rèn)值為True;參數(shù)inputCol表示輸入列的名稱;參數(shù)outputCol表示輸出列的名稱。(8)StandardScaler第90頁二、特征轉(zhuǎn)換【例5-3】使用Binarizer算法將年齡進(jìn)行二值化處理,將閾值設(shè)置為30,特征值超過30的映射為1.0,特征值小于30的映射為0.0,輸出結(jié)果如圖所示。第91頁二、特征轉(zhuǎn)換[hadoop@bogon~]$pyspark>>>frompyspark.ml.featureimportBinarizer>>>frompyspark.sql.functionsimportcol#創(chuàng)建DataFrame>>>data=spark.createDataFrame([('Bob',21),('Mary',18),('William',35)],["name","age"])第92頁二、特征轉(zhuǎn)換#將age列的數(shù)據(jù)類型轉(zhuǎn)換為double類型>>>data=data.withColumn("age",col("age").cast("double"))#創(chuàng)建Binarizer對(duì)象,并將閾值設(shè)置為30.0>>>binarizer=Binarizer(inputCol="age",outputCol="bin_age",threshold=30.0)#應(yīng)用Binarizer模型進(jìn)行數(shù)據(jù)轉(zhuǎn)換>>>binarized_data=binarizer.transform(data)>>>binarized_data.select("name","age","bin_age").show()第93頁二、特征轉(zhuǎn)換【例5-4】使用StringIndexer算法將相同類別的水果映射為相同的數(shù)值,輸出結(jié)果如圖所示。[hadoop@bogon~]$pyspark>>>frompyspark.ml.featureimportStringIndexer#定義數(shù)據(jù)>>>data=[("apple",0),第94頁二、特征轉(zhuǎn)換("orange",1),("banana",2),("apple",3),("banana",4),("orange",5),("peach",6)]#創(chuàng)建DataFrame>>>df=spark.createDataFrame(data,["fruit","id"])第95頁二、特征轉(zhuǎn)換#從df中選擇“fruit”和“id”兩列>>>df=df.select("fruit","id")#創(chuàng)建StringIndexer對(duì)象>>>indexer=StringIndexer(inputCol="fruit",outputCol="label")#訓(xùn)練StringIndexer模型,然后應(yīng)用該模型轉(zhuǎn)換數(shù)據(jù)>>>indexed=indexer.fit(df).transform(df)>>>indexed.show()第96頁二、特征轉(zhuǎn)換【例5-5】分別使用Normalizer、MinMaxScaler和StandardScaler算法對(duì)特征進(jìn)行處理,輸出結(jié)果如圖所示。[hadoop@bogon~]$pyspark>>>frompyspark.ml.featureimportNormalizer,StandardScaler,MinMaxScaler>>>frompyspark.ml.linalgimportVectors第97頁二、特征轉(zhuǎn)換#定義數(shù)據(jù)>>>data=[(0,Vectors.dense([1.0,2.0,3.0])),(1,Vectors.dense([4.0,5.0,6.0])),(2,Vectors.dense([7.0,8.0,9.0]))]#創(chuàng)建DataFrame>>>df=spark.createDataFrame(data,["id","features"])#創(chuàng)建Normalizer、MinMaxScaler和StandardScaler對(duì)象第98頁二、特征轉(zhuǎn)換>>>normalizer=Normalizer(inputCol="features",outputCol="normalized_features")>>>minmax_scaler=MinMaxScaler(inputCol="features",outputCol="minmax_scaled_features")>>>standard_scaler=StandardScaler(withStd=True,withMean=False,inputCol="features",outputCol="standard_scaled_features")#應(yīng)用Normalizer模型轉(zhuǎn)換數(shù)據(jù)>>>norm_data=normalizer.transform(df)第99頁二、特征轉(zhuǎn)換#訓(xùn)練MinMaxScaler模型,然后應(yīng)用該模型轉(zhuǎn)換數(shù)據(jù)>>>minmax_data=minmax_scaler.fit(df).transform(df)#訓(xùn)練StandardScaler模型,然后應(yīng)用該模型轉(zhuǎn)換數(shù)據(jù)>>>stand_data=standard_scaler.fit(df).transform(df)>>>norm_data.show()>>>minmax_data.show()>>>stand_data.show()第100頁三、特征選擇特征選擇是指從數(shù)據(jù)集中選擇最優(yōu)的特征子集,從而改進(jìn)機(jī)器學(xué)習(xí)模型的性能并減少模型復(fù)雜度。第101頁三、特征選擇pyspark.ml包常用的特征選擇算法如下。ChiSqSelector可以選擇與標(biāo)簽最相關(guān)的前numTopFeatures個(gè)特征。ChiSqSelector()方法的基本格式如下。ChiSqSelector(numTopFeatures,featuresCol,outputCol,lableCol)(1)ChiSqSelector第102頁三、特征選擇pyspark.ml包常用的特征選擇算法如下。參數(shù)numTopFeatures(可選)表示要選擇的頂部特征數(shù)量,默認(rèn)值為50;參數(shù)featuresCol表示輸入特征列的名稱;參數(shù)outputCol表示輸出列的名稱;參數(shù)lableCol表示輸入標(biāo)簽列的名稱。ChiSqSelector(numTopFeatures,featuresCol,outputCol,lableCol)(1)ChiSqSelector第103頁三、特征選擇pyspark.ml包常用的特征選擇算法如下。VectorSlicer可以提取特征向量中的特定特征列。VectorSlicer()方法的基本格式如下。VectorSlicer(inputCol,outputCol,indices,names)(2)VectorSlicer第104頁三、特征選擇pyspark.ml包常用的特征選擇算法如下。參數(shù)inputCol表示輸入列的名稱;參數(shù)outputCol表示輸出列的名稱;參數(shù)indices(可選)表示要選擇的特征在輸入的特征向量中的索引;參數(shù)names(可選)表示要選擇的特征的名稱。ChiSqSelector(numTopFeatures,featuresCol,outputCol,lableCol)(2)VectorSlicer第105頁【例5-6】讀取Spark安裝目錄下自帶的示例文件“/usr/local/spark/data/mllib/sample_libsvm_data.txt“,輸出原始特征如圖所示。三、特征選擇第106頁【例5-6】然后,使用ChiSqSelector實(shí)現(xiàn)特征選擇,輸出結(jié)果如圖所示。三、特征選擇第107頁[hadoop@bogon~]$pyspark>>>frompyspark.ml.featureimportVectorAssembler,ChiSqSelector>>>frompyspark.sql.functionsimportcol#創(chuàng)建DataFrame>>>data=spark.read.format("libsvm").load("file:///usr/local/spark/data/mllib/sample_libsvm_data.txt")>>>data.show()三、特征選擇第108頁#創(chuàng)建ChiSqSelector對(duì)象>>>selector=ChiSqSelector(numTopFeatures=2,featuresCol="features",outputCol="selectedFeatures",labelCol="label")#訓(xùn)練ChiSqSelector模型>>>selectorModel=selector.fit(data)#應(yīng)用ChiSqSelector模型轉(zhuǎn)換數(shù)據(jù)>>>result=selectorModel.transform(data)>>>result.select("label","selectedFeatures").show(truncate=False)三、特征選擇第109頁任務(wù)分析首先使用VectorAssembler算法將鳶尾花數(shù)據(jù)的所有特征列轉(zhuǎn)換為單個(gè)特征列;然后使用PCA算法對(duì)特征列進(jìn)行降維;最后使用StringIndexer算法將字符串標(biāo)簽列轉(zhuǎn)換為數(shù)值標(biāo)簽列。提取鳶尾花的特征點(diǎn)擊此處播放微課第110頁打開PyCharm,在“IrisFeature.py”文件中繼續(xù)編寫應(yīng)用程序,實(shí)現(xiàn)鳶尾花數(shù)據(jù)的特征處理。具體實(shí)現(xiàn)步驟如下。第111頁步驟1創(chuàng)建VectorAssembler對(duì)象assembler,將所有特征列轉(zhuǎn)換為單個(gè)特征列features。第112頁步驟2對(duì)iris應(yīng)用VectorAssembler模型assembler,得到數(shù)據(jù)轉(zhuǎn)換結(jié)果data_with_features。首先使用transform()方法將iris中的所有特征列轉(zhuǎn)換為單個(gè)特征列;第113頁步驟2然后使用select()方法選取features列和label列,僅保留轉(zhuǎn)換后的特征列和原始標(biāo)簽列。第114頁步驟3使用show()方法顯示特征合并后的結(jié)果。第115頁步驟4創(chuàng)建PCA對(duì)象pca,對(duì)特征列進(jìn)行降維。其中,k為2,表示降維后保留的主成分?jǐn)?shù)量為2;inputCol為features,表示輸入的特征列;outputCol為pcaFeatures,表示輸出的特征列。第116頁步驟5使用fit()方法訓(xùn)練PCA模型,得到訓(xùn)練好的模型model。第117頁步驟6對(duì)data_with_features應(yīng)用PCA模型model,得到數(shù)據(jù)轉(zhuǎn)換結(jié)果iris_pca。首先使用transform()方法將data_with_features轉(zhuǎn)換為降維后的DataFrame;然后使用select()方法選取pcaFeatures列和label列。第118頁步驟7使用show()方法顯示降維后的數(shù)據(jù)。步驟8創(chuàng)建StringIndexer對(duì)象label_indexer,將字符串標(biāo)簽列l(wèi)abel轉(zhuǎn)換為數(shù)值標(biāo)簽列l(wèi)abel_index。第119頁步驟9使用fit()方法訓(xùn)練StringIndexer模型,然后對(duì)iris_pca應(yīng)用訓(xùn)練好的StringIndexer模型,得到數(shù)據(jù)轉(zhuǎn)換結(jié)果indexed。第120頁步驟10使用show()方法顯示將字符串標(biāo)簽列轉(zhuǎn)換為數(shù)值標(biāo)簽列后的數(shù)據(jù)。第121頁步驟10【參考代碼】#將所有特征列轉(zhuǎn)換為單個(gè)特征列#創(chuàng)建VectorAssembler對(duì)象assembler=VectorAssembler(inputCols=["sepal_length","sepal_width","petal_length","petal_width"],outputCol="features")第122頁步驟10【參考代碼】#應(yīng)用VectorAssembler模型進(jìn)行數(shù)據(jù)轉(zhuǎn)換,并選取指定列data_with_features=assembler.transform(iris)\.select(col("features"),col("label"))#顯示特征合并后的結(jié)果data_with_features.show()第123頁步驟10【參考代碼】#對(duì)特征列進(jìn)行降維#創(chuàng)建PCA對(duì)象pca=PCA(k=2,inputCol="features",outputCol="pcaFeatures")#訓(xùn)練PCA模型model=pca.fit(data_with_features)第124頁步驟10【參考代碼】#應(yīng)用PCA模型轉(zhuǎn)換數(shù)據(jù),并選取指定列iris_pca=model.transform(data_with_features)\.select(col("pcaFeatures"),col("label"))#顯示使用PCA降維后的數(shù)據(jù)iris_pca.show(truncate=False)第125頁步驟10【參考代碼】#將字符串標(biāo)簽列轉(zhuǎn)換為數(shù)值標(biāo)簽列#創(chuàng)建StringIndexer對(duì)象label_indexer=StringIndexer(inputCol="label",outputCol="label_index")#訓(xùn)練并應(yīng)用StringIndexer模型indexed=label_indexer.fit(iris_pca).transform(iris_pca)#顯示將字符串標(biāo)簽列轉(zhuǎn)換為數(shù)值標(biāo)簽列后的數(shù)據(jù)indexed.show()第126頁步驟10【運(yùn)行結(jié)果】在PyCharm中運(yùn)行代碼,控制臺(tái)輸出的結(jié)果依次為特征合并后的數(shù)據(jù)、降維后的數(shù)據(jù)和將字符串標(biāo)簽列轉(zhuǎn)換為數(shù)值標(biāo)簽列后的數(shù)據(jù),如圖所示。第127頁特征合并后的數(shù)據(jù)降維后的數(shù)據(jù) 將字符串標(biāo)簽列轉(zhuǎn)換為數(shù)值標(biāo)簽列后的數(shù)據(jù)第128頁特征提取特征轉(zhuǎn)換特征選擇任務(wù)三使用聚類算法處理鳶尾花數(shù)據(jù)第130頁聚類算法是一種無監(jiān)督的機(jī)器學(xué)習(xí)算法,它將數(shù)據(jù)集中的對(duì)象劃分為多個(gè)群組或簇,同一組內(nèi)的對(duì)象具有較高的相似性,而不同組之間的對(duì)象差異較大。本任務(wù)計(jì)劃使用K-Means算法對(duì)特征處理后的鳶尾花數(shù)據(jù)進(jìn)行聚類處理,將鳶尾花數(shù)據(jù)中具有相似特征的花朵樣本劃分到同一個(gè)簇中。在使用聚類算法處理鳶尾花數(shù)據(jù)之前,我們先學(xué)習(xí)一下聚類算法。第131頁一、聚類算法概述聚類算法的工作原理是根據(jù)輸入的特征向量尋找數(shù)據(jù)(沒有標(biāo)簽)的規(guī)律,并將類似的樣本匯聚成簇,如圖所示。第132頁一、聚類算法概述(1)選擇聚類算法和參數(shù)聚類算法執(zhí)行聚類任務(wù)的過程為以下3步(2)選擇聚類數(shù)(3)執(zhí)行聚類算法第133頁一、聚類算法概述選擇聚類算法和參數(shù)。根據(jù)任務(wù)的特性和數(shù)據(jù)的分布情況,選擇合適的聚類算法和參數(shù)。(1)選擇聚類算法和參數(shù)第134頁一、聚類算法概述選擇聚類數(shù)。確定聚類的數(shù)量,即確定要將數(shù)據(jù)分成多少個(gè)簇。(2)選擇聚類數(shù)第135頁一、聚類算法概述將數(shù)據(jù)輸入選定的聚類算法中,并執(zhí)行聚類操作。聚類算法根據(jù)數(shù)據(jù)點(diǎn)之間的相似度或距離進(jìn)行分組,將相似的數(shù)據(jù)點(diǎn)分配到同一簇中。(3)執(zhí)行聚類算法第136頁一、聚類算法概述接下來,以K-Means算法和高斯混合模型為例,介紹SparkMLlib聚類算法的使用方法。第137頁二、K-Means算法K-Means算法即K均值聚類算法(K-meansclusteringalgorithm),它是一種基于距離的聚類算法,用于將數(shù)據(jù)點(diǎn)分為K個(gè)簇。該算法的工作原理如下。(1)隨機(jī)選擇K個(gè)中心點(diǎn)(也稱為質(zhì)心)作為起始點(diǎn)。(2)將每個(gè)數(shù)據(jù)點(diǎn)分配到最近的中心點(diǎn)所在的簇中。第138頁二、K-Means算法K-Means算法即K均值聚類算法(K-meansclusteringalgorithm),它是一種基于距離的聚類算法,用于將數(shù)據(jù)點(diǎn)分為K個(gè)簇。該算法的工作原理如下。(3)更新簇的中心點(diǎn),即計(jì)算每個(gè)簇中所有數(shù)據(jù)點(diǎn)的平均值,并將其作為新的中心點(diǎn)。(4)重復(fù)執(zhí)行(2)和(3),直到簇的中心點(diǎn)不再改變或達(dá)到預(yù)定的迭代次數(shù)。第139頁K-Means算法的基本格式如下。KMeans(featuresCol,predictionCol,k,initMode,initSteps,tol,maxIter,seed,distanceMeasure,weightCol)二、K-Means算法第140頁參數(shù)featuresCol表示輸入特征列的名稱;參數(shù)predictionCol表示預(yù)測結(jié)果的列名,將聚類的結(jié)果存儲(chǔ)到該列中,默認(rèn)值為prediction;參數(shù)k表示聚類的簇?cái)?shù),默認(rèn)值為2;二、K-Means算法第141頁二、K-Means算法參數(shù)tol(可選)表示收斂容差,當(dāng)聚類中心的變化小于該值時(shí)停止迭代,默認(rèn)值為0.0001;參數(shù)seed(可選)表示隨機(jī)數(shù)種子,用于確定初始化的隨機(jī)值。第142頁三、高斯混合模型高斯混合模型(Gaussianmixturemodel)簡稱GMM,是一種基于高斯分布的概率模型,它假設(shè)數(shù)據(jù)集由多個(gè)高斯分布組成,每個(gè)高斯分布對(duì)應(yīng)一個(gè)簇。該算法的工作原理如下。第143頁(1)隨機(jī)初始化K個(gè)高斯分布的均值、協(xié)方差矩陣和權(quán)重。(2)計(jì)算每個(gè)數(shù)據(jù)點(diǎn)屬于各個(gè)簇的后驗(yàn)概率,即每個(gè)簇生成該數(shù)據(jù)點(diǎn)的概率除以所有簇生成該數(shù)據(jù)點(diǎn)的概率之和。算法的工作原理三、高斯混合模型第144頁(3)根據(jù)(2)計(jì)算出來的后驗(yàn)概率,更新每個(gè)高斯分布的均值、協(xié)方差矩陣和權(quán)重。(4)重復(fù)執(zhí)行(2)和(3),直到模型參數(shù)收斂或達(dá)到預(yù)定的迭代次數(shù)。算法的工作原理三、高斯混合模型第145頁GMM的基本格式如下。GaussianMixture(featuresCol,predictionCol,k,probabilityCol,tol,maxIter,seed,aggregationDepth,weightCol)三、高斯混合模型第146頁參數(shù)featuresCol表示輸入特征列的名稱;參數(shù)predictionCol表示預(yù)測結(jié)果的列名,默認(rèn)值為prediction;參數(shù)k表示聚類的簇?cái)?shù),默認(rèn)值為2。三、高斯混合模型第147頁參數(shù)probabilityCol(可選)表示概率列的名稱,默認(rèn)值為probability;參數(shù)maxIter(可選)表示算法的最大迭代次數(shù),默認(rèn)值為100;參數(shù)seed(可選)表示隨機(jī)數(shù)種子,用于確定初始化的隨機(jī)值。三、高斯混合模型第148頁一、DataFrame的數(shù)據(jù)查詢方式【例5-7】使用模擬器,生成一個(gè)包含1000個(gè)樣本的二維數(shù)據(jù)集(見圖);第149頁【例5-7】然后使用GMM對(duì)該數(shù)據(jù)集進(jìn)行聚類分析,設(shè)置簇?cái)?shù)為3,最大迭代次數(shù)為20,種子值為42,輸出結(jié)果如圖所示。三、高斯混合模型第150頁[hadoop@bogon~]$pyspark>>>frompyspark.ml.clusteringimportGaussianMixture>>>frompyspark.ml.featureimportVectorAssembler>>>frompyspark.sql.functionsimport*#生成模擬數(shù)據(jù)>>>df=spark.range(0,1000)\.withColumn('x',randn(seed=42)*5+10)\三、高斯混合模型第151頁.withColumn('y',randn(seed=43)*5+20)>>>df.show(truncate=False)#創(chuàng)建VectorAssembler對(duì)象>>>assembler=VectorAssembler(inputCols=['x','y'],outputCol='features')#應(yīng)用VectorAssembler模型,將多個(gè)特征列合并成單個(gè)特征列>>>data=assembler.transform(df).select('features’)#創(chuàng)建GaussianMixture對(duì)象三、高斯混合模型第152頁>>>gmm=GaussianMixture(k=3,maxIter=20,seed=42)#訓(xùn)練GaussianMixture模型>>>model=gmm.fit(data)#應(yīng)用GaussianMixture模型轉(zhuǎn)換數(shù)據(jù),并選取指定列>>>results=model.transform(data).select(col('features'),col('prediction').alias('cluster'))>>>results.show(truncate=False)三、高斯混合模型第153頁1.查詢并統(tǒng)計(jì)價(jià)格超過500元的各類商品信息和數(shù)量任務(wù)分析本任務(wù)先將特征處理后的鳶尾花數(shù)據(jù)集劃分為訓(xùn)練集和測試集;然后使用K-Means算法創(chuàng)建模型;接著使用訓(xùn)練集訓(xùn)練模型,并應(yīng)用模型對(duì)測試集進(jìn)行聚類;最后顯示聚類結(jié)果。使用聚類算法處理鳶尾花數(shù)據(jù)點(diǎn)擊此處播放微課第154頁打開PyCharm,在“IrisFeature.py”文件中繼續(xù)編寫應(yīng)用程序,實(shí)現(xiàn)Iris數(shù)據(jù)集的聚類分析。具體實(shí)現(xiàn)步驟如下。第155頁步驟1使用randomSplit()方法將indexed按照7∶3的比例劃分為訓(xùn)練集trainingData和測試集testData。第156頁步驟2創(chuàng)建KMeans對(duì)象kmeans。其中,featuresCol為pcaFeatures,表示輸入的特征列;k為3,表示將數(shù)據(jù)分成3個(gè)簇;seed為1,表示隨機(jī)初始化的種子值為1。第157頁步驟3使用fit()方法和訓(xùn)練集訓(xùn)練KMeans模型,得到訓(xùn)練好的模型model。第158頁步驟4使用transform()方法應(yīng)用KMeans模型model對(duì)測試集進(jìn)行數(shù)據(jù)轉(zhuǎn)換,并使用select()方法選取pcaFeatures列和prediction列,得到聚類結(jié)果predictions。第159頁步驟5使用show()方法顯示聚類結(jié)果。第160頁步驟5#將數(shù)據(jù)集劃分為訓(xùn)練集和測試集(trainingData,testData)=indexed.randomSplit([0.7,0.3])#創(chuàng)建KMeans對(duì)象kmeans=KMeans(featuresCol="pcaFeatures",k=3,seed=1)#訓(xùn)練KMeans模型【參考代碼】第161頁步驟5model=kmeans.fit(trainingData)#應(yīng)用KMeans模型進(jìn)行數(shù)據(jù)轉(zhuǎn)換并選取指定列predictions=model.transform(testData).select(col('pcaFeatures'),col('prediction'))#顯示聚類結(jié)果predictions.show()【參考代碼】第162頁步驟5在PyCharm中運(yùn)行代碼,控制臺(tái)輸出使用K-Means算法對(duì)鳶尾花數(shù)據(jù)進(jìn)行聚類的結(jié)果,如圖所示?!具\(yùn)行結(jié)果】第163頁聚類算法概述K-Means算法高斯混合模型任務(wù)四使用分類算法處理鳶尾花數(shù)據(jù)第165頁分類算法通?;诒O(jiān)督學(xué)習(xí),即需要已知輸入特征和對(duì)應(yīng)的輸出標(biāo)簽,然后訓(xùn)練模型,最后通過模型來預(yù)測新的數(shù)據(jù)的標(biāo)簽。本任務(wù)計(jì)劃使用決策樹分類算法對(duì)鳶尾花數(shù)據(jù)進(jìn)行分類,預(yù)測未知鳶尾花樣本對(duì)應(yīng)的類別。在使用分類算法處理鳶尾花數(shù)據(jù)之前,我們先學(xué)習(xí)一下分類算法。第166頁一、分類算法概述分類算法通常用于將事物打上一個(gè)標(biāo)簽,分類結(jié)果為離散值。分類算法的工作原理是先確定一個(gè)分類函數(shù)或模型,然后對(duì)輸入的新數(shù)據(jù)進(jìn)行預(yù)測,即根據(jù)分界線對(duì)新數(shù)據(jù)進(jìn)行分類,如圖所示。第167頁一、分類算法概述(1)解決二分類問題的分類算法包括邏輯回歸模型、決策樹分類算法、隨機(jī)森林分類算法、樸素貝葉斯算法、支持向量機(jī)等。(2)解決多分類問題的分類算法包括邏輯回歸模型、決策樹分類算法、隨機(jī)森林分類算法、樸素貝葉斯算法、一對(duì)多分類算法等。(3)解決回歸問題的分類算法包括線性回歸模型、決策樹回歸模型、隨機(jī)森林回歸模型等。SparkMLlib提供了多種分類算法用于解決二分類、多分類和回歸分析等問題。第168頁一、分類算法概述接下來,以樸素貝葉斯算法和決策樹分類算法為例,介紹SparkMLlib分類算法的使用方法。第169頁樸素貝葉斯(navieBayes)算法簡稱NB算法,它是一種基于貝葉斯定理的分類算法,它的主要思想是在已知類別的情況下,通過計(jì)算某個(gè)屬性出現(xiàn)的概率,來確定該屬性對(duì)于這個(gè)類別的重要性,并將其應(yīng)用于分類任務(wù)中。該算法的工作原理如下。二、樸素貝葉斯算法第170頁二、樸素貝葉斯算法(1)統(tǒng)計(jì)訓(xùn)練數(shù)據(jù)中不同類別的先驗(yàn)概率,即每個(gè)類別在訓(xùn)練數(shù)據(jù)中出現(xiàn)的頻率。(2)對(duì)于要分類的新樣本,計(jì)算其在每個(gè)類別下的后驗(yàn)概率,即給定特征下該樣本屬于某個(gè)類別的概率。算法的工作原理(3)選擇最大后驗(yàn)概率對(duì)應(yīng)的類別作為預(yù)測結(jié)果。第171頁二、樸素貝葉斯算法NB算法的基本格式如下。NaiveBayes(featuresCol,labelCol,predictionCol,probabilityCol,rawPredictionCol,smoothing,modelType,thresholds,weightCol)第172頁二、樸素貝葉斯算法參數(shù)featuresCol表示輸入特征列的名稱;參數(shù)labelCol表示標(biāo)簽列的名稱,默認(rèn)值為label;參數(shù)predictionCol表示預(yù)測結(jié)果的列名,默認(rèn)值為prediction;第173頁二、樸素貝葉斯算法參數(shù)probabilityCol(可選)表示概率列的名稱,默認(rèn)值為probability;參數(shù)rawPredictionCol(可選)表示存儲(chǔ)原始預(yù)測結(jié)果列的名稱;參數(shù)smoothing表示平滑參數(shù),默認(rèn)值為1.0;第174頁二、樸素貝葉斯算法參數(shù)modelType表示模型類型,可選值包括multinomial(多項(xiàng)式樸素貝葉斯)和bernoulli(伯努利樸素貝葉斯),默認(rèn)值為multinomial。第175頁二、樸素貝葉斯算法【例5-8】使用NB算法將Spark安裝目錄下的“/data/mllib/sample_libsvm_data.txt”文件數(shù)據(jù)分為0和1兩大類。讀取文本數(shù)據(jù)創(chuàng)建DataFrame,輸出DataFrame中的數(shù)據(jù)如圖所示。第176頁二、樸素貝葉斯算法【例5-8】然后,使用NB算法對(duì)文本數(shù)據(jù)進(jìn)行分類,輸出的預(yù)測結(jié)果及預(yù)測準(zhǔn)確率如圖所示。第177頁二、樸素貝葉斯算法[hadoop@bogon~]$pyspark>>>frompyspark.ml.classificationimportNaiveBayes>>>frompyspark.ml.evaluationimportMulticlassClassificationEvaluator#讀取文本數(shù)據(jù)創(chuàng)建DataFrame>>>data=sc.read.format("libsvm").load("file:///usr/local/spark/data/mllib/sample_libsvm_data.txt")#顯示DataFrame中的數(shù)據(jù)>>>data.show()第178頁二、樸素貝葉斯算法#將數(shù)據(jù)集劃分為訓(xùn)練集和測試集>>>(trainingData,testData)=data.randomSplit([0.7,0.3],seed=1234)#創(chuàng)建NaiveBayes對(duì)象>>>nb=NaiveBayes(smoothing=1.0,modelType="multinomial")#訓(xùn)練NaiveBayes模型>>>model=nb.fit(trainingData)第179頁二、樸素貝葉斯算法#應(yīng)用NaiveBayes模型轉(zhuǎn)換數(shù)據(jù)>>>predictions=model.transform(testData)#輸出預(yù)測結(jié)果>>>print("Predictionresults:")>>>predictions.show()#創(chuàng)建MulticlassClassificationEvaluator對(duì)象>>>evaluator=MulticlassClassificationEvaluator(labelCol="label",predictionCol="prediction",metricName="accuracy")第180頁二、樸素貝葉斯算法#計(jì)算模型的預(yù)測準(zhǔn)確率>>>accuracy=evaluator.evaluate(predictions)#輸出模型的預(yù)測準(zhǔn)確率>>>print("Testsetaccuracy="+str(accuracy))第181頁決策樹分類(decisiontreeclassification)算法簡稱DTC算法,它是一種通過對(duì)樣本數(shù)據(jù)進(jìn)行學(xué)習(xí),構(gòu)建一個(gè)決策樹模型,實(shí)現(xiàn)對(duì)新數(shù)據(jù)分類和預(yù)測的算法,是最直觀的分類算法。三、決策樹分類算法第182頁三、決策樹分類算法決策樹是一種樹形結(jié)構(gòu),表示通過一系列規(guī)則對(duì)數(shù)據(jù)進(jìn)行分類的過程。決策樹由3個(gè)主要部分組成,即決策節(jié)點(diǎn)、分支和葉子節(jié)點(diǎn)決策節(jié)點(diǎn)為非葉子節(jié)點(diǎn),代表某個(gè)樣本數(shù)據(jù)的特征(屬性);每個(gè)分支代表這個(gè)特征(屬性)在某個(gè)值域上的特征值(屬性值);每個(gè)葉子節(jié)點(diǎn)代表一個(gè)類別,如圖所示。第183頁三、決策樹分類算法第184頁三、決策樹分類算法圖為一個(gè)結(jié)構(gòu)簡單的決策樹,用于預(yù)測貸款用戶是否有能力償還貸款。其中,貸款用戶主要具備3個(gè)特征,即是否擁有房產(chǎn)、是否結(jié)婚和平均月

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論