sklearn:使用GBDT選擇特徵
阿新 • • 發佈:2019-02-03
(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列
#選擇importance>0的特徵
注:X為資料特徵,y為標記的類別。用X[499:],y[499:]對GBDT進行訓練。然後如果該特徵的gbdt.feature_importances_>0,則該特徵保留,否則,則把該特徵刪除,從而達到選取特徵的效果。
>>>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,則該特徵保留,否則,則把該特徵刪除,從而達到選取特徵的效果。