Ex 1: Pipeline Anova SVM
http://scikit-learn.org/stable/auto_examples/feature_selection/feature_selection_pipeline.html
此機器學習範例示範佇列的使用,依照順序執行ANOVA挑選主要特徵,並且使用C-SVM來計算特徵的權重與預測。
使用
make_classification
建立模擬資料使用
SelectKBest
設定要用哪種目標函式,以挑出可提供信息的特徵使用
SVC
設定支持向量機為分類計算以及其核函數用
make_pipeline
合併 SelectKBest物件 與 SVC物件用
fit
做訓練,並且以predict
來做預測
(一)建立模擬資料
在選擇特徵之前需要有整理好的特徵與目標資料。在此範例中,將以make_classification
功能建立特徵與目標。該功能可以依照使用者想模擬的情況,建立含有不同特性的模擬資料,像是總特徵數目,其中有幾項特徵含有目標資訊性、目標聚集的程度、目標分為幾類等等的特性。
在本範例,我們將X建立為一個有20個特徵的資料,其中有3種特徵具有目標資訊性,0個特徵是由目標資訊性特徵所產生的線性組合,目標分為4類,而每個分類的目標分布為2個群集。
(二)選擇最好的特徵
在機器學習的訓練之前,可以藉由統計或指定評分函數,算出特徵與目標之間的關係,並挑選出最具有關係的特徵作為訓練的素材,而不直接使用所有特徵做為訓練的素材。
其中一種方法是統計特徵與目標之間的F-score做為評估分數,再挑選F-score最高的幾個特徵作為訓練素材。我們可以用 SelectKBest()
來建立該功能的運算物件。
SelectKBest()
的第一項參數須給定評分函數,在本範例是設定為f_regression
。第二項參數代表選擇評估分數最高的3個特徵做為訓練的素材。建立完成後,即可用物件內的方法.fit_transform(X,y)
來提取被選出來的特徵。
(三)以佇列方式來設定支持向量機分類法運算物件
Scikit-lenarn的支持向量機分類涵式庫提供使用簡單易懂的指令,只要用 SVC()
建立運算物件後,便可以用運算物件內的方法 .fit()
與 .predict()
來做訓練與預測。
本範例在建立運算物件後,不直接用SelectKBest().fit_transform()
提出訓練素材。而是以 make_pipeline()
合併先前設定好的兩個運算物件。再執行.fit()
與 .predict()
來完成訓練與預測的動作。
當我們以佇列建立好的運算物件,就可以直接給定所有的特徵資料與目標資料做訓練與預測。在訓練過程中,會依照給定的特徵素材數目從特徵資料中挑出特徵素材。預測時,也會從預測資料中挑出對應特徵素材的資料來做預測判斷。
若是將SelectKBest()
與 SVC()
物件分開來執行,當 SVC()
物件在做學習時給定的特徵即為被選出來的特徵素材數目。那預測的時候也必須從預測資料中,挑出被SelectKBest()
選出來的特徵來給SVC()
做預測。
(四)原始碼
Python source code: feature_selection_pipeline.py
(五)函式用法
參數:
n_samples :
n_fratures : 總特徵數目
n_informative: 有意義的特徵數目
n_redundant : 產生有意義特徵的隨機線性組合
n_repeated
n_classes: 共分類為幾類
n_clusters_per_class: 一個類群有幾個群組分布
weights :
flip_y :
class_sep :
hypercube :
shift :
scale :
shuffle :
random_state :
輸出:
X : 特徵矩陣資料
Y : 對應目標資料
類似的功能:
SelectKBest()
的參數
SelectKBest()
的參數SelectKBest 的使用:
選擇最好的特徵(目標函式, 特徵個數)
目標函式: 測試X與Y之間關係,須提供F score與p-value
特徵個數: 最好的特徵個數
f_regression 的使用:
f_regression(X,y)
輸入X與y
輸出F score與p-value
Last updated