讓機器學習人類分類—Scikit-learn(獻給初學者的機器學習案例)

  • 2019 年 12 月 19 日
  • 筆記

作者Nature

出品AI機器思維

人類一直夢想讓機器幫助人類提升生活品質,解放人類是人類科技應用的一個目標。

通過python中的模組Scikit-learn是機器學習領域一個非常強大的模組,它是在Numpy、Scipy和Matplotlib三個模組上編寫的,是數據挖掘和數據分析的一個簡單的工具。

具有六大功能:分類(Classification)、回歸(Regression)、聚類(Clustering)、降維(Dimensionality Reduction)、模型選擇(Model Selection)和預處理(Preprocessing)。

通過機器學習演算法,我們可以對 n個樣本(Sample)的數據集進行預測未知數據的屬性。

現實中的問題有歷史的標準數據和無標準的數據,對這些數據的預測在統計學中稱為有監督學習(Supervised Learning)和無監督學習(Unsupervised Learning)。

有監督學習(Supervised Learning):是指數據中已經包含了想要預測的屬性,即目標變數,分類(Classification)和回歸(Regression)都屬於有監督學習。

分類:通過從已標記類別的數據學習,來預測未標註數據的分類。

回歸:根據數據輸出一個或多個連續的變數。

無監督學習(Unsupervised Learning):無監督學習的訓練數據包括了輸入向量的集合,但沒有相應的目標變數。

從未知發掘數據中相似樣本的分組,也稱為聚類(Clustering);也可以通過數據集合向量確定輸入樣本空間中的數據分布,稱為密度估計(Density Estimation);還可以將數據從高維空間投射到兩維或三維空間,從而可以方便數據可視化。

首先安裝sklearn模組。通過pip install sklearn語句安裝。

Sklearn有一些標準的數據集,就像SAS一樣在一些邏輯庫里自帶了幫助學習者學習的數據集,從而方便學習者學習。

比如用於分類的數據集digits數據集和iris數據集以及用於回歸的波士頓房價(Boston Houser Prices)數據集等。大家看下面我要導入數據集截圖,就能看到自帶的數據集,直接可以引用學習。

本案例以digists數據集為例,這個數據集是給定一個8*8像素數組,通過程式預測這64個像素代表那個數字。下面程式是導入並載入數據集到python環境中,通過print()查看數據集分類樣本的數據特徵:

運行結果可以查看到輸出的數據集:

上面的程式語句幫助查看數據變數類型,執行後結果顯示如下:

我們可以看到有監督學習分類的目標變數,下面程式查看目標變數:

運行後程式輸出的目標分類變數為10個數字的目標分類變數集:

案例完整程式如下:

程式運行後預測出來的數字為8:

本案例中模型參數說明:

gamma:核函數的參數,當核函數為rbf、poly和sigmoid可用,默認為auto,自動設置為1/n_features(分類數)。越大,支援向量越少。gamma值越小,支援向量越多。

C: float懲罰參數,默認值為1.0:對分類精度的設置,分錯情況下的懲罰係數,C越大即對分錯樣本的懲罰程度越大,因此在訓練樣本中準確率越高;C越小,容許訓練樣本中有一些誤分類錯誤樣本,泛化能力強。對於訓練樣本帶有雜訊的情況,一般採用後者,把訓練樣本集中錯誤分類的樣本作為雜訊。

說明:上面整個程式運用機械學習模型根據因變數輸出預測目標變數的輸出。經過有標準的訓練得到目標變數,新的輸出套入並載入到模型中,進行分類預測。通過給定一幅新像素圖案,預測其表示的數字。對於這個有監督學習的分類問題,總共有10個可能的分類,分類數字為0至9的數字。首先我們要訓練一個預測器來預測未知樣本所屬分類。

在sklearn中,分類的預測器是一個python對象,具有fit(x,y)(用給定的數據訓練模型)和predict(x)方法預測樣本的類別。本案例中這個預測器的例子是sklearn.svm.SVC,實現了支援向量機分類。

Svc中模型參數設置說明可以參考幫助文檔,下面是常用的模型參數說明:

cache_size:核函數快取大小,默認為200(MB)。

class_weight:每個類所佔的權重,不同的類設置不同的懲罰參數C, 默認為預設(自適應)。

coef0:核函數的常數項,當核函數為poly和sigmoid可用,默認為0.0。

decision_function_shape:處理多分類問題,一對一用ovo,一對多用ovr,默認為ovr。

degree:核函數的維度,當核函數為poly 可用,默認為3。

kernel:核函數,可選linear、poly、rbf、sigmoid、precomputed,默認為rbf。

max_iter:最大迭代次數,默認為-1(無限制)。

probability:是否採用概率估計,默認為False。

random_state:數據隨機洗牌時的種子值,默認為預設(使用np.random)。

shrinking:是否採用神秘方法(我是不懂-_-),默認為true。

tol:停止訓練的容許度,默認為0.001。

verbose:允許詳細輸出,多執行緒不建議開啟,默認為False。

主要調整的參數有:C、gamma和kernel。

希望大家根據案例學習,同時對案例中的參數自己親自動手實驗,只有這樣才能真正領悟機器學習演算法。