- 圖解機器學習算法
- (日)秋庭伸也 杉山阿圣 寺田學
- 7623字
- 2022-01-10 14:57:46
1.2 機器學習的步驟
機器學習具體要做哪些事情呢?本節的目標就是使讀者了解機器學習的大致步驟。通過閱讀本節,讀者將對作為機器學習算法基礎的處理流程有所理解,并學到機器學習的基本概念。
數據的重要性
在使用機器學習時,必須要有匯總并整理到一定程度的數據。以數據為基礎,按規定的法則進行學習,最終才能進行預測。
沒有數據,就不能進行機器學習。換言之,收集數據是首先要做的事情。本節將說明機器學習的訓練過程的一系列流程。為了便于理解,本節基于示例數據進行講解,使用的是主流機器學習庫 scikit-learn 包內置的數據,這個數據便于入手,可自由使用。
專欄 數據收集、數據預處理的重要性
在實際用機器學習解決問題之前,要先收集數據,有時還需要做問卷調查,甚至購買數據。然后,需要為收集到的數據人工標注答案標簽,或者將其加工為機器學習算法易于處理的形式,刪除無用的數據,加入從別的數據源獲得的數據等。另外,基于平均值和數據分布等統計觀點查看數據,或者使用各種圖表對數據進行可視化,把握數據的整體情況也很重要。此外,有時還需要對數據進行正則化處理。
這些操作被稱為數據預處理。有這樣一種說法:機器學習工作 80% 以上的時間花在了數據預處理上。
專欄 scikit-learn 包
scikit-learn 是一個機器學習庫,包含了各種用于機器學習的工具。
這個庫以 BSD 許可證開源,誰都可以免費、自由地使用。在寫作本書時(2019 年 3 月),它的最新版本是 0.20.3。scikit-learn 實現了許多有監督學習和無監督學習的算法,是一套包含了用于評估的工具、方便的函數、示例數據集等的工具套件。在機器學習領域,scikit-learn 已成為事實上的標準庫,它具有兩大優點:一是操作方法統一;二是易于在 Python 中使用。關于 Python 環境的設置和 scikit-learn 的安裝方法,請參考第 5 章。
數據和學習的種類
前面說過,沒有數據,就不能進行機器學習。具體來說,機器學習需要的是什么樣的數據呢?
機器學習需要的是二維的表格形式的數據(根據解決問題的目的不同,存在例外的情況)。表格的列中含有表示數據本身特征的多種信息,行則是由多個信息構成的數據集。接下來,我們看一個更具體的例子:學校的某個社團有 4 名學生,下面的表 1-4 是每個學生的姓名、身高、體重、出生日期和性別信息的數據。
▼表 1-4 表格形式的學生數據

我們思考一下用機器學習進行性別預測的問題。
因為要預測的是性別,所以性別列的男或女的數據就是預測對象。本書把預測對象的數據稱為目標變量。不過,根據分類的場景的不同,有時也稱為標簽或類別標簽數據,對應的英文單詞為 target。
除了性別之外的 4 個列(姓名、身高、體重、出生日期)是用于預測的原始數據。本書將用于預測的原始數據稱為特征值,根據場景的不同,有時也稱為特征變量或輸入變量,對應的英文單詞為 feature。
了解示例數據
我們看一下 scikit-learn 包中內置的示例數據。這里顯示了部分鳶尾花(iris)數據(表 1-5)。Python 生態圈中用于處理數據的工具有 pandas,它常與 scikit-learn 搭配使用。關于使用 pandas 處理數據的方法,請參考后文的“使用 pandas 理解和處理數據”部分。
下面輸出數據的基本信息。
▼示例代碼
import pandas as pd
from sklearn.datasets import load_iris
data = load_iris()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = pd.DataFrame(data.target, columns=["Species"])
df = pd.concat([X, y], axis=1)
df.head()
▼表 1-5 部分鳶尾花數據

列方向上有 sepal length(cm)、sepal width(cm)、petal length(cm)、petal width(cm)、Species 這 5 種信息,意思分別是鳶尾花的萼片長度、萼片寬度、花瓣長度、花瓣寬度、品種。前面 4 列是表示特征的特征值,最后 1 列是目標變量。在這個數據集中,目標變量的值為 0、1、2 這 3 個值之一。
本書在講解的過程中使用了基于 scikit-learn 庫編寫的代碼。下面將講解 scikit-learn 的大致用法。不過本書不會全面講解 scikit-learn 的功能。關于 scikit-learn 的詳細信息,請參考官方文檔和其他圖書。
有監督學習(分類)的例子
本節將介紹基于有監督學習解決分類問題的實現方法。
下面依次來看例題和實現方法。
例題
例題采用的是美國威斯康星州乳腺癌數據集。這個數據集中包含 30 個特征值,目標變量的值為“良性”或者“惡性”。數據數量有 569 條,其中“惡性”(M)數據 212 條,“良性”(B)數據 357 條。換言之,這是根據 30 個特征值判斷結果是惡性還是良性的二元分類問題。
下面看一下數據長什么樣子(表 1-6)。
▼表 1-6 部分乳腺癌數據

這份數據可以通過 scikit-learn 包讀取。
▼示例代碼
from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
這段代碼用于導入 scikit-learn 內置的讀取數據集的函數,并將所讀取的數據保存在變量 data
中。
接下來,從數據集中取出特征值賦給 X
,取出目標變量賦給 y
。
▼示例代碼
X = data.data
y = data.target
X
由多個特征值向量構成,我們將其作為矩陣處理,因此遵照慣例使用大寫字母作為變量名。y
是目標變量的向量,其元素值的含義為:0 表示惡性(M),1 表示良性(B)。
X
是大小為 569 × 30 的數據,可將其看作 569 行 30 列的矩陣。雖然 y
是向量,但把它當作 569 行 1 列的矩陣后,X
和 y
的行就能一一對應了。比如特征值 X
的第 10 行與目標變量 y
的第 10 個元素相對應(圖 1-7)。

▲圖 1-7 與 y
的第 10 個元素對應
要想詳細了解這個數據集,需要具備相應的醫學知識,但是這里我們僅將其作為數值,對其進行有監督學習的二元分類。特征值共有 30 個,分為平均值、誤差值、最差值 3 類,每類包括 10 項,分別為半徑、紋理、面積等。這次我們著眼于平均值、誤差值、最差值這 3 類數據中的平均值(圖 1-8)。

▲圖 1-8 特征值的種類
▼示例代碼
X = X[:, :10]
這行操作使得只有平均值被重新賦值給了變量 X
,用作特征值的數據現在縮減到了 10 項。
實現方法
下面趁熱打鐵,基于美國威斯康星州乳腺癌數據集創建并訓練進行二元分類的模型。這里使用的分類算法是邏輯回歸。雖然算法名中有“回歸”二字,卻能用于分類,詳細內容請參考 2.3 節。
▼示例代碼
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
注意 在使用 scikit-learn 進行模型的初始化和訓練時,讀者有可能會看到輸出的警告信息。警告信息是 FutureWarning,即對將來有可能會變更的功能的通知,在訓練不收斂時有可能會出現。本書沒有提及警告的輸出,如果讀者在實踐中發現有警告輸出,請根據警告內容采取相應的措施。
為了使用邏輯回歸模型,上面的代碼導入了 scikit-learn 的 LogisticRegression
類,然后創建了 LogisticRegression
類的實例,并將已初始化的模型賦給了 model
。
▼示例代碼
model.fit(X, y)
上面的代碼使用 model
(LogisticRegression
的實例)的 fit
方法訓練模型,方法的參數是特征值 X
和目標變量 y
。
在調用 fit
方法后,model
成為學習后的模型。
▼示例代碼
y_pred = model.predict(X)
上面的代碼使用學習后的模型 model
的 predict
方法對學習時用到的特征值 X
進行預測,并將預測結果賦給變量 y_pred
。
評估方法
下面介紹分類的評估方法。
首先看一下正確率(詳見第 4 章)。這里使用 scikit-learn 的 accuracy_score
函數查看正確率。
▼示例代碼
from sklearn.metrics import accuracy_score
accuracy_score(y, y_pred)
0.9086115992970123
代碼的輸出結果是學習后的模型預測的結果 y_pred
相對于作為正確答案的目標變量 y
的正確率。
這個驗證通常應使用另外準備的一些不用于學習的數據來進行,否則會產生過擬合(overfitting)問題。過擬合是有監督學習的一個嚴重問題。有監督學習追求的是正確預測未知的數據,但是現在輸出的正確率是使用學習時用過的數據計算出來的。這就意味著我們不知道模型對于未用于學習的未知數據的預測性能的好壞,不知道得到的學習后的模型是不是真正優秀。關于過擬合,詳見 4.1 節的“模型的過擬合”部分。
關于評估方法,還有其他問題需要考慮。比如,只看正確率就能判斷結果是否正確嗎?根據數據的特性不同,有些情況下不能保證分類是正確的。這次用的數據中有“惡性”數據 212 條,“良性”數據 357 條,可以說是在一定程度上均衡的數據。
對于“良性”“惡性”極不均衡的數據,光看正確率無法判斷結果是否正確。我們再以另外一組數據為例,看一下 30 歲~ 39 歲人群的癌癥檢測數據。通常來說,診斷為惡性的數據只占整體的百分之幾,大多數人沒有腫瘤或者腫瘤是良性的。對于這樣的數據,如果模型將所有的樣本都判斷為良性的,那么盡管正確率很高,但光看正確率也不能正確評估這個模型(圖 1-9)。

▲圖 1-9 光看正確率無法正確評估模型
關于這些內容,第 4 章會詳細介紹。
無監督學習(聚類)的例子
下面看一下無監督學習的聚類問題的實現方法的各個步驟。與前面一樣,這里我們也使用 scikit-learn 包。
例題
例題采用的是 scikit-learn 包內置的與葡萄酒種類有關的數據集。這個數據集有 13 個特征值,目標變量是葡萄酒種類(表 1-7)。由于這次介紹的是無監督學習的聚類算法,所以不使用目標變量。簡單起見,本次只使用 13 個特征值中的 alcohol(酒精度)和 color_intensity(色澤)兩個特征值(表 1-8)。我們對這個數據集應用 聚類算法,將其分割為 3 個簇。
▼表 1-7 葡萄酒數據的特征值

▼表 1-8 本次使用的兩個特征值

下面使用 scikit-learn 包加載這個數據集。
▼示例代碼
from sklearn.datasets import load_wine
data = load_wine()
上面的代碼用于導入 scikit-learn 內置的讀取葡萄酒數據集的函數,并將讀取的數據保存在變量 data
中。
接著,僅從數據集中選擇 alcohol 列和 color_intensity 列作為特征值賦給 X
。這么做是為了在顯示結果時,只用二維圖形對結果進行可視化。
▼示例代碼
X = data.data[:, [0, 9]]
特征值 X
是 178 行 2 列的數據。
實現方法
下面使用 算法實現聚類。
▼示例代碼
from sklearn.cluster import KMeans
n_clusters = 3
model = KMeans(n_clusters=n_clusters)
上面的代碼導入并使用了實現 算法的
KMeans
類。
初始化 KMeans
類,把它作為學習前的模型賦給變量 model
。通過 n_clusters
參數,指示模型將數據分為 3 個簇。
▼示例代碼
pred = model.fit_predict(X)
上面的代碼用于向學習前的模型 model
的 fit_predict
方法傳入特征值數據。預測結果賦給變量 pred
。
下面看一下賦給 pred
的數據是如何聚類的。
查看結果
這里將聚類的結果可視化。
由于本次使用的特征值只有兩種,所以繪制二維圖形即可實現結果的可視化。圖 1-10 是以圖形展示的聚類結果。圖形中每個數據點對應的是一種葡萄酒。從數據點的顏色可以看出每種酒屬于哪個簇。3 個黃色的星星是各個簇的重心,是這 3 個簇的代表點。

▲圖 1-10 特征值的可視化
原本以酒精度、色澤變量表示的葡萄酒,現在以“屬于哪個簇”這種簡潔直觀的形式展示了出來。此外,要想了解各個簇具有什么特征,只需查看作為代表點的重心的值即可。比如,第 3 個簇的特點是“酒精度低、色澤淡”。
通過 算法實現的聚類是以“將酒精度百分之多少以上的數據分到第 1 個簇”之類的規則進行聚類的,這些規則不是由人預先設置的,而是由算法自動進行聚類得出的。這一點很重要,說明這個算法具有通用性,可應用于葡萄酒之外的數據。
無監督學習的評估方法將在第 3 章介紹各個算法時進行說明,請參考相應內容。
可視化
可視化是利用圖形等把握數據的整體情況的方法。在機器學習領域中,許多場景下需要進行可視化。有時用于了解數據的概況,有時用于以圖形展示機器學習的結果。
這里介紹一下使用 Python 進行可視化的方法,書中也將展示作為可視化結果的圖形等。
工具介紹
這里使用常用的 Python 可視化工具 Matplotlib。Matplotlib 具有許多可視化功能。在可視化時,為了使圖形美觀,需要編寫多行 Python 代碼來設置坐標軸、標簽、布局和配色等。代碼行數的增加容易讓人覺得晦澀難懂,但其實用于輸出圖形的重要部分的代碼只有寥寥幾行。
在使用 Matplotlib 實現可視化后,我們就能很容易地把握數據的偏差和特征等信息,所以要掌握它的用法。
Python 的可視化工具不只有 Matplotlib,還有以下幾種。
pandas
pandas 是處理數組數據的庫,也具有可視化功能。
seaborn
seaborn 在 Matplotlib 的基礎上強化了表現力,用起來更簡單。
Bokeh
Bokeh 使用了 JavaScript,可用于顯示動態圖形。
在瀏覽器上顯示
使用 Jupyter Notebook 可以簡單地在瀏覽器上顯示數據的可視化結果。
Jupyter Notebook 是在 Web 瀏覽器上運行 Python 等語言代碼的環境(圖 1-11)。

▲圖 1-11 在 Jupyter Notebook 上運行 Python 代碼
下面依次來看一下例題及其實現。
在 Jupyter Notebook 上運行 Python 程序,進行機器學習的實驗。Jupyter Notebook 不僅能運行 Python,還可以作為 R 等語言的運行環境。
關于 Jupyter Notebook 的安裝和環境設置方法,請參考第 5 章。
啟動方法
在 Jupyter Notebook 安裝成功后,就可以使用 jupyter
命令了。我們可以從命令提示行和終端運行 jupyter notebook
命令。
$ jupyter notebook
在命令運行后,瀏覽器將自動打開,顯示已運行的當前目錄的文件或文件夾(圖 1-12)。在 Web 瀏覽器上的單元格內輸入程序代碼后,頁面上將顯示運行結果。運行結果為 notebook 格式的文件,以 .ipynb 擴展名保存。用戶還可以在自己的計算機上打開其他人創建的 .ipynb 文件,按順序執行每個單元格并查看其運行結果。也可以查看中間處理的變量,改變條件再次運行以查看不同的結果。

▲圖 1-12 顯示文件列表
此外,把這種文件提交到 GitHub 后,不僅可以分享運行結果,還可以在 GitHub 上以圖形顯示運行結果。
用法
從右上角的 New 菜單選擇 Python 3,可新建 notebook 格式的文件(圖 1-13)。

▲圖 1-13 新建 notebook 文件
Web 瀏覽器將打開新建的文件。
在叫作單元格的輸入框里編寫程序代碼。此外,單元格有不同的種類,可通過界面上的 Code 和 Markdown 等下拉菜單決定單元格的作用。默認選項是 Code,系統將其識別為可運行的單元格(圖 1-14)。

▲圖 1-14 可運行的 notebook
在單元格內輸入程序代碼后,使用 Enter 鍵在單元格內換行,使用 Ctrl 和 Enter 組合鍵運行程序代碼。另外,可使用 Shift 和 Enter 組合鍵運行程序代碼,并移動到下一個單元格。
點擊上部的標題 Untitled,可修改文件的標題(圖 1-15)。Jupyter Notebook 會自動在此處確定的標題后附加擴展名 .ipynb,以此作為文件名創建文件。

▲圖 1-15 修改 notebook 的標題
從菜單選擇 Save and Checkpoint,可保存當前的狀態。
上面簡要地介紹了 Jupyter Notebook 的使用方法。除此之外,它還有很多方便的用法,感興趣的讀者可參考官網、相關的文章和圖書。
圖形的種類和畫法:使用 Matplotlib 顯示圖形的方法
在頁面上顯示圖形
在 Jupyter Notebook 頁面上可顯示圖形。在 Code 單元格內,運行 %matplotlib inline
這個以 %
開始的“魔法”命令后,即使不運行后面將介紹的 show
方法,頁面上也會輸出圖形(圖 1-16)。

▲圖 1-16 在 notebook 內顯示圖形
下面看一下圖 1-16 中的代碼。
▼示例代碼
import numpy as np
import matplotlib.pyplot as plt
上面的代碼為了生成數據而導入了 numpy
,為了顯示圖形而導入了 matplotlib
。NumPy 是以數組形式處理數據并進行高效計算的 Python 第三方包。習慣上分別以別名 np
和 plt
調用 numpy
和 matplotlib
的 pyplot
。
下面以 sin 曲線為例,顯示其圖形。
▼示例代碼
x1 = np.linspace(-5, 5, 101)
y1 = np.sin(x1)
x1
中保存的是為顯示 sin 曲線而生成的從 -5 到 5 的 101 個數據。y1
中保存的是使用 NumPy 的sin
函數生成的數據。
下面以用 Matplotlib 繪制 sin 曲線的圖形為例進行說明。
最簡單的顯示圖形的方法是 plt.plot(x1, y1)
(圖 1-17)。
▼示例代碼
plt.plot(x1, y1)

▲圖 1-17 sin 曲線的圖形
下面介紹使用 Matplotlib 繪制圖形的代碼的標準寫法。前面只是簡單地調用了 plt.plot
,這種做法沒有明確輸出對象,只是聲明“在這里繪圖”,比較粗糙。嚴密的做法應為先創建要繪制的對象,再輸出圖形,代碼及圖形如下(圖 1-18)。
▼示例代碼
fig, ax = plt.subplots()
ax.set_title("Sin")
ax.set_xlabel("rad")
ax.plot(x1, y1)
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles, labels)
plt.show()

▲圖 1-18 先創建對象再輸出圖形
上面的代碼包含了顯示標簽和坐標軸名稱等信息的處理,因此變成了 7 行,但其中用于顯示圖形的主要代碼只有 ax.plot(x1, y1)
一行。雖然這種方法更受歡迎,不過如果要輸出簡單的圖形,可以使用 plt.plot(x1, y1)
形式。請記住,方法共有兩種:一種是 plt.plot
這種簡易方法;另一種是 ax.plot
這種嚴密地面向對象進行聲明的方法。最后運行 plt.show()
。如果已運行魔法命令 %matplotlib inline
,那就不用特意調用 show
了。為了使代碼在 Jupyter Notebook 之外的環境中也能輸出圖形,這里特意編寫了這一行代碼。不管寫不寫這行代碼,圖形都會在 Jupyter Notebook 中顯示。
繪制各種圖形
首先生成用于顯示圖形的數據。
▼示例代碼
x2 = np.arange(100)
y2 = x2 * np.random.rand(100)
x2
中保存的是元素為“從 0 到 99 的整數”的數組。
y2
中保存的是元素為“在從 0 到 1 的范圍內隨機選出的 100 個數據”的數組與剛才的變量 x2
相乘的結果。
下面將使用這兩個變量繪制各種圖形。
接下來要展示的是通過 plt
變量聲明圖形形式的簡易方法的示例。對于前面代碼中明示圖形位置的 ax
變量,我們也可以用同樣的方式輸出其圖形。
散點圖
使用
scatter
方法繪制散點圖。▼示例代碼
plt.scatter(x2, y2)
x2
和y2
的散點圖如圖 1-19 所示。▲圖 1-19 散點圖
直方圖
使用
hist
方法繪制直方圖。▼示例代碼
plt.hist(y2, bins=5)
設
y2
的直方圖的bin
為 5,輸出的圖形如圖 1-20 所示。▲圖 1-20 直方圖
柱狀圖
使用
bar
方法繪制柱狀圖。plt.bar(x2, y2)
輸出的柱狀圖如圖 1-21 所示。
▲圖 1-21 柱狀圖
折線圖
使用
plot
方法繪制折線圖。▼示例代碼
plt.plot(x2, y2)
x2
和y2
的折線圖如圖 1-22 所示。▲圖 1-22 折線圖
箱形圖
使用
boxplot
方法繪制箱形圖。▼示例代碼
plt.boxplot(y2)
用箱形圖輸出
y2
的數據,如圖 1-23 所示。箱形圖是查看數據分布的優秀的可視化方法。▲圖 1-23 箱形圖
紅酒數據集
下面對 scikit-learn 內置的紅酒數據進行可視化。
▼示例代碼
from sklearn.datasets import load_wine
data = load_wine()
加載與紅酒有關的數據,并將數據保存在變量 data
中。
▼示例代碼
x3 = data.data[:, [0]]
y3 = data.data[:, [9]]
將要顯示的索引為 0 的 alcohol(酒精度)和索引為 9 的 color_intensity(色澤)數據分別賦值給 x3
和 y3
。
下面輸出散點圖(圖 1-24)。
▼示例代碼
plt.scatter(x3, y3)

▲圖 1-24 紅酒數據集的散點圖
下面輸出 y3
的直方圖(圖 1-25)。
▼示例代碼
plt.hist(y3, bins=5)

▲圖 1-25 的直方圖
通過可視化查看與紅酒數據集相關的兩個圖形,我們可以了解數據的特性。
使用 pandas 理解和處理數據
注意 在進行機器學習時,有時會查看特征值、對數據進行取舍選擇或再加工等。下面將介紹如何使用 pandas 庫的數據可視化的方便功能去了解數據的情況。已經知道 pandas 基本用法的讀者和想先了解機器學習算法的讀者,跳過這一部分也沒關系。
下面介紹使用 pandas 庫進行數據可視化的方便功能。
▼示例代碼
import pandas as pd
上面的代碼導入了常用于機器學習數據的變形等操作的 pandas
。與 numpy
的 np
一樣,習慣上用 pd
來調用它。
▼示例代碼
from sklearn.datasets import load_wine
data = load_wine()
df_X = pd.DataFrame(data.data, columns=data.feature_names)
然后將紅酒數據轉換為 pandas 的 DataFrame。
DataFrame 可以方便地處理像 Excel 工作表那樣的二維數據。df_X
是 DataFrame 形式的特征值。
下面的代碼調用 head
方法輸出了數據集前 5 行的數據(表 1-9),用于查看數據集中包含了什么樣的數據。
▼示例代碼
df_X.head()
▼表 1-9 紅酒數據

接著將紅酒數據的目標變量轉換為 pandas 的 DataFrame。
▼示例代碼
df_y = pd.DataFrame(data.target, columns=["kind(target)"])
接下來看一下轉換后的數據。做法和剛才相同:調用 head
方法。從表 1-10 中可以看出,df_y
是名副其實的目標變量數據。
▼表 1-10 紅酒數據的目標變量

▼示例代碼
df_y.head()
為了便于使用,我們將這些數據合并在一起。下面使用 pandas 的 concat
將特征值 df_X
和目標變量 df_y
合并。
▼示例代碼
df = pd.concat([df_X, df_y], axis=1)
輸出數據的前幾行看看。下面的代碼使用 head
方法輸出了合并結果的前 5 行(表 1-11)。這樣就得到了包含特征值和目標變量的數據。
▼示例代碼
df.head()
▼表 1-11 紅酒數據的特征值和目標變量

接下來,通過可視化和數理統計來分析這份數據。
圖 1-26 是以直方圖的形式輸出的 alcohol 列的數據。由于下面的代碼沒有指定 bins
參數,所以程序使用默認的參數值 10,輸出了有 10 個區間的直方圖。
▼示例代碼
plt.hist(df.loc[:, "alcohol"])

▲圖 1-26 有 10 個區間的直方圖
圖 1-27 是以箱形圖顯示的同一個 alcohol 列的數據。接下來開始使用 pandas 的統計功能。
▼示例代碼
plt.boxplot(df.loc[:, "alcohol"])

▲圖 1-27 以箱形圖顯示的 alcohol 列的數據
下面的代碼使用 corr
方法匯總計算并輸出了相關系數(表 1-12)。相關系數越接近于 1,越表明數據之間是正相關關系;越接近于 -1,越表明數據之間是負相關關系。換言之,如果相關系數在 0 左右,表明數據列之間的相關性很低。
▼示例代碼
df.corr()
▼表 1-12 相關系數

下面再介紹一個查看數據情況的方法。
describe
方法用于輸出每列的統計信息。輸出的統計信息從上到下依次為行數、平均值、標準差、最小值、25 百分位數、中位數、75 百分位數、最大值(表 1-13)。從統計信息可以看出每列包含的數據具有何種特性、有沒有缺損等信息。
▼示例代碼
df.describe()
▼表 1-13 統計信息

下面使用 pandas 的功能將所有列之間的關系可視化(圖 1-28)。
使用 scatter_matrix
輸出散點圖矩陣。這里將 14 列全都輸出了出來(圖 1-28)。
▼示例代碼
from pandas.plotting import scatter_matrix
_ = scatter_matrix(df, figsize=(15, 15))

▲圖 1-28 各列的關聯性
下面只查看部分列的關聯性。
下列代碼輸出的是從所有散點圖矩陣中選出的索引為 0 的列、索引為 9 的列和最后一列的關聯性(圖 1-29)。通過像這樣減少散點圖矩陣輸出的列,能夠看出更細致的情況。
▼示例代碼
_ = scatter_matrix(df.iloc[:, [0, 9, -1]])

▲圖 1-29 顯示重要的關聯性
本章小結
本章前半部分介紹了機器學習的基礎內容:機器學習包括有監督學習和無監督學習等,存在與分類問題、回歸問題、降維和聚類對應的算法。
后半部分介紹了機器學習庫 scikit-learn,并列舉了有監督學習(分類)和無監督學習(聚類)的實現示例。最后,我們了解了使用可視化工具 Matplotlib 顯示圖形的方法。
到這里,事前準備工作就結束了。從下一章開始,我們將正式學習機器學習的算法。
- Greenplum:從大數據戰略到實現
- 正則表達式必知必會
- Voice Application Development for Android
- Creating Mobile Apps with Sencha Touch 2
- Learning Spring Boot
- Libgdx Cross/platform Game Development Cookbook
- 大數據算法
- iOS and OS X Network Programming Cookbook
- 視覺大數據智能分析算法實戰
- 大數據數學基礎(Python語言描述)
- MySQL數據庫技術與應用
- Python數據分析從小白到專家
- SIEMENS數控技術應用工程師:SINUMERIK 840D-810D數控系統功能應用與維修調整教程
- Spring MVC Beginner’s Guide
- 云計算寶典:技術與實踐