Python 機器學習 (Scikit-Learn Ch2)

常用網站

PDF 下載

線上文件

Machine learning 簡化流程圖

快速開始

這邊是根據官網的Quick Start章節做個筆記,內容並非一定正確

主要是介紹machine learning的一些專屬名詞,並舉一些實際例子

目前主要把machine learning分為兩大類,其中supervised有兩種演算法

unsupervised有一種演算法

1
2
3
4
5
supervised learning
- classification
- regression
unsupervised learning
- clustering

Supervised 就是你先給一些輸入資料以及你預期的輸出結果(答案)

那程式就會根據你給的東西來產生一個公式

產生公式之後你再給新的輸入資料

程式就會根據公式產生輸出結果,此公式也稱為模型 Model

classification 手寫辨識用此演算法,能夠將不同手寫的字對應到有限的字

簡單的說就像分類一樣,電腦會將輸入的資料分類

regression 你期望的輸出是由一個或多個變數來表示的

Unsupervised 就是只有給你輸入資料沒有告訴你答案,所以必需根據這些資料來找出一些線索

此種演算法稱為clustering

dataset 範例

scikit-learn 預設有一些 dataset,dataset 其實就是一些數據而已

例如全班的名字身高體重也算是一種 dataset

而 scikit-learn 中有包含Iris flower data set

Iris是一種花,中文為鳶尾花?

2017_05_30_1.jpg

Iris flower data set就是此種花的資料,例如花瓣寬度、長度等等

Iris flower data set 可參考

另外還有digits datasets以及boston house prices dataset

1
2
classification 使用 iris and digits dataset
regression 使用 boston house prices dataset

範例程式如下

1
2
3
4
5
6
from sklearn import datasets
import numpy as np

# Load Data Set
iris = datasets.load_iris()
digits = datasets.load_digits()

digits 是字典類型,print 出來如下

1
2
3
4
5
6
7
8
9
10
11
12
{
'DESCR': 'Optical Recognition of Handwritten Digits Data Set\n'
......,
'data': array([[ 0., 0., 5., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 10., 0., 0.],
......,
'images': array([[[ 0., 0., 5., ..., 1., 0., 0.],
[ 0., 0., 13., ..., 15., 5., 0.],
......,
'target': array([0, 1, 2, ..., 8, 9, 8]),
'target_names': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
}

我們需要的是data,這裡可以用print( len(digits.data) )看有幾筆資料

目前總共是1797筆 (list),你也可以把其中一筆 print 出來看

每一筆資料含 8*8 = 64 筆元素

1
2
3
4
5
6
7
8
9
10
11
array = np.array( digits.data[0] )
print( array.reshape(-1,8) )

[[ 0. 0. 5. 13. 9. 1. 0. 0.]
[ 0. 0. 13. 15. 10. 15. 5. 0.]
[ 0. 3. 15. 2. 0. 11. 8. 0.]
[ 0. 4. 12. 0. 0. 8. 8. 0.]
[ 0. 5. 8. 0. 0. 9. 8. 0.]
[ 0. 4. 11. 0. 1. 12. 7. 0.]
[ 0. 2. 14. 5. 10. 12. 0. 0.]
[ 0. 0. 6. 13. 10. 0. 0. 0.]]

我們也可以直接用shape屬性來觀察

1
2
3
4
5
digits          = datasets.load_digits()
digits_data = digits.data
print(digits_data.shape)

# 輸出: (1797, 64)

表示有 1797 筆list (digits.data[0],digits.data[1] … digits.data[1796])

而每筆list有包含 64 個元素

學習和預測

estimator在 python 是一個類別sklearn.svm.SVC

此類別有實作fit(X, y)predict(T)方法

1
2
3
4
from sklearn import datasets, svm
import numpy as np

clf = svm.SVC(gamma=0.001, C=100.)

目前參數gamma的值是手動設定的,但是你也可以用grid searchcross validation

來找出更合適的值,這裡將變數命名為clf是當作classifier的簡稱

參考

https://www.datacamp.com/community/tutorials/scikit-learn-python#gs.hozWP1g