例子1 打网球
抓重点:每个特征的影响力
# 系数反映每个特征的影响力。越大表示该特征在分类中起到的作用越大
print(clf.feature_importances_)
例子2 选择属性
# 计算数据集的香农熵,分两步,第一步计算频率,第二部根据公式计算香农熵
calcShannonEnt(dataSet)
# 划分数据集,将满足X[aixs]==value的值都划分到一起,返回一个划分好的集合(不包括用来划分的aixs属性,因为不需要)
splitDataSet(dataSet, aixs, value)
# 选择最好的属性进行划分,思路很简单就是对每个属性都划分下,看哪个好。这里使用到了一个set来选取列表中唯一的元素,这是一中很快的方法
chooseBestFeature(dataSet)
# 因为我们递归构建决策树是根据属性的消耗进行计算的,所以可能会存在最后属性用完了,但是分类还是没有算完,这时候就会采用多数表决的方式计算节点分类
majorityCnt(classList)
# 基于递归构建决策树。这里的label更多是对于分类特征的名字,为了更好看和后面的理解
createTree(dataSet, labels)
例子3 特征选择
特征选择2
特征选择3
随机森林选择特征值
这个例子跑了一遍,发现有个bug,会导致最后特征和特征重要值不匹配
改了一下
indices = np.argsort(importances)[::-1]
feat_labels=x.columns
features_a = []
for f in range(x_train.shape[1]):
#给予x颗决策树平均不纯度衰减的计算来评估特征重要性
features_a.append(feat_labels[indices[f]])
print ("%2d) %-*s %f" % (f+1,30,feat_labels[indices[f]],importances[indices[f]]))
plt.title('Feature Importance-RandomForest')
# figsize(12.5, 4)
plt.rcParams['savefig.dpi'] = 300 #图片像素
plt.rcParams['figure.dpi'] = 300 #分辨率
plt.bar(range(x_train.shape[1]),importances[indices],color='lightblue',align='center')
plt.xticks(range(x_train.shape[1]),features_a,rotation=90)
plt.xlim([-1,x_train.shape[1]])
plt.tight_layout()
plt.style.use('ggplot')
plt.show()
例子4 泰坦尼克号