[ML, Python] scikit-learn (revision 1)
其實雖然常常自虐自己寫 Machine Learning 的 algorithm
但實際上 ML 演算法太多, 而且加上一個實驗的整個步驟很多事情要做
所以沒事就會去網路上查查一些 off-the-shelf 的軟體來用
那以前在學校比較常用的是 Weka, 程式碼是以 Java 建構的
在學期間有個 project 是用 Weka 去修改 code 完成的
不過因為 Weka 算是滿交錯複雜, 很多 function 之間都互相有一定關係
所以到後來都只是使用上居多, 修改相對少
除了 Weka, 也有用過 Matlab 上的, 不過離開學校就沒機會了
那後來還是對 Python 比較有愛, Python 其實也有不少人寫 ML 來用
不過截至目前為止, 我找到比較完整而且方便使用的, 應該就是 Scikit - Learn 了
(念法 Sci - Kit - Learn)
官網: http://scikit-learn.org/stable/
這篇來簡單講一點內容, 跟稍微提一下怎麼使用他的演算法
此篇應該會一值更新, 因為還有很多功能沒放上
Install - sci-kit learn
首先, 安裝請看官網上的此篇 http://scikit-learn.org/stable/install.html
下列只是此篇重新在描述而已
其實用 Ubuntu 系列的可能會比較方便, 可以利用
那他還有建議因為一些範例可能會用到畫圖功能, 另外一個套件可以裝的話也盡量安裝
或者已經有裝 python 的 pip, 可以直接用 pip or easy_install 安裝
阿想不開的可以從這裡 https://pypi.python.org/pypi/scikit-learn/ 下載 Source 自己安裝
Windows的就看官網說明吧, 難得我覺得 Windows 比較麻煩安裝
Build-in Datasets - sci-kit learn
官網: http://scikit-learn.org/stable/tutorial/statistical_inference/settings.html
Scikit 內建了一點點的 dataset, 可以讓你簡易的操作使用
他內建了有 iris, digits, boston house price
那使用這內建的 dataset 也很簡單
import 之後, 可以用 iris = datasets.load_iris() 將 iris dataset 呼叫出來給 iris 變數
然後可以用 iris.data 將 data 傳出來, 會是個矩陣, 也可以用 iris.shape 傳出兩個維度
而 isi.target 則是可以可以將 iris 這個 dataset 每個 input 的 class 給傳出來
不過實務上, data 都還是要自己處理的機會比較高, 所以給個使用範例
那我最常用的是 Decision Tree & Random Forest
這邊給個跟官網差不多的範例
Decision Tree - sci-kit learn
Official Site: http://scikit-learn.org/dev/modules/tree.html
使用相當簡單阿, 三歲小孩都會
一行 import, 一行準備好 input, 一行 class label, 一行 set decision tree instance, 一行 train, 打完收工!!
其實 scikit-learn 的演算法使用上都很接近
因為 decision tree 在 sklearn 底下的 tree, 所以要先 import
然後這邊 X 就是你的每個 instance 啦 (範例有兩個 instance)
Y 則是這兩個 instance 的 class label
接著我們要調用 clf = tree.DecisionTreeClassifier()
接著用 clf.fit 傳入 X 跟 Y, 就 training 完畢啦
要拿來 predict 也很簡單, 假設要判斷一個 instance 為 [2., 2.] 是甚麼 class ?
print result[0] 就可以看到猜測的答案了
那使用 Random Forest 也差不多
Random Forest - sci-kit learn
Official Site: http://scikit-learn.org/dev/modules/generated/sklearn.ensemble.RandomForestClassifier.html
範例如下
近乎一樣的範例, 差異只有 RandomForest 是被分類在 ensemble 底下而非 tree 底下
其餘使用基本上都一模一樣
但是 Random Forest 的可調參數就多了
詳細要看官網說明, 簡單講就是可以調整 tree 的數量, information gain 的選擇, 深度, leaf 數, feature 取法...etc 眾多可調的參數
Model Save - sci-kit learn
那要如何將學習好的 model 儲存起來呢?
官方網站有提供兩個辦法: http://scikit-learn.org/0.10/tutorial.html#model-persistence
1. 這邊我用內建的 cPickle 來儲存
library
儲存
讀取
cls 就跟原本的 classifier 用法一樣
2. 用官方內建 library 來儲存
library
儲存
讀取
但實際上 ML 演算法太多, 而且加上一個實驗的整個步驟很多事情要做
所以沒事就會去網路上查查一些 off-the-shelf 的軟體來用
那以前在學校比較常用的是 Weka, 程式碼是以 Java 建構的
在學期間有個 project 是用 Weka 去修改 code 完成的
不過因為 Weka 算是滿交錯複雜, 很多 function 之間都互相有一定關係
所以到後來都只是使用上居多, 修改相對少
除了 Weka, 也有用過 Matlab 上的, 不過離開學校就沒機會了
那後來還是對 Python 比較有愛, Python 其實也有不少人寫 ML 來用
不過截至目前為止, 我找到比較完整而且方便使用的, 應該就是 Scikit - Learn 了
(念法 Sci - Kit - Learn)
官網: http://scikit-learn.org/stable/
這篇來簡單講一點內容, 跟稍微提一下怎麼使用他的演算法
此篇應該會一值更新, 因為還有很多功能沒放上
Install - sci-kit learn
首先, 安裝請看官網上的此篇 http://scikit-learn.org/stable/install.html
下列只是此篇重新在描述而已
其實用 Ubuntu 系列的可能會比較方便, 可以利用
sudo apt-get install build-essential python-dev python-numpy python-setuptools python-scipy libatlas-dev
那他還有建議因為一些範例可能會用到畫圖功能, 另外一個套件可以裝的話也盡量安裝
sudo apt-get install python-matplotlib
或者已經有裝 python 的 pip, 可以直接用 pip or easy_install 安裝
pip install -U scikit-learn
easy_install -U scikit-learn
阿想不開的可以從這裡 https://pypi.python.org/pypi/scikit-learn/ 下載 Source 自己安裝
python setup.py install
Windows的就看官網說明吧, 難得我覺得 Windows 比較麻煩安裝
Build-in Datasets - sci-kit learn
官網: http://scikit-learn.org/stable/tutorial/statistical_inference/settings.html
Scikit 內建了一點點的 dataset, 可以讓你簡易的操作使用
他內建了有 iris, digits, boston house price
那使用這內建的 dataset 也很簡單
from sklearn import datasets iris = datasets.load_iris() data = iris.data m, n = data.shape label = data.target
import 之後, 可以用 iris = datasets.load_iris() 將 iris dataset 呼叫出來給 iris 變數
然後可以用 iris.data 將 data 傳出來, 會是個矩陣, 也可以用 iris.shape 傳出兩個維度
而 isi.target 則是可以可以將 iris 這個 dataset 每個 input 的 class 給傳出來
不過實務上, data 都還是要自己處理的機會比較高, 所以給個使用範例
那我最常用的是 Decision Tree & Random Forest
這邊給個跟官網差不多的範例
Decision Tree - sci-kit learn
Official Site: http://scikit-learn.org/dev/modules/tree.html
使用相當簡單阿, 三歲小孩都會
from sklearn import tree X = [[0, 0], [1, 1]] Y = [0, 1] clf = tree.DecisionTreeClassifier() clf = clf.fit(X, Y)
一行 import, 一行準備好 input, 一行 class label, 一行 set decision tree instance, 一行 train, 打完收工!!
其實 scikit-learn 的演算法使用上都很接近
因為 decision tree 在 sklearn 底下的 tree, 所以要先 import
然後這邊 X 就是你的每個 instance 啦 (範例有兩個 instance)
Y 則是這兩個 instance 的 class label
接著我們要調用 clf = tree.DecisionTreeClassifier()
接著用 clf.fit 傳入 X 跟 Y, 就 training 完畢啦
要拿來 predict 也很簡單, 假設要判斷一個 instance 為 [2., 2.] 是甚麼 class ?
result = clf.predict([[2., 2.]])
print result[0] 就可以看到猜測的答案了
那使用 Random Forest 也差不多
Random Forest - sci-kit learn
Official Site: http://scikit-learn.org/dev/modules/generated/sklearn.ensemble.RandomForestClassifier.html
範例如下
from sklearn import ensemble X = [[0, 0], [1, 1]] Y = [0, 1] clf = ensemble.RandomForestClassifier() clf = clf.fit(X, Y) result = clf.predict([[2., 2.]])
近乎一樣的範例, 差異只有 RandomForest 是被分類在 ensemble 底下而非 tree 底下
其餘使用基本上都一模一樣
但是 Random Forest 的可調參數就多了
class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_density=0.10000000000000001, max_features='auto', bootstrap=True, compute_importances=False, oob_score=False, n_jobs=1, random_state=None, verbose=0)
詳細要看官網說明, 簡單講就是可以調整 tree 的數量, information gain 的選擇, 深度, leaf 數, feature 取法...etc 眾多可調的參數
Model Save - sci-kit learn
那要如何將學習好的 model 儲存起來呢?
官方網站有提供兩個辦法: http://scikit-learn.org/0.10/tutorial.html#model-persistence
1. 這邊我用內建的 cPickle 來儲存
library
import cPickle
儲存
with open('classifier.pkl', 'wb') as fp: cPickle.dump(cls, fp)
讀取
with open('classifier.pkl', 'rb') as fp: cls = cPickle.load(fp)
cls 就跟原本的 classifier 用法一樣
2. 用官方內建 library 來儲存
library
from sklearn.externals import joblib
儲存
joblib.dump(clf, 'classifier.pkl', compress=9)
讀取
cls = joblib.load(clf, 'classifier.pkl')那個 compress 就是可以壓縮 model 的結果, 可以試試看不要加 compress, 檔案會超級超級大
留言
張貼留言