1. 程式人生 > >sklearn:使用GBDT選擇特徵

sklearn:使用GBDT選擇特徵

(1)如何在numpy陣列中選取若干列或者行?  
>>>import numpy as np
>>>tmp_a = np.array([[1,1], [0.4, 4], [1., 0.9]]) 
>>>tmp_a
>>>tmp_a[[0,1],:]#選第0、1行 
>>>tmp_a[np.array([True, False, True]),:]# 選第0、2行
>>>tmp_a[:,[0]]#選第0列 
>>>tmp_a[:, np.array([True, False])]#選第0列

(2)訓練GBDT,選取特徵,選完之後可以用其他方法繼續進行訓練。

from sklearn.ensemble import GradientBoostingClassifier
gbdt = GradientBoostingClassifier(
    init=None,
    learning_rate=0.1,
    loss='deviance',
    max_depth=3,
    max_features=None,
    max_leaf_nodes=None,
    min_samples_leaf=1,
    min_samples_split=2,
    min_weight_fraction_leaf=0.0,
    n_estimators=100,
    random_state=None,
    subsample=1.0,
    verbose=0,
    warm_start=False)
print "fit start!"
gbdt.fit(X[499:], y[499:])
print "fit success!"


score = gbdt.feature_importances_
print gbdt.feature_importances_.shape

#選擇importance>0的特徵
X_new = X[:, gbdt.feature_importances_>0]
X_new.shape

注:X為資料特徵,y為標記的類別。用X[499:],y[499:]對GBDT進行訓練。然後如果該特徵的gbdt.feature_importances_>0,則該特徵保留,否則,則把該特徵刪除,從而達到選取特徵的效果。