(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,则该特征保留,否则,则把该特征删除,从而达到选取特征的效果。