我在sci-kit learn中用CV实现了DT分类器。但是,我还想输出有助于分类的特征数量。这是我到目前为止的代码:
from collections import defaultdict
import numpy as np
from sklearn.cross_validation import cross_val_score
from sklearn.tree import DecisionTreeClassifier
from scipy.sparse import csr_matrix
lemma2feat = defaultdict(lambda: defaultdict(float)) # { lemma: {feat : weight}}
lemma2cat = dict()
features = set()
with open("input.csv","rb") as infile:
for line in infile:
lemma, feature, weight, tClass = line.split()
lemma2feat[lemma][feature] = float(weight)
lemma2cat[lemma] = int(tClass)
features.add(feature)
sorted_rows = sorted(lemma2feat.keys())
col2index = dict()
for colIdx, col in enumerate(sorted(list(features))):
col2index[col] = colIdx
dMat = np.zeros((len(sorted_rows), len(col2index.keys())), dtype = float)
# popola la matrice
for vIdx, vector in enumerate(sorted_rows):
for feature in lemma2feat[vector].keys():
dMat[vIdx][col2index[feature]] = lemma2feat[vector][feature]
res = []
for lem in sorted_rows:
res.append(lemma2cat[lem])
clf = DecisionTreeClassifier(random_state=0)
print "Acc:"
print cross_val_score(clf, dMat, np.asarray(res), cv=10, scoring = "accuracy")
我可以包含什么来输出特征的数量,例如,我查看了 RFE,因为我在不同的问题中询问,但它不能轻易包含在 DT 中。因此,我想知道是否有办法修改我的上述代码以输出有助于最高精度的功能数量。这里的总体目标是在与其他分类器的输出进行比较的肘部图中绘制此图。谢谢。
一旦树适合,您就可以使用 feature_importances_
属性检查相关要素。它将为您提供一个n_features
浮点值的数组,如果第 i 个功能对构建树很重要/有帮助,则feature_importances_[i]
值将为高(w.r.t 到其他值),如果不是,则为低(接近 0)。