决策树模型调优

在上一篇用决策树判断广告的文章中,我们对数据做了简单的处理,过滤掉特征存在nan值的样本,利用决策树分类,得到了93.3%的准确率。

现在我们来用一些方法进一步提高准确率。


from sklearn.pipeline import Pipeline
from sklearn.decomposition import PCA
from sklearn.grid_search import GridSearchCV

#利用主成分分析尝试提高准确率
#n_components为最终的特征维度
pca = PCA(n_components=15)
clf = DecisionTreeClassifier(random_state=14)
X_pca = pca.fit_transform(X)
scores = cross_val_score(clf,X_pca,y,scoring='accuracy')
print("Accuracy:{0:.1f}%".format(np.mean(scores)*100))   #Accuracy:93.6%
利用主成分分析,我们将准确率提高了0.3个百分点。这里我们认为设定n_components=15。并不一定是较好的参数。接下来我们继续优化。

#利用网格搜索来调整参数
pca = PCA()
clf = DecisionTreeClassifier(random_state=14)
pipe = Pipeline([
    ('pca',pca),
    ('clf',clf)
])
grid_param={
    'pca__n_components':list(range(1,20))
}
grid = GridSearchCV(pipe,grid_param)
grid.fit(X,y)
print(grid.best_params_)
print("Accuracy:{0:.1f}%".format(grid.best_score_*100))  #best_params_:{'pca__n_components': 16},Accuracy:94.9%
利用网格搜索,我们得到了最优参数n_components=16,准确率提高到94.9%,较优化前提高了1.6个百分点。
试试继续优化模型。

#尝试简单的特征工程来提高准确率
from sklearn.pipeline import FeatureUnion
from sklearn.feature_selection import SelectKBest,chi2
pca = PCA()
selection = SelectKBest(score_func=chi2)
combined_features = FeatureUnion([
    ('pca',pca),
    ('univ_select',selection)
])
clf = DecisionTreeClassifier(random_state=14)
pipe = Pipeline([
    ('feature',combined_features),
    ('clf',clf)
])
grid_param = {
    'feature__pca__n_components':list(range(1,20)),
    'feature__univ_select__k':list(range(1,10))
}
grid = GridSearchCV(pipe,grid_param)
grid.fit(X,y)
print(grid.best_params_)
print("Accuracy:{0:.1f}%".format(100*grid.best_score_))
这里我们采用两种方法来处理原始数据:PCA和SelectKBest。SelectKBest可以从原始数据中选择K个重要特征,评估分数为chi2,即卡方检验。
然后用FeatureUnion合并特征。
    最终我们得到了95.6%的准确率。
{'feature__univ_select__k': 9, 'feature__pca__n_components': 13}
Accuracy:95.6%

通过优化,单棵树的准确率达到了95.6%,已经相当不错。后续我们将利用集成模型来进一步提高准确率。



                
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值