當前位置:
首頁 > 最新 > Python 機器學習 Scikit-learn 完全入門指南

Python 機器學習 Scikit-learn 完全入門指南

本文來自作者劉明在GitChat上分享 「Python 機器學習 Scikit-learn 完全入門指南」

編輯 哈比

使用 Python 的科研人員,幾乎都用過 SciPy。

SciPy 是一個開源的 Python 科學計算庫,其中涵蓋了科學計算中的各種工具,包括統計、積分、插值、最優化,圖像處理等等。

SciPy 可以與 NumPy 合作,高效地進行矩陣計算。而各種不同領域的開發者們,在 SciPy 的基礎上發展出許多分支版本,統一稱為 Scikits,即 SciPy 工具箱。

而其中應用最廣,也是機器學習領域最知名的分支版本,就是本文的主角 Scikit-learn。

Scikit-learn 是基於 Numpy 與 SciPy 兩大著名工具包,通常與 pandas、Matplotlib 等開源數據處理框架合作,進行數據挖掘任務。

本文將介紹安裝和運行 Scikit-learn 的大體步驟,而後重點講解 Scikit-learn 框架的幾大功能。本文的操作理論上在 Python 3.x 版本下通用,但目前建議在 Python 3.6 版本下使用。

由於本文面向的對象為初學者,大多使用 Windows 系統,所以本文的所有操作,建立在為 64 位的 Windows 10 系統上。

安裝和導入 Scikit-learn

此步僅為了文章對 Python 小白友好,老鳥請大膽跳過此步,直接開始學習下面的內容。

由於 Scikit-learn 是基於 Numpy 與 Scipy 等包的支持,所以需要在安裝 Scikit-learn 之前安裝這些工具包,由於安裝這些工具包的過程繁瑣,個人建議使用環境管理工具進行安裝。

本文的安裝是基於 Anaconda 進行的,下載時請注意選擇 Python 3.6 版本。由於安裝過程極其簡單,這裡就不再贅述。

安裝好 Anaconda 後,可以使用 pip 命令直接安裝 Scikit-learn,命令如下:

pip install scikit-learn

在 Linux 下,可使用以下命令:

$ sudo pip install -U scikit-learn

前面寫上 sudo 是為了防止安裝過程中遇到許可權問題,如果已取得管理員許可權可以省略。

導入 Scikit-learn 也很簡單,Scikit-learn 的簡寫為 sklearn,所以在 Python 中導入 Scikit-learn 的語法為:

importsklearn

當然,通常的使用以下方法。

fromsklearnimportxxx

簡單無腦吧!我都覺得講解安裝有點多此一舉。

數據預處理

本文的重點為 Scikit-learn,所以這裡不過多講解 pandas 的內容。

假設,這裡有一個 Data.csv 數據集,內容如下圖,10 行數據,包括 3 個特徵:國家、年齡、薪水,預測的目標為:是否購買了該產品。

先導入數據集,並將特徵與目標分別存入 X 與 y 中,命令如下:

importpandasaspddataset = pd.read_csv("Data.csv")X = dataset.iloc[:,:-1].valuesy = dataset.iloc[:,3].values

這時,X 的值為:

array([["France", 44.0, 72000.0],["Spain", 27.0, 48000.0],["Germany", 30.0, 54000.0],["Spain", 38.0, 61000.0],["Germany", 40.0, nan],["France", 35.0, 58000.0],["Spain", nan, 52000.0],["France", 48.0, 79000.0],["Germany", 50.0, 83000.0],["France", 37.0, 67000.0]])

y 的值為:

array(["No", "Yes", "No", "No", "Yes", "Yes", "No", "Yes", "No", "Yes"])

可以看出,Age 與 Salary 中都有缺失值。補全缺失值,可以使用 Scikit-learn 庫的預處理工具 Imputer。

sklearn.preprocessing.Imputer,將缺失值替換為均值、中位數、眾數,下面的例子使用均值作為替換。

fromsklearn.preprocessingimportImputerimputer = Imputer(missing_values ="NaN", strategy ="mean", axis =)imputer.fit(X[:,1:3])X[:,1:3] = imputer.transform(X[:,1:3])

下面,來具體解析這段代碼的含義。

第 1 行,導入 Imputer,其中 Imputer 是一個對象(class)。

第 2 行,實例化 Imputer 類,並命名為 imputer。Imputer 在實例化時,可以傳入如下幾個值:

第 3 行,imputer 實例使用 fit 方法,對特徵集 X 進行分析擬合。擬合後,imputer 會產生一個 statistics_ 參數,其值為 X 每列的均值、中位數、眾數。

第 4 行,使用 imputer 的 transform 方法填充 X 的值,並重新賦值給 X。

sklearn 大多數據預處理工具的使用方法,都與此相同,主要有以下幾點。

1)導入

fromsklearn.preprocessingimportXxx

2)創建實例

xxx = Xxx(a="xxx", b="yyy", c=.......)

3)對數據集進行分析擬合

xxx.fit(X_data)

4)對數據集進行變換

X_data = xxx.transform(X_data)

可以看出,順序是:

除了 Imputer,接下來再拿其他的預處理工具舉例子。

Binarizer:二值化工具,將數據分為 0 和 1,其只需要傳入一個參數 threshold(閾值),其小於或等於該值的數據會變為 0,大於該值的數據會變為 1。

舉一個小例子,如下:

>>>X_data = np.array([[0.3,0.6], [0.7,0.5]])#創建數據集>>>fromsklearn.preprocessingimportBinarizer#導入庫>>>binarizer = Binarizer(threshold=0.5)#實例化>>>binarizer.fit(X_data)#fitBinarizer(copy=True, threshold=0.5)>>>X_data = binarizer.transform(X_data)#transform>>>X_dataarray([[0.,1.],[1.,0.]])

簡單吧,與我們先前給出的步驟完全相同,即:

請記住這個順(套)序(路)!

我們再看一個例子。

LabelEncoder:標籤編碼工具,將標籤編碼為數字,其順序排列基於 ASCII 碼。比如,將 「amsterdam」、「paris」、「tokyo」 分別標記為 0、1、2。

下面舉一個官方給的例子。

>>>le = preprocessing.LabelEncoder()>>>le.fit(["paris","paris","tokyo","amsterdam"])LabelEncoder()>>>le.transform(["tokyo","tokyo","paris"])array([2,2,1]...)>>>list(le.inverse_transform([2,2,1]))#反向變換["tokyo","tokyo","paris"]

依舊是:

你記住了嗎?

其餘預處理工具,如 OneHotEncoder、MaxAbsScaler、PolynomialFeatures 等等,使用方法都與此相同,僅僅是傳入的參數有差異。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

零基礎小白,學習Python讓你也擁有大神一般的技能!
拿去!助你贏得百萬大獎的Python代碼已上線

TAG:Python |