PySpark機器學習、自然語言處理與系統(tǒng)_第1頁
PySpark機器學習、自然語言處理與系統(tǒng)_第2頁
PySpark機器學習、自然語言處理與系統(tǒng)_第3頁
PySpark機器學習、自然語言處理與系統(tǒng)_第4頁
PySpark機器學習、自然語言處理與系統(tǒng)_第5頁
已閱讀5頁,還剩159頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

PySpark

機器學習、自然語言處理與推薦系統(tǒng)

目錄

第1章數(shù)據革命1

1.1數(shù)據生成1

1.2Spark2

1.2.!SparkCore3

1.2.2Spark組件4

L3設置環(huán)境5

1.3.lWindows5

1.3.2iOS6

1.4小結7

第2章機器學習簡介9

2.1有監(jiān)督機器學習10

2.2無監(jiān)督機器學習12

2.3半監(jiān)督機器學習14

2.4強化學習14

2.5小結15

第3章數(shù)據處理17

3.1加載和讀取數(shù)據17

3.2添加一個新列20

33篩選數(shù)據21

3.3.1條件121

3.3.2條件222

3.4列中的非重復值23

3.5數(shù)據分組23

3.6聚合25

3.7用戶自定義函數(shù)(UDF)26

3.7.1傳統(tǒng)的Python函數(shù)26

3.7.2使用lambda函數(shù)27

3.7.3PandasUDF(向量化的UDF)28

3.7.4PandasUDF(多列)29

3.8去掉重復值29

3.9刪除列30

3二0寫入數(shù)據30

3.10.Icsv31

3.:0.2嵌套結構31

3.11小結31

第4章線性回歸33

4.1變量33

4.2理論34

4.3說明41

4.4評估42

4.5代碼43

4.5.1數(shù)據信息43

4.5.2步驟1:創(chuàng)建

SparkSession對象44

4.5.3步驟2:讀取數(shù)據集44

4.5.4步驟3:探究式數(shù)據分析44

4.5.5步驟4:特征工程化45

4.5.6步驟5:劃分數(shù)據集47

4.5.7步驟6:構建和訓練線性回歸模型47

4.5.8步驟7:在測試數(shù)據上評估線性回歸模型48

4.6小結48

第5章邏輯回歸49

5.1概率49

5.使用線性回歸50

5.1.2使用Logit53

5.2截距(回歸系數(shù))54

5.3虛變量55

5.4模型評估56

5.4.1正確的正面預測56

5.4.2正確的負面預測57

5.4.3錯誤的正面預測57

5.4.4錯誤的負面預測57

5.4.5準確率57

5.4.6召回率57

5.4.7精度58

5.4.8F1分數(shù)58

5.4.9截斷/閾值概率58

5.4.10R0C曲線58

5.5邏輯回歸代碼59

5.5.1數(shù)據信息59

5.5.2步驟1:創(chuàng)建Spark會話對象60

5.5.3步驟2:讀取數(shù)據集60

5.5.4步驟3:探究式數(shù)據分析60

5.5.5步驟4:特征工程63

5.5.6步驟5:劃分數(shù)據集68

5.5.7步驟6:構建和訓練邏輯回歸模型69

5.5.8訓練結果69

5.5.9步驟7:在測試數(shù)據上評估線性回歸模型70

5.5.10混淆矩陣71

5.6小結72

第6章隨機森林73

6.1決策樹73

6.二1焙75

6.1.2信息增益76

6.2隨機森林78

6.3代碼80

6.3.1數(shù)據信息80

6.3.2步驟1:創(chuàng)建SparkSession對象81

6.3.3步驟2:讀取數(shù)據集81

6.3.4步驟3:探究式數(shù)據分析81

6.3.5步驟4:特征工程85

6.3.6步驟5:劃分數(shù)據集86

6.3.7步驟6:構建和訓練隨機森林模型87

6.3.8步驟7:基于測試數(shù)據進行評估87

6.3.9準確率89

6.3.10精度89

6.3.11AUC曲線下的面積89

6.3.12步驟8:保存模型90

6.4小結90

第7章推薦系統(tǒng)91

7.:推薦91

7二.1基于流行度的RS92

7.二2基于內容的RS93

7.二3基于協(xié)同過濾的RS95

Z1.4混合推薦系統(tǒng)103

7.2代碼104

7.2.1數(shù)據信息105

7.2.2步驟1:創(chuàng)建SparkSession對象105

7.

7.2.3步驟2:讀取數(shù)據集105

7.2.4步驟3:探究式數(shù)據分析105

7.2.5步驟4:特征工程108

7.2.6步驟5:劃分數(shù)據集109

7.

7.2.7步驟6:構建和訓練推薦系統(tǒng)模型110

2.8步驟7:基于測試數(shù)據進行預測和評估110

2.9步驟8:推薦活動用戶可能會喜歡的排名靠前的電影111

7.3小結114

第8章聚類115

8.1初識聚類115

8.2用途117

8.2.1K-均值117

8.2.2層次聚類127

8.3代碼131

8.3.1數(shù)據信息131

8.3.2步驟1:創(chuàng)建SparkSession對象131

8.3.3步驟2:讀取數(shù)據集131

8.3.4步驟3:探究式數(shù)據分析131

8.3.5步驟4:特征工程133

8.3.6步驟5:構建K均值聚類模型133

8.3.7步驟6:聚類的可視化136

8.4小結137

第9章自然語言處理139

9.1引言139

9.2NLP涉及的處理步驟139

9.3語料140

9.4標記化140

9.5移除停用詞141

9.6詞袋142

9.7計數(shù)向量器143

9.8TF-IDF144

9.9使用機器學習進行文本分類145

9:0序列嵌入151

9.11嵌入151

9.12小結160

3.7.2使用lambda函數(shù)……27

第1章數(shù)據革命1

3.7.3PandasUDF(向量化的

1.1數(shù)據生成1

UDF)28

1.2Spark2

3.7.4PandasUDF(多列)……29

1.2.1SparkCore3

3.8去掉重更值29

1.2.2Spark組件4

3.9刪除列30

13設置環(huán)境5

3.10寫入數(shù)據30

1.3.1Windows5

3.10.1csv31

1.3.2iOS6

3.10.2嵌套結構31

1.4小結7

3.11小結31

第2章機器學習簡介9

第4章線性回歸33

2.1有監(jiān)督機器學習10

4.1變量33

2.2無監(jiān)督機器學習12

4.2理論34

2.3半監(jiān)督機器學習14

4.3說明41

2.4強化學習14

4.4評估42

2.5小結15

4.5代碼43

第3章數(shù)據處理174.5.1數(shù)據信息43

3.1加載和讀取數(shù)據174.5.2步驟1:創(chuàng)建

3.2添加一個新列20SparkScssion對象...44

3.3篩選數(shù)據214.5.3步驟2:讀取數(shù)據集…?44

3.3.1條件]214.5.4步驟3;探究式數(shù)據

3.3.2條件222分析44

3.4列中的非重復值234.5.5步驟4:特征工程化一45

3.5數(shù)據分組234.5.6步驟5:劃分數(shù)據集???Y7

3.6聚合254.5.7步驟6:構建和訓練

3.7用戶自定義函數(shù)(UDF)?…26線性回歸模型.47

3.7.1傳統(tǒng)的Python函數(shù)…?26

PySpark機器學習、自然語言處理與推薦系統(tǒng)

4.5.8步驟7:在測試數(shù)據上第6章隨機森林73

評估線性回歸模型??…486.1決策樹73

4.6小結486.1.1墻75

6.1.2信息增益76

第5章邏輯回歸49

6.2隨機森林78

5.1概率49

6.3代碼80

5.1.1使用線性回歸50

6.3.!數(shù)據信息80

5.1.2使用Logit53

6.3.2步驟1:創(chuàng)建

5.2截距(回歸系數(shù))54

SparkSession對象81

5.3虛變量55

6.3.3步驟2:讀取數(shù)據集…81

5.4模型評估56

6.3.4步驟3:探究式數(shù)據

5.4.1正確的正面預測56

分析81

5.4.2正確的負面預測57

6.3.5步驟4:特征工程……85

5.4.3錯誤的正面預測57

6.3.6步驟5:劃分數(shù)據集…86

5.4.4錯謖的負面預測57

6.3.7步驟6:構建和訓練

5.4.5準確率57

隨機森林模型.87

5.4.6召回率57

6.3.8步驟7:基于測試

5.4.7精度58

數(shù)據進行評估.87

5.4.8F1分數(shù)58

6.3.9準確率89

5.4.9截斷/閾值概率58

6.3.10精度89

5.4.10ROC曲線58

6.3.11AUC曲線下的面枳??89

5.5邏輯回歸代碼59

6.3.12步驟8:保存模型…4。

5.5.1數(shù)據信息59

6.4小結90

5.5.2步躲]:創(chuàng)建Spark

會話對象60第7章推薦系統(tǒng)91

5.5.3步驟2:讀取數(shù)據集607.1推薦91

5.5.4步驟3:探究式數(shù)據7.1.!基于流行度的RS?……92

分析607.1.2基于內容的RS93

5.5.5步驟4:特征工程……637.1.3基于協(xié)同過濾的RS-95

5.5.6步驟5:劃分數(shù)據集“687.1.4混合推薦系統(tǒng)103

5.5.7步躲6:構建和訓練7.2代碼104

邏輯回歸模型697.2.1數(shù)據信息105

5.5.8訓練結果697.2.2步驟1:創(chuàng)建

5.5.9步驟7:在測試數(shù)據SparkSession對象????105

上評估線性回歸模型?707.2.3步驟2:讀取

5.5.10混謂矩陣71數(shù)據集105

5.6小結727.2.4步驟3:探究式數(shù)據

分析105

VIII

■目錄

7.2.5步驟4:特征工程…?1088.3.5步驟4:特征工程????133

7.2.6步驟5:劃分數(shù)據集1098.3.6步驟5:構建K均值

7.2.7步驟6:構建和訓練聚類模型133

推薦系統(tǒng)模型1108.3.7步驟6:聚類的可

7.2.8步驟7:基于惻試數(shù)據視化136

進行預測和評估……1108.4小結137

7.2.9步驟8:推薦活動用

第9章自然語言處理139

戶可能會喜歡的排名

9.1弓I言139

靠閘的電影..Ill

9.2NLP涉及的處理步驟????139

7.3小結114

9.3語料140

第8章聚類1159.4標汜化140

8.1初識聚類1159.5移除停用詞141

8.2用途1179.6詞袋142

8.2.1K-均值1179.7計數(shù)向量器143

8.2.2層次聚類1279.8TF-IDF144

8.3代碼1319.9使用機器學習進行

8.3.1數(shù)據信息131文本分類145

8.3.2步驟1:創(chuàng)建9.10序列嵌入151

SparkSession對象???,1319.11嵌入151

8.3.3步躲2:讀取9.12小結160

數(shù)據集131

8.3.4步驟3:探究式數(shù)據

分析131

IX

第1章

數(shù)據革命

y

在理解Spark之前,當務之急是要理解當今我們正在見證的數(shù)據洪流背后的原

因。早些年代,數(shù)據是由員工生成或累積下來的,因此只有公司職員才會將數(shù)據輸

入系統(tǒng)中,并且這些數(shù)據點的范圍都很窄,僅涉及一些領域。之后,互聯(lián)網時代來

臨,每一個使用互聯(lián)網的人都能輕易獲取信息。如今,用戶已經有能力輸入和生成

自己的數(shù)據了。這是一次巨大的轉變,因為互聯(lián)網用戶的數(shù)量呈指數(shù)增長,并且由

這些用戶創(chuàng)造的數(shù)據增長量甚至更高。例如:登錄/注冊表單允許用戶填寫他們自己

的詳細信息,將照片和視頻上傳到各種社交平臺,這就會產生海量的數(shù)據以及處理

大量數(shù)據所需的快速且可伸縮的框架。

1.1數(shù)據生成

如今,這些數(shù)據的生成已經增長到一個新的水平,因為許多機器都在產生和累

積數(shù)據,如圖1“所示。我們周圍的每一臺設備都在捕獲數(shù)據,例如汽車、建筑物、

手機、手表、飛機發(fā)動機。這些設備都內置了多個監(jiān)控傳感器并且每秒都會記錄數(shù)

據。這部分數(shù)據的量級甚至比用戶生成的數(shù)據還要高。

數(shù)據錄入用戶輸入數(shù)據機器生成數(shù)據

圖1-1數(shù)據革命

早些時候,當數(shù)據仍舊處于企業(yè)級應用時,關系型數(shù)據庫就能夠很好地應對系

統(tǒng)需要了,但由于過去幾十年中數(shù)據量呈指數(shù)增長,大數(shù)據的處理已經發(fā)生了一種

結構性的變化,而這種變化正是由Spark的誕生而引發(fā)的。傳統(tǒng)上講,我們習慣于

PySpark機器學習、自然語言處理與推薦系統(tǒng)

獲取數(shù)據并且將它們放入處理器中以進行處理,不過現(xiàn)在,由于數(shù)據量過大,處理

器已經無法應對了。目前,我們應用了多處理器機制來處理數(shù)據。這被稱為并行處

理,因為同一時間會在多個位置處理數(shù)據。

我們來看一個示例,以便理解并行處理這一概念。假設在某條高速公路上,只

有個收費站,而每輛車都必須排成一行以便通過該收費站,如圖1?2所示。如

果平均每輛車需要花費1分鐘通過該收費站,那么八輛車總共就需要8分鐘,100

輛車就需要花費100分鐘。

總時長:8分鐘

圖1-2單線程處理

但是想象一下,如果這條高速公路上有八個收費站而不是一個,并且車輛可以

通過其中任意一個收費站進行收費,那么所有八輛車通過收費站的總時長只需要1

分鐘就夠了,因為其中沒有依賴關系了,如圖1-3所示,收費操作己經并行化了。

AAa

山a,「

I分鐘'1分鐘1分鐘1分鐘I分鐘

1分鐘

圖1-3并行處理

并行或分布式計算遵循類似的原則,因為會并行處理任務并且在處理結束時聚

積最終結果。Spark是一個框架,它可以采用并行處理的方式高速應對海量數(shù)據,

并且它是一種健壯的機制。

1.2Spark

ApacheSpark源自2009年美國加州大學伯克利分校AMELab的一個研究項目

并且于2010年初開源,如圖所示。自那時以來,Spark一直處于高速發(fā)展之中。

2016年,Spark發(fā)布了用于深度學習的TensorFrameso

2

第1章■數(shù)據革命

>2009>2010>2013>2014>2015>2016>2018

美國加州Spark開始ISpark被捐|Spark1.0.0發(fā)布用于發(fā)布用于Spark2.3

大學伯克開源ittfnApache發(fā)布Datai-'rame.深度學習的

利分校創(chuàng)MLPipeline、TensorFrames

造了SpadeSparkR的

API

圖ISSpark的發(fā)展歷程

在底層,Spark使用名為RDD(ResilientDistributedDataset*彈性分布式數(shù)據集)

的一種獨特的數(shù)據結構。彈性的含義在于,在執(zhí)行處理期間,數(shù)據結構具有重建任

意時點數(shù)據流的能力。因此,RDD會使用坡后一個時點的數(shù)據流創(chuàng)建一個新的

RDD,并且就算出現(xiàn)任何錯誤,也總是擁有重構的能力。它們是不可變的,因為原

始的RDD會保持不變。Spark由于是一種分布式框架,因此它是基于主節(jié)點和工作

節(jié)點的設置來運行的,如圖1-5所示。執(zhí)行任意活動的代碼一開始都是在Spark驅

動程序匕編寫的,之后會共享到實際存留數(shù)據的各個工作節(jié)點。每個工作節(jié)點都包

含一些執(zhí)行器,它們將實際執(zhí)行代碼。集群管理器會持續(xù)檢查各工作節(jié)點的可用性

Spark大受歡迎的主要原因在于,它實際上非常適用于數(shù)據處理、機器學習以

及流式數(shù)據;并且處理速度相對而言非???,因為它所進行的都是內存中的計算。

由于Spark是一種通用數(shù)據處理引擎,因此可以很容易地將其與各種數(shù)據源結合使

用,例如HBase、Cassandra?AmazonS3>HDFS等。Spark為用戶提供/可在其上

使用的四種語言選項:Java,Python、Scala和R。

1.2.1SparkCore

SparkCore是Spark最基礎的組成部分,如圖1-6所示,它是Spark高級功能特

3

PySpark機器學習、自然語言處理與推薦系統(tǒng)

性的支柱。SparkCore使得驅動并行和分布式數(shù)據處理的內存中計第成為可能.

Spark的所有特性都構建在SparkCore之上。SparkCore負責任務管理、I/O操作、

容錯以及內存管理等。

SparkCore

JavaPythonScalan

圖1-6Spark架構

1.2.2Spark組件

下面介紹Spark組件。

1.SparkSQL

這一組件主要應對的是結構化數(shù)據處理。其關鍵理念在于,獲取與數(shù)據結構有

關的更多信息以便執(zhí)行額外的優(yōu)化。它可以被視作一個分布式SQL查詢引擎。

2.SparkStreaming

這一組件的任務是,以一種可伸縮且可容錯的方式處理實時的流式數(shù)據。它使

用小批量處理的方式讀取和處理傳入的數(shù)據流。它會創(chuàng)建小批量的流式數(shù)據、執(zhí)行

批處理,并且將之傳遞到一些文件存儲或實時儀表盤。SparkStreaming可以從多個

源中攝取數(shù)據,例如Kafka和Flumeo

3.SparkMLlib

這一組件用于以分布式方式構建基于大數(shù)據的機器學習模型。當數(shù)據量很大

時,使用Python的scikit-leam庫構建ML(機器學習,MachineLearning)模型的傳統(tǒng)

技術面臨著極大挑戰(zhàn),而SparkMLlib旨在以大規(guī)模方式提供特征工程和機器學習。

SparkMUib的大部分算法實現(xiàn)都是為了用于分類、回歸分析、聚類分析、推薦系統(tǒng)

和自然語言處理。

4

第1章數(shù)據革命

4.SparkGraphX

這一組件在圖形分析領域和圖形并行化執(zhí)行方面表現(xiàn)得極為出色,可用于理解

數(shù)據的內在關系以及可視化從數(shù)據中獲得的見解。

1.3設置環(huán)境

本節(jié)將介紹在系統(tǒng)中設置Spark環(huán)境。根據操作系統(tǒng)的不同,可以選擇不同的

選項以便在系統(tǒng)中安裝Spark<,

1.3.1Windows

需要下載的文件如下:

?Anaconda(Python3.x)

?Java(如果未安裝的話)

?最新版本的ApacheSpark

winutils.exe

1.安裝Anaconda

從https://www.anaconda.eom/download/#windows下我Anaconda發(fā)行版并且在

系統(tǒng)中安裝它。需要注意的一點是,在安裝它時,需要啟用將Anaconda添加到PATH

環(huán)境變量的選項,這樣Windows才能在啟動Python時找到相關的文件。

安裝好Anaconda后,可使用命令提示符并且檢查Python在系統(tǒng)中能否正常運

行。大家也可能希望通過輸入以下命令來檢查Jupyter記事本是否也開啟了:

[In]:Jupyternotebook

2.安裝Java

訪問/en/download/linktF載并安裝Java的最新版本。

3.安裝Spark

在D盤創(chuàng)建一個名為spark的文件夾。訪問/downloads.html

并且選擇希望安裝到系統(tǒng)中的Spark發(fā)行版本。選中Pre-builtfbrApacheHadoop2.7

andlater這一包類型選項。維續(xù)F一步并且將.tgz文件下載到之明創(chuàng)建的spark文件

夾中,然后提取所有文件。在此處可以看到,解壓后會出現(xiàn)一個名為bin的文件夾。

下一步是卜我winutils.exe?為此需要打開/stcvcloughran/

5

PySpark機器學習、自然語言處理與推薦系統(tǒng)

winutils/blob/masler/hadoop-2.7.1/bin/winutils.exc并旦下我winutils.exe文件,然后保存

到解壓后的spark文件夾的bin子文件夾中(D:/spark/spark_unzipped/bin)。

現(xiàn)在你已經下載了所有需要的文件,接F來添加環(huán)境變量以便使用PySparkc

單擊Windows操作系統(tǒng)的“開始”按鈕并且搜索Editenvironmentvariablesfor

youraccounto繼續(xù)為winutils創(chuàng)建一個新的環(huán)境變吊:并且為其指定路徑。單擊New

按鈕,創(chuàng)建一個名為HADOOPHOME的新變量:,然后在該變量的值占位符中輸入

spark文件夾的路徑(D:/spark/sparkunzipped)。

對spark變成進行相同的處理,并且創(chuàng)建一個名為SPARK_HOME的新變量,

然后在該變量的值占位符中輸入spark文件夾的路徑(D:/spark/spark_unzipped)。

接下來再添加兩個變盤,以便使用Jupyter記事本。創(chuàng)建一個名為PYSPARK_

DRIVER_PYTHON的新變量,并且在該變砧的值占位符中輸入Jupyter。再創(chuàng)建一

個名為PYSPARKDRIVERPYTHONOPTS的變量,并且在值占位符中輸入

notebooko

在同一窗口中,筐找PATH變量,單擊Edit按鈕,并將D:/spark/sparkunzippecVbin

添加到其中。在Windows7中,PATH中的值之間需要使用分號來分隔。

還需要將Java添加到環(huán)境變量中。因此,創(chuàng)建另一個變量JAVA_HOME,并且

傳入安裝Java時的文件夾路徑。

可以打開命令行窗口并且運行Jupyter記事本。

[In]:Importfindspark

[In]:findspark.init()

(In):importpyspark

[In]:frompyspark.sqlimportSparkSession

[In]:spark=SparkSession.builder.getOrCreate()

1.3.2iOS

假設Mac上己經安裝了Anaconda和Java,那么我們可以下載最新版本的Spark

并且保存到主目錄中。

可以打開一個終端并且使用以下命令切換到主目錄:

[in]:cd~

將下載好的Spark壓縮文件復制到主目錄并且解壓文件內容:

[In]:mv/users/username/Downloads/spark-2.3.0-bin-hadoop2.7

/users/username

[In]:tar-zxvfspark-2.3.0-bin-hadoop2.7.tgz

6

第1章通數(shù)據革命

驗證是否具有bash配置文件.bash_profile:

[In]:Is-a

接下來編輯bash配置文件.bash_profile以便我們可以在任意目錄中打開一個

Spark記事本。

(In]:nano.bash_profile

在bash配置文件.bash_profile中粘貼以下代碼行:

exportSPARK_PATH=~/spark-2.3.0-bin-hadoop2.7

exportPYSPARK_DRIVER_PYTHON=*'jupyter"

exportPYSPARK_DRIVER_PYTHON_OPTS="notebook”

aliasnotebook-'$SPARK_PATH/bin/pyspark--masterlocal[2]

[In]:source.bash_profile

現(xiàn)在,嘗試在一個終端中打開Jupyter記事本并且弓入PySpark以便使用它。

可以直接借助Docker,通過來自Jupyter倉庫的一個鏡像來使用PySpark,不過

這要求系統(tǒng)中安裝了Dockero

Dalabricks提供了一個社區(qū)版賬戶,它是免費的,并且提供了帶有PySpark的

6GB集群。

1.4小結

本章介紹了Spark架構及其各種組件,以及為了使用Spark而設置本地環(huán)境的

各種方式。在后面幾章中,我們將深入探討Spark的各個方面,并使用Spark的這

些功能構建機器學習模型。

7

第2章

機器學習簡介

y

在我們剛出生時,我們無法做任何事情。那時我們甚至不能抬頭,不過最終我

們會開始學習所有的一切。最初我們都很笨拙,會犯許多錯誤,會跌倒,并且會經

??牡筋^,不過我們會逐漸學會坐、走、跑、寫、說話.作為一種內在機制,我們

無需大量示例就能學會一些東西。例如,僅通過觀察路邊的兩三憧房子,我們就能

輕易地學會如何區(qū)分出一幢房子。僅通過觀察周圍的幾輛汽車和自行車,我們就可

以輕易地區(qū)分出汽車和自行車。我們可以輕易地在貓和狗之間進行區(qū)分。雖然這對

于我們人類而言似乎非常容易并且簡單直觀,但對于機器來說這就是一項艱巨的

任務。

機器學習是一種機制,通過它我們可以嘗試讓機器進行學習,而無須為此進行

明確編程.簡單來說,我們要向機器展示大量貓和狗的圖片,數(shù)量需要足夠多,以

便讓機器學習兩者之間的差異,并且正確識別新的圖片,此處的問題可能是:為何

需要如此多的圖片來學習區(qū)分貓和狗這樣簡單的知識呢?機器所面臨的挑戰(zhàn)在于,

它們能夠僅僅從一些圖片中學習整體模式或抽象特征;但它們需要足夠多的示例(在

某些方面有差異)來學習盡可能多的特征,以便能夠做出正確的預測,而我們人類擁

有這一驚人的能力,我們能夠描繪出不同層次的抽象并且輕易地識別出物體。這個

例子可能特定于圖片識別這種情形,但對于其他應用場景也是適用的,機器需要大

量的數(shù)據才能從中進行學習。

機器學習是過去幾年中人們談論最多的話題之一。越來越多的企業(yè)希望采用它

來維持競爭優(yōu)勢;不過,只有非常少的企業(yè)真正具有適當?shù)馁Y源以及合適的數(shù)據。

這一章將介紹機器學習的基本類型以及企業(yè)如何才能從機器學習的應用中受益。

互聯(lián)網上充斥著大量關于機器學習的定義,不過如果嘗試用簡單的文字描述其

定義的話,看起來就會像F面這樣:

PySpark機器學習、自然語言處理與推薦系統(tǒng)

機器學習就是使用統(tǒng)計學并且有時也會使用高級算法來預

測或學習數(shù)據中的隱藏規(guī)律,并且實質上替換基于規(guī)則的系統(tǒng)以

便讓數(shù)據驅動的系統(tǒng)變得更加強大.

下面詳細探討這一定義。顧名思義,機器學習就是讓機器能夠進行學習,不過

讓機器進行學習這個話題涉及許多組成部分。

其中一個組成部分就是數(shù)據,這是所有模型的支柱。機器學習要依靠相關的數(shù)

據才能得以發(fā)展壯大。數(shù)據中的信號越多,預測就越準確。機器學習可以被應用到

不同的領域,例如金融、零售、醫(yī)療健康和社交媒體。另一個組成部分就是算法。

根據我們嘗試解決的問題的性質,可以選擇對應的算法。最后一個組成部分由硬件

和軟件構成。Spark和TensorFlow這樣的開源、分布式計算框架的發(fā)布,已經讓大

家能夠更輕易地接觸到機器學習。當場景受限并且所有的規(guī)則都可以手動配置以應

對面臨的情況時,就需要用到基于規(guī)則的系統(tǒng)了。最近,這種情況發(fā)生了變化,特

別是場景。例如,過去數(shù)年,詐騙手法已經發(fā)生了明顯的變化,因此為這樣的情況

創(chuàng)建人工規(guī)則實際上是不可能的。因此,機器學習就被應用到這樣的場景中,它可

以從數(shù)據中進行學習并且自動適應新的數(shù)據,以及做出對應的決策。對于每個人來

說,這都已經被證明具有巨大的商業(yè)價值。

我們來看看機器學習及其用途的不同類型??梢詫C器學習劃分成四個主要

類別:

?有監(jiān)督機器學習

?無監(jiān)督機器學習

?半監(jiān)督機器學習

?強化學習

上述類別中的每一種都被用于特定的目的,并且這些類別所使用的數(shù)據也是不

同的。歸根結底,機器學習就是從數(shù)據中進行學習(歷史數(shù)據或實時數(shù)據)并且基于

模型訓練來進行決策(離線或實時決策)。

2.1有監(jiān)督機器學習

這是機器學習的首要類別,它促成大量的應用并且?guī)砹松虡I(yè)價值。在有監(jiān)督

學習中,要基于標注數(shù)據來訓練模型。標注指的是在數(shù)據中使用正確的答案或結果。

我們通過一個示例來闡述有監(jiān)督機器學習。如果有一家金融公司希望在接受客戶的

貸款請求之前基于這些客戶的資料對他們進行篩選,則可以基于歷史數(shù)據來訓練機

器學習模型,這些歷史數(shù)據中包含關于過往客戶資料的信息,并且其中包含表明顧

客是否存在貸款違約的標注列。表2-1中給出了類似的樣本數(shù)據。

10

第2章機器學習簡介

表2-1客戶的詳細資料(一)

客戶ID年齡性別薪水(元)貸款數(shù)置工作類型貸款違約

AL2332男80001固定工作否

AX4345女105002固定工作否

BG7651男75003自由職業(yè)是

在有監(jiān)督機器學習中,模型從訓練數(shù)據中學習到的內容還有標簽/結果/目標列,

并且模型會使用該列對未知數(shù)據進行預測。在上面的示例中,年齡、性別和薪水這

樣的列被稱為屬性或特征,而最后一列(貸款違約)被稱為目標或標簽,也就是模型

試圖為未知數(shù)據進行預測的結果列。一條完整的具有所有這些值的記錄被稱為觀

察。模型需要足量的觀察才能被訓練出來,然后才能對相似類型的數(shù)據進行預測。

在有監(jiān)督機器學習中,至少需要一個輸入特征/屬性以及結果列來訓練模型。機器能

夠從訓練數(shù)據中進行學習的原因在于基本假設,也就是這些輸入特征中的一些能夠

獨立或聯(lián)合起來對結果列(貸款違約)產生影響。

使用有監(jiān)督機器學習設置的應用場景有很多,例如:

場景1,某特定客戶是否會購買產品?

場景2,訪問者是否會單擊廣告?

場景3,某個人是否會拖欠貸款不還?

場景4,某房產的預期銷售價格是什么?

場景5,某個人是否患上了惡性腫瘤?

以上就是有監(jiān)督機器學習的一些應用場景,當然用途還有很多。根據模型試圖

預測的結果類型.使用的方法有時候也會不同.如果目標標簽是類別類型,則需要

借助分類范疇中的方法;如果目標特征是數(shù)值,則需要借助回歸分析范疇中的方法。

其中一些有監(jiān)督ML算法如下:

?線性回歸

?邏輯回歸

?支持向量機

?樸索貝葉斯分類器

?決策樹

?集成方法

有監(jiān)督機器學習的另一個特性,就是可以評估模型的性能?;谀P偷念愋停ǚ?/p>

類/回歸/時序),可以應用評估指標并且可以測量性能結果。這主要是通過將訓練數(shù)

據劃分為兩個集合(訓練集和測試集)來實現(xiàn)的,也就是在訓練集上訓練模型,而在

測試集上檢測性能,因為我們已經知道測試集的正確標簽/結果了。之后我們可以在

超參數(shù)(后面幾章將會介紹)中進行修改,或者使用特征工程引入新特性以便提升模

型性能。

11

PySpark機器學習、自然語言處理與推薦系統(tǒng)

2.2無監(jiān)督機器學習

在無監(jiān)督機器學習中,我們基于類似的數(shù)據種類來訓練模型,只不過實際上數(shù)

據集并不包含任何標簽或結果/目標列。這實質上是基于沒有任何正確答案的數(shù)據來

訓練模型。在無監(jiān)督機器學習中,機器會嘗試找出數(shù)據中的隱藏模式和有用信號,

以便后續(xù)可用于其他應用。用途之一就是找出客戶數(shù)據中的模式并且將客戶分組成

表示某些屬性的不同集合,例如表2-2中的一些客戶數(shù)據。

表2-2客戶的詳細資料(二)

客戶ID歌曲流派

AS12情歌

BX54嘻哈

BX54搖滾

ASI2搖滾

CH87嘻哈

CH87古典

AS12搖滾

上述數(shù)據提供了客戶及其喜歡的音樂類型,但是沒有任何目標或結果列,僅僅

包含客戶及其音樂喜好,

我們可以使用無監(jiān)督機器學習并且將這些客戶分組成有意義的集合,以便相應

了解與分組偏好和行為有關的更多信息。可能必須將數(shù)據集微調成其他形式以便實

際應用無監(jiān)督機器學習,只要獲取每位客戶的值計數(shù)即可,結果看起來就像表2-3

所示。

表2-3客戶的詳細資料(三)

客戶ID情歌嘻哈搖滾古典

AS121020

BX540I10

CH870101

現(xiàn)在可以得出一些有用的用戶分組,并且應用該信息來推薦和制定一條基于這

些集合的策略。必然可以從中提取到的信息就是客戶在音樂喜好方面的相似情況,

并且可從內容角度進行標定。

12

第2章?機器學習簡介

圖2-1應用無監(jiān)督機器學習之后的集合

就像圖2“中一樣,集合A可以由僅喜歡聽搖滾樂的客戶構成,而集合B可以

由喜歡聽情歌和古典音樂的客戶構成,最后一個集合C可能由喜歡聽嘻哈和搖滾樂

的客戶構成。無監(jiān)督機器學習的另一個用途就是弄明白是否存在任何不同尋常的情

況或者說異常情形。無監(jiān)督機器學習有助于判定數(shù)據集中反常的人。大多數(shù)時候,

無監(jiān)督機器學習都會非常困難,因為沒有清晰的分組或者多個分組之間存在重疊的

值,而這樣的情況無法提供集合的清晰關系結構。例如,如圖2?2所示,數(shù)據中并

沒有清晰的分組,并且無監(jiān)督機器學習無法幫助形成真正有意義的數(shù)據點集合。

圖2-2存在嘔疊部分的集合

有許多應用都使用了無監(jiān)督機器學習設置,例如:

案例1,總的客戶資料庫中有哪些不同的分組?

案例2,這一事務是異常還是正常的?

無監(jiān)督機器學習中使用的算法是:

?聚類算法(K均值、層次聚類)

?維度降低技術

?主題模型

?關聯(lián)規(guī)則挖掘

無監(jiān)督機器學習的總體理念在于發(fā)現(xiàn)并且找出模式,而非進行預測。因此,無

監(jiān)督機器學習與有監(jiān)督機器學習主要有兩方面的差異。

?無監(jiān)督機器學習不需要標注的訓練數(shù)據并且不提供預測。

?無監(jiān)督機器學習中模型的性能無法估算,因為沒有標簽或正確答案。

13

PySpark機器學習、自然語言處理與推薦系統(tǒng)

2.3半監(jiān)督機器學習

顧名思義,半監(jiān)督機器學習介于有監(jiān)督機踹學習和無監(jiān)督機器學習之間。實際

上,它同時使用了這兩種技術。這類機器學習主要與處理混合類型數(shù)據集的場景有

關,其中同時包含標注和未標注的數(shù)據。有時候只有未標注的數(shù)據,不過我們會手

動標注一部分數(shù)據??梢詫@部分標注數(shù)據使用半監(jiān)督機器學習來訓練模型,然后

使用模型標注其余部分的數(shù)據,之后這部分數(shù)據就可以用于其他用途廣。這也被稱

為偽標注,因為標注的是未標注數(shù)據。舉個簡單的例子,社交媒體匕有大量不同品

牌的圖片,并且其中大多數(shù)都沒有被標注過?,F(xiàn)在,使用半監(jiān)督機器學習,我們可

以手動標注其中一些圖片,然后基于這些標注圖片來訓練模型。之后,使用模型預

測來標注其余的圖片,以便將未標注數(shù)據全部轉換成標注數(shù)據。

半監(jiān)督機器學習的下一步就是基于所有的標注數(shù)據集重新訓練模型。提供的好

處在于,現(xiàn)在模型是基于較大的數(shù)據集來訓練的,而之前的模型則不是.因此,模

型現(xiàn)在更為健壯并且能夠更好地進行預測。另一個好處是,半監(jiān)督機器學習可以節(jié)

省大量的時間和精力,因為無須人工標注數(shù)據。這樣做的缺點是,偽標注難以提供

較高的性能,因為使用了一小部分標注數(shù)據來進行預測。不過,相比于手動標注數(shù)

據,這仍舊是不錯的選擇,因為手動標注數(shù)據的成本非常高并且耗時也較長。

2.4強化學習

這是最后一種機器學習類型,并且在數(shù)據使用及預測方面有一些不同之處。強

化學習本身就是一個很大的研究領域,關于它可以寫一本完整的書。因此,本書不

會深入研究這一機器學習類型,因為本書的重點是使用PySpark構建機器學習模型。

其他類型的機器學習與強化學習之間的主要區(qū)別在于,其他類型的機器學習需要數(shù)

據(主要是歷史數(shù)據)來訓練模型,而強化學習是依托一套獎勵系統(tǒng)來運行的,主要

基于智能體為變更狀態(tài)而執(zhí)行某些操作,從而嘗試最大化獎勵來進行決策。接下來,

我們使用一張可視化圖表將強化學習分解成多個獨立的要素,如圖2-3所示。

圖2?3強化學習的要素

14

第2章機器學習簡介

?智能體:這是整個強化學習過程中的主要角色,負責執(zhí)行操作。如果將整

個過程看作一個游戲的話,那么智能體就要采取行動以便完成或達成最終

目標。

?操作:操作就是可能的步驟集合,智能體可以執(zhí)行它們以便在任務過程中

前行。母一個操作都會對智能體的狀態(tài)產生一些影響,并且可以產生獎勵

或懲罰。例如,在網球游戲中,操作可能是發(fā)球、反擊球、向左或向右移

動,等等。

?獎勵:這是強化學習中取得進步的關鍵。獎勵會讓智能體根據得到的是獎

勵還是懲罰來執(zhí)行操作。這是一種將強化學習和傳統(tǒng)的有監(jiān)督機器學習與

無監(jiān)督機器學習區(qū)分開來的反饋機制。

?環(huán)境:這是智能體參與其中的領域。環(huán)境會決定智能體執(zhí)行的操作到底是

產生獎勵還是懲罰。

?狀態(tài):在任意指定時間點,智能體處于的位置會定義智能體的狀態(tài)。為了

前行或達成最終目標,智能體必須向正面方向持續(xù)變更狀態(tài),以便最大化

獲得的獎勵。

強化學習的獨特之處在于,它有一種反饋機制,會基于最大化總的獎勵這一目

標來驅動智能體的F一個行為。使用強化學習的其中一些突出應用包括自動駕駛汽

車、能源消耗的優(yōu)化以及游戲領域。不過,它也可以被用于構建推薦系統(tǒng)。

2.5小結

本章簡要介紹了不同類型的機器學習方法以及其中一些應用。后面幾章將詳細

介紹使用PySpark進行有監(jiān)督機器學習和無監(jiān)督機器學習。

15

第3章

數(shù)據處理

y

本章會試著介紹使用PySpark處理和整理數(shù)據的所有主要步驟。雖然本章要處

理的數(shù)據城相對較小,但使用PySpark處理大型數(shù)據集的步驟幾乎仍舊是相同的。

數(shù)據處理是執(zhí)行機器學習所需的至關重要的步驟,因為我們需要對數(shù)據進行清洗、

過漉、合并和轉換,以便將它們整理為期望的格式,這樣才能夠訓練機器學習模型。

我們要充分利用多個PySpark函數(shù)來執(zhí)行數(shù)據處理。

3.1加載和讀取數(shù)據

假設已經安裝了2.3版本的Spark,那么我們首先要導入并且創(chuàng)建SparkSession

對象以便使用Sparko

(In]:frompyspark.sqlimportSparkSession

(In]:spark=SparkSession.builder.appName('data_processing*).

getOrCreate()

[In]:df=spark.read.csv(?sample_data.csv,,inferSchema=True,

header=True)

需要確保數(shù)據文件位于打開PySpark的那個文件夾,也可以指定數(shù)據駐留的文

件夾路徑以及數(shù)據文件的名稱。可以使用PySpark讀取多種數(shù)據文件格式。只需要

將讀取格式的參數(shù)更新為與文件格式(csv、json、parquet、table、text)保持一致即可。

對于以制表符分隔的文件,需要在讀取文件時傳遞一個額外參數(shù)以指定該分隔符

(sep=N)。將參數(shù)infbrSchema設置.為True,以表明Spark將在后臺自行推斷數(shù)據集

中值的數(shù)據類型。

上面的命令會創(chuàng)建一個具有樣本數(shù)據文件中的值的SparkDataFrameo我們可以

將其視作具有列和表頭信息的表格格式的Excel電子表格。現(xiàn)在,我們可以對這個

PySpark機器學習、自然語言處理與推薦系統(tǒng)

SparkDataFrame執(zhí)行多個操作。

[In]:df.columns

(Out]:['ratings','age',*experience',1family*,'mobile*]

口丁以使用columns方法1打印DataFrame中出現(xiàn)的列名列表。在輸出結果中,示

例DataFrame中有五列。要驗證列的數(shù)量,可以直接使用Python的len函數(shù)。

(In]:len(df.columns)

[Out]:5

可以使用count方法獲得DataFrame中的記錄總數(shù):

[In]:df.count

[Out]:33

示例DataFrame中共有33條記錄。一貫的好做法是,在進行預處理之前打卬

出DataFrame的形狀結構,這樣就能看到總行數(shù)和總列數(shù)的提示了。Spark中并沒

有任何直接的函數(shù)可用來檢查數(shù)據的形狀結構,因而我們需要將列的數(shù)量和長度結

合起來以便打印出數(shù)據的形狀結構。

(In):print((df.count),(len(df.columns))

(Out]:(33,5)

另一種查看DataFrame中列的方式就是使用Spark的printSchema方法,它會顯

示列的數(shù)據類型以及列名。

[Inl:df.printschema()

[Out]:root

I--ratings:integer(nullable=true)

I--age:integer(nullable=true)

I——experience:double(nullable=true)

I--family:double(nullable-true)

I--Mobile:string(nullable=true)

nullable屬性表明對應的列可以默認為true或false,也可以按需修改列的數(shù)據

類型。

下一個步驟就是提前看看DataFrame以便查看其中的內容??梢允褂肧park的

show方法來查看DataFrame的前幾行。

I在本書中,方法與函數(shù)的區(qū)別很小,有時會混合使用,讀者不必過度區(qū)分.

18

第3章■數(shù)據處理

[In]:df.show(5)

[Out]:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論