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代碼已上線
TAG:Python |