文章目录

  • 引言
  • 一、决策树分类
  • 二、决策树回归—决策树用于拟合
  • 三、多输出决策树回归

引言

这里使用鸢尾花数据进行实验
鸢尾花数据集——提取码:1234

一、决策树分类

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
import pydotplus
from sklearn.metrics import accuracy_score# 加载数据
def loaddata():columns = ['sepal_length', 'speal_width', 'petal_length', 'petal_width', 'type']data = pd.read_csv('data/iris.data', header=None, names=columns)X = data.iloc[:, :2]  # 取前两个数值进行分析# 将类别数据转化为数值数据y_type = [str(k) for k in data.iloc[:, 4]]y = pd.Categorical(data.iloc[:, 4]).codesreturn X, y, y_type# 决策树可视化
def plotDT(model, feature, y_type):dot_data = tree.export_graphviz(model, out_file=None, feature_names=feature,class_names=y_type, filled=True,rounded=True, special_characters=True)graph = pydotplus.graph_from_dot_data(dot_data)graph.write_png('yuanweihua_show.png')if __name__ == '__main__':# 解决中文问题mpl.rcParams["font.sans-serif"] = ['simHei']mpl.rcParams['axes.unicode_minus'] = Falsefeature = ['sepal_length', 'speal_width']# 加载数据X, y, y_type = loaddata()# 数据分割X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7, random_state=0)# 模型model = DecisionTreeClassifier(criterion='gini', max_depth=6)model.fit(X_train, y_train)# 决策树可视化plotDT(model, feature, y_type)# 预测y_pred = model.predict(X_test)# 准确率print('准确率=', accuracy_score(y_test, y_pred))# 画决策边界图N, M = 500, 500x1_min, x1_max = min(X.iloc[:, 0]) - 0.5, max(X.iloc[:, 0]) + 0.5x2_min, x2_max = min(X.iloc[:, 1]) - 0.5, max(X.iloc[:, 1]) + 0.5t1 = np.linspace(x1_min, x1_max, N)t2 = np.linspace(x2_min, x2_max, M)# 生成网格采样点x1, x2 = np.meshgrid(t1, t2)# 生成测试点# x1.flat数组迭代器x_show = np.stack((x1.flat, x2.flat), axis=1)# 颜色cm_light = mpl.colors.ListedColormap(['#A0FFA0', '#FFA0A0', '#A0A0FF'])cm_dark = mpl.colors.ListedColormap(["g", 'r', 'b'])# 预测y_show_pred = model.predict(x_show)# 转换成x1样式y_show_pred = y_show_pred.reshape(x1.shape)fig = plt.figure(facecolor='w')fig.subplots()# 画伪彩图,直观表现出分类边界plt.pcolormesh(x1, x2, y_show_pred, cmap=cm_light)# 画散点图plt.scatter(X_test.iloc[:, 0], X_test.iloc[:, 1], c=y_test.ravel(), edgecolors='k', s=150, zorder=10, cmap=cm_dark,marker='*')# 全部数据plt.scatter(X.iloc[:, 0], X.iloc[:, 1], c=y.ravel(), edgecolors='k', s=40, cmap=cm_dark)# 坐标范围plt.xlim(x1_min, x1_max)plt.ylim(x2_min, x2_max)# 精度plt.xticks(np.arange(x1_min, x1_max, 0.2))plt.yticks(np.arange(x2_min, x2_max, 0.2))# 坐标标签plt.xlabel('sepal_length', fontsize=15)plt.ylabel('speal_width', fontsize=15)plt.title('鸢尾花数据决策树分类', fontsize=18)plt.grid(b=True, ls=":")plt.show()# 分析决策树深度对准确率的影响depth = np.arange(2, 15, 1)err_list = []for d in depth:model = DecisionTreeClassifier(criterion='gini', max_depth=d)model.fit(X_train, y_train)# 预测y_hat = model.predict(X_test)err_list.append(1 - accuracy_score(y_hat, y_test))# 错误率可视化plt.figure(facecolor='w')plt.plot(depth, err_list, 'ro-', lw=2)plt.xlabel('决策树深度', fontsize=15)plt.ylabel('错误率', fontsize=15)plt.title('决策树深度与过拟合', fontsize=18)plt.legend(loc='upper right')plt.grid(b=True)plt.show()准确率= 0.7777777777777778

可视化


二、决策树回归—决策树用于拟合

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from sklearn.tree import DecisionTreeRegressor# 构造数据
def makedata():N = 500X = np.random.rand(N) * 6 - 3X.sort()y = np.sin(X) + np.random.randn(N) * 0.05  # 高斯噪声X_test = np.linspace(-3, 3, 50).reshape(-1, 1)return X, y,X_testif __name__ == '__main__':X, y,X_test= makedata()model = DecisionTreeRegressor(criterion='mse', max_depth=9)model.fit(X.reshape(-1,1), y)# 预测y_test_hat = model.predict(X_test)# 画图plt.figure(facecolor='w')plt.plot(X,y,'r*',ms=5,lw=3,label='Accual')plt.plot(X_test,y_test_hat,'g-',lw=2,label='Predict')plt.legend(loc='upper right')plt.show()# 决策树深度的影响depth = np.arange(1,10,2)cm_dark = 'rgbmy'for d,c in zip(depth,cm_dark):model.set_params(max_depth = d)model.fit(X.reshape(-1,1),y)y_hat = model.predict(X_test)plt.plot(X_test,y_hat,'-',color=c,lw=2,label='Depth=%d'%d)plt.legend(loc='best')plt.grid(b=True)plt.show()


三、多输出决策树回归

import warnings
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor# 构造数据
def makedata():N = 500X = np.random.rand(N) * 8 - 4X.sort()y1 = 16 * np.sin(X) ** 3 + np.random.randn(N)y2 = 13 * np.cos(X) ** 3 - 5 * np.cos(2 * X) - 2 * np.cos(3 * X) - np.cos(4 * X) + 0.1 * np.random.randn(N)y = np.vstack((y1, y2)).TX = X.reshape(-1, 1)return X, yif __name__ == '__main__':# 消除警告warnings.filterwarnings(action='ignore')# 设置精度np.set_printoptions(suppress=True)# 获得数据X, y = makedata()# 模型deep = 8model = DecisionTreeRegressor(criterion='mse', max_depth=deep)model.fit(X, y)# 预测X_test = np.linspace(-4, 4, num=1000).reshape(-1, 1)y_pred = model.predict(X_test)# 画图plt.figure(facecolor='w')plt.scatter(y[:, 0], y[:, 1], c='r', marker='s', s=60, label='Actual')plt.scatter(y_pred[:, 0], y_pred[:, 1], c='g', marker='o', edgecolors='g', s=30, label='Depth=%d' % deep, alpha=0.7)plt.legend(loc='best')plt.xlabel('y1', fontsize=15)plt.ylabel('y2', fontsize=15)plt.grid(b=True)plt.show()

3.3 决策树分类与回归实战相关推荐

  1. 决策树分类与回归总结

    目录 概念 决策树 决策算法 ID3算法 C4.5算法 CART算法 决策树的优缺点 决策树的剪枝策略 关于建模过程中的一点补充 参考 关于作者 概念 决策树就是一个类似于流程图的树形结构,树内部的每 ...

  2. 机器学习-决策树分类算法与应用

    1. 决策树分类算法原理 1.1 概述 决策树(decision tree)--是一种被广泛使用的分类算法. 相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置 在实际应用中,对于探 ...

  3. 机器学习实战6-sklearn训练决策树实现分类和回归

    简介: 与SVM一样,决策树也是一种多功能的机器学习算法,它可以实现分类和回归任务,甚至是多输出任务.它们功能强大,能够拟合复杂的数据集.决策树同时也是随机森林(参见第7章)的基本组成部分,后者是现今 ...

  4. 数据挖掘学习——决策树分类算法理论(包含Iris实战)

    目录 1.决策树分类算法概述及相关公式 (1)基本思路 (2)熵公式 (3)基尼(Gini)系数公式 2.ID3算法 3.C4.5算法 4.CART算法 5.各类决策树分类算法比较 6.过拟合与决策树 ...

  5. R语言无序多分类Logistic回归模型实战

    R语言无序多分类Logistic回归模型实战 目录 R语言无序多分类Logistic回归模型实战 #导入包 #加载数据数据编码

  6. 【阿旭机器学习实战】【13】决策树分类模型实战:泰坦尼克号生存预测

    [阿旭机器学习实战]系列文章主要介绍机器学习的各种算法模型及其实战案例,欢迎点赞,关注共同学习交流. 本文用机器学习中的决策树分类模型对泰坦尼克号生存项目进行预测. 关于决策树的详细介绍及原理参见前一 ...

  7. 决策树6:分类与回归树CART

    0x01 概念介绍 1.1 CART算法 CART算法:Classification And Regression Tree.顾名思义,CART算法既可以用于创建分类树(Classification ...

  8. 树模型与线性模型的区别 决策树分类和逻辑回归分类的区别 【总结】

    树模型与线性模型的区别在于: (一)树模型 ①树模型产生可视化的分类规则,可以通过图表表达简单直观,逐个特征进行处理,更加接近人的决策方式   ②产生的模型可以抽取规则易于理解,即解释性比线性模型强. ...

  9. Python集成机器学习:用AdaBoost、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化

    最近我们被客户要求撰写关于集成机器的研究报告,包括一些图形和统计输出. Boosting 是一类集成机器学习算法,涉及结合许多弱学习器的预测. 视频:从决策树到随机森林:R语言信用卡违约分析信贷数据实 ...

  10. 决策树(分类树、回归树)

    决策树 前言:第一篇博客,最近看完决策树,想着归纳一下,也方便自己以后回顾.写的会比较全面一些,可能会有很多不太正确的地方,欢迎大家交流指正 : ) 决策树模型: 决策树模型是运用于分类以及回归的一种 ...

最新文章

  1. expect自动化交互脚本(一)
  2. 第一讲 无穷级数的概念
  3. Ubuntu16.04安装Mininet
  4. Entity Framework Core 生成跟踪列
  5. Check_ping监控测试原理
  6. 大数据学习路线2019版(附全套视频教程及网盘下载)
  7. 复变函数思维导图梳理
  8. 安卓游戏广告加速插件_从零登顶免费榜榜首 这款头条发行的“特牛”超休闲游戏是如何做到的? | 游戏茶馆...
  9. java se11.0.1安装_jdk11下载安装及环境变量配置
  10. 浏览器首页被雨林木风篡改( /hao.ylmf.com/u7654.html)
  11. 蓝凌ekp开发_蓝凌EKP在eclipse中启动报错
  12. 程序员的简历应该如何写?(含模拟面试,持续更新)
  13. 用css实现骰子的六个面(flex布局的学习)
  14. hololens2 通信 之 Windows.Networking.Sockets
  15. java 组织机构代码_JAVA实现社会统一信用代码校验的方法|chu
  16. 我可以在iPad上使用WhatsApp吗?
  17. qt文本转语音tts的使用方法,QTextToSpeech
  18. 【Linux杂篇】经常登录Linux,用户密码背后的知识了解一下
  19. route和bridge是什么意思_请问ROUTE 和 BRIDGE 是怎么分别的!
  20. PHP excel 导出时变为科学计数法的问题

热门文章

  1. 推荐iOS模拟器截图工具iOS-Simulator Cropper
  2. R学习-小白笔记08
  3. 【MySQL必知必会】第十章 创建计算字段
  4. 在同一台服务器上安装两个数据库
  5. 【Chromium中文文档】线程
  6. The constness of a method should makes sense from outside the object
  7. 移动硬盘主分区格式化后,逻辑分区找不到的解决方法
  8. Ruby on Rails 实践
  9. 主流手机user-agent与支持图像尺寸对照表(联通的)
  10. 一道不知道哪里来的容斥题