决策树模型调优

决策树模型调优在上一篇用决策树判断广告的文章中 我们对数据做了简单的处理 过滤掉特征存在 nan 值的样本 利用决策树分类 得到了 93 3 的准确率 现在我们来用一些方法进一步提高准确率 主要用到了 PCA SelectKBest FeatureUnion 以及 GridSearch

在上一篇用决策树判断广告的文章中,我们对数据做了简单的处理,过滤掉特征存在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%,已经相当不错。后续我们将利用集成模型来进一步提高准确率。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176423.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午9:58
下一篇 2026年3月26日 下午9:58


相关推荐

  • hdu1106 java字符串分割

    hdu1106 java字符串分割排序TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):30220    AcceptedSubmission(s):8391ProblemDescription输入一行数字,如果我们把这行数字中的‘5’都

    2026年4月16日
    12
  • QQ第三方登录的详细教程

    QQ第三方登录的详细教程这次说一下我自己第一次使用第三方登录的过程 1 我们开始需要在开发者网站上注册 http open com 进入这个网站后点应用接入中的应用接入 因为那个按不动 开始注册 这个注册需要本人手持身份证的照片 然后关于邮箱验证 不知为何我第一次这个邮箱验证邮件发送一直失败 后来第二天才发送成功然后才完成注册 我想应该是因为之前的信息在验证之中吧 2 得到 APPID 这

    2026年3月18日
    2
  • NPTL, NGPT

    NPTL, NGPT

    2021年8月14日
    85
  • 最简真分数序列

    最简真分数序列来源元培 FromWhf 描述所谓最简真分数是指分子小于分母 且不能约分的分数 给定 n 1

    2026年3月18日
    2
  • python encode和decode的区别_encode和decode的区别

    python encode和decode的区别_encode和decode的区别字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。e…

    2022年10月7日
    4
  • DOS下第一个Java程序–HelloWorld[通俗易懂]

    DOS下第一个Java程序–HelloWorld[通俗易懂]DOS下第一个Java程序–HelloWorld1.Java开发环境的搭建1.1安装JDK首先,需要安装JDK(JavaDevelopmentKit,即Java开发工具包),现在用的最多的是1.7和1.8版本。JDK包含了JRE(JavaRuntimeEnvironment,即Java运行环境),JRE包含了JVM(JavaVirtualMachine,即Java虚拟机)。所…

    2022年5月27日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号