python 擴展庫 sklearn

基礎

sklearn.feature_extraction

.DictVectorizer(sparse=True) 字典形式樣本的特徵化處理

將字典形式的樣本數據進行特徵化變化,其中樣本字典必須爲key爲特徵,value爲特徵值的形式。如果某特徵的特徵值包含string字符型數據,則該特徵全部字符型數據將被轉換爲one-hot編碼,該特徵的數值型部分數據將單列爲數值變量。sparse參數默認爲True,即特徵化後默認爲稀疏矩陣形式。模型支持 .get_feature_names()方法和 .feature_names_屬性,均可返回全部特徵名稱,其中經one-hot編碼的特徵名稱將以“特徵=值”的形式命名。

>>> tt=[{'a':'a1','b':'b1','c':10},{'a':'a2','b':'b2','c':20},{'a':'a3','b':'b3','c':30}]
>>> td=DictVectorizer(sparse=False)
>>> ts=td.fit_transform(tt)
>>> ts
array([[ 1.,  0.,  0.,  1.,  0.,  0., 10.],
       [ 0.,  1.,  0.,  0.,  1.,  0., 20.],
       [ 0.,  0.,  1.,  0.,  0.,  1., 30.]])
>>> td.get_feature_names()
>>> ['a=a1', 'a=a2', 'a=a3', 'b=b1', 'b=b2', 'b=b3', 'c']
>>> tt=[{'a':'a1','b':'b1','c':10},{'a':'a2','b':'b2','c':20},{'a':'a3','b':'b3','c':30,'d':40}]
>>> td=DictVectorizer(sparse=False)
>>> ts=td.fit_transform(tt)
>>> ts
array([[ 1.,  0.,  0.,  1.,  0.,  0., 10.,  0.],
       [ 0.,  1.,  0.,  0.,  1.,  0., 20.,  0.],
       [ 0.,  0.,  1.,  0.,  0.,  1., 30., 40.]])
>>> tt=[{'a':'a1','b':'b1','c':10},{'a':'a2','b':'b2','c':20},{'a':'a3','b':'b3','c':'haha','d':'what'}]
>>> td=DictVectorizer(sparse=False)
>>> ts=td.fit_transform(tt)
>>> ts
array([[ 1.,  0.,  0.,  1.,  0.,  0., 10.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  1.,  0., 20.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.,  1.,  0.,  1.,  1.]])
>>> td.get_feature_names()
['a=a1', 'a=a2', 'a=a3', 'b=b1', 'b=b2', 'b=b3', 'c', 'c=haha', 'd=what']

可見對於非對稱的樣本數據,無論字符型還是數值型,缺失特徵的樣本均默認爲0

sklearn.model_selection

.train_test_split(arrays_to_be_splitted,test_size=0.25,train_size=None,shuffle=True,stratify=None) 將輸入數據集隨機分裂爲訓練集和測試集

可輸入多個數據集,每個數據集都將依次分裂爲訓練集和測試集,shuffle參數指定是否在分裂前打亂每個數據集的樣本排列順序,stratify參數確定是否分裂集是否考慮分層。

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,shuffle=True)

sklearn.metrics

.accuracy_score(y_true,y_pred,normalize=True) 預測準確率

這個用法很顯然,返回的爲scalar數值,normalize默認返回準確率,如爲False則返回準確的數量。注意,準確率的定義爲正確預測的個數在總數中的比例

.confusion_matrix(y_true,y_pred,labels=None) 混淆矩陣

用法比較顯然,注意輸出。輸出爲一個二維矩陣CCCi,jC_{i,j}爲標籤實際爲ii,但模型預測爲jj的樣本的數量。labels參數輸入一個標籤列表,這樣矩陣輸出的行順序將與此列表的標籤順序相同

>>> y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]
>>> y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]
>>> confusion_matrix(y_true, y_pred)
array([[2, 0, 0],
       [0, 0, 1],
       [1, 0, 2]], dtype=int64)
>>> confusion_matrix(y_true, y_pred, labels=["bird", "ant", "cat"])
array([[0, 0, 1],
       [0, 2, 0],
       [0, 1, 2]], dtype=int64)

sklearn.ensemble

.RandomForestClassifier((n_estimators=100,criterion=’gini’,max_depth=None,min_samples_split=2,min_samples_leaf=1,max_features=’auto’,min_impurity_decrease=0.0) 隨機森林分類器

詳細算法描述請見隨機森林算法。n_estimators參數定義森林中樹的數量;criterion參數指定分裂指標算法,可選ginientropy。max_depth參數定義樹的最高分裂層數,默認無限制。min_samples_split定義每一各節點得以進行分裂的最少樣本數。min_samples_leaf定義一個節點可以成爲葉節點的最少樣本數。max_features定義森林的每棵樹所抽選的最大的特徵數量,具體請見官方文檔max_feature參數描述。min_impurity_decrease定義樹每次分支的最小的純度增益水平。注意分類器分類器輸出包含一個feature_importance屬性,以一維數組形式列出各特徵的重要性程度,所有特徵的重要性相加爲1,數字越大說明特徵越重要。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章