机器学习笔记——决策树之回归树_Nuyoahgyc的博客-程序员秘密

技术标签: 机器学习  

(参考资料:菜菜的sklearn)

重要参数,属性及接口

  • criterion
    1)输入"mse"使用均方误差mean squared error(MSE),父节点和叶子节点之间的均方误差的差额将被用来作为特征选择的标准,这种方法通过使用叶子节点的均值来最小化L2损失 。
    2)输入“friedman_mse”使用费尔德曼均方误差,这种指标使用弗里德曼针对潜在分枝中的问题改进后的均方误差
    3)输入"mae"使用绝对平均误差MAE(mean absolute error),这种指标使用叶节点的中值来最小化L1损失

  • 属性中最重要的依然是feature_importances_,接口依然是apply, fit, predict, score最核心

在这里插入图片描述
在回归树中,MSE不只是我们的分枝质量衡量指标,也是我们最常用的衡 量回归树回归质量的指标,我们追求的是MSE越小越好

注意!!回归树的接口score返回的是R平方,并不是MSE。R平方的定义如下:
在这里插入图片描述
其中u是残差平方和,v是总平方和。
**虽然均方误差永远为正,但是sklearn当中使用均方误差作为评判标准时,却是计算”负均方误差”(neg_mean_squared_error)。**这是因为sklearn在计算模型评估指标的时候,会考虑指标本身的性质,均 方误差本身是一种误差,所以被sklearn划分为模型的一种损失(loss),因此在sklearn当中,都以负数表示。真正的均方误差MSE的数值,其实就是neg_mean_squared_error去掉负号的数字。

实例:一维回归图像的绘制

用回归树来拟合正弦曲线,并添加一些噪声来 观察回归树的表现。
1.导入需要的库

import numpy as np
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt

2.创建一条含有噪声的正弦曲线

#创建一条含噪声的正弦曲线
rng=np.random.RandomState(1)   #生成随机数种子
5*rng.rand(80,1)   #rand()生成0~1之间的随机数
X = np.sort(5 * rng.rand(80,1), axis=0)   #生成的横坐标的数据
y=np.sin(X).ravel()
y[::5]+=3*(0.5-rng.rand(16))    #[::5],5是步长,每5个数取出来一个加上一个随机数,以此制造噪声
plt.figure()
plt.scatter(X,y,s=20,edgecolor="black",c="darkorange",label="data")  #画散点图

在这里插入图片描述
3.实例化训练模型

#实例化训练模型
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_1.fit(X, y)
regr_2.fit(X, y)
  1. 测试集导入模型,预测结果
X_test=np.arange(0.0,5.0,0.01)[:,np.newaxis]   #arange(起始点,结束点,步长),[:np.newaxis]用于升维
y_1=regr_1.predict(X_test)    #生成预测值
y_2=regr_2.predict(X_test)

5.绘制图像

plt.figure()
plt.scatter(X,y,s=20,edgecolor="black",c="darkorange", label="data")  #画散点图
plt.plot(X_test, y_1, color="cornflowerblue",label="max_depth=2", linewidth=2)  #画折线图
plt.plot(X_test, y_2, color="yellowgreen", label="max_depth=5", linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Decision Tree Regression")
plt.legend()
plt.show()

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_46175303/article/details/108802341

智能推荐

python作业_python小作业_weixin_39677538的博客-程序员秘密

1.简述变量命名规范变量由数字,字母,下划线组成不能以数字开头不能使用python中关键字不能使用中文和拼音区分大小写变量名要具有描述性推荐写法​7.1驼峰体AgeOfOldboy = 98​7.2下划线age_of_oldboy = 98 (官方推荐)2.name = input(“>>>”) name变量是什么数据类型通过代码检测字符串3.if条件语句的基本结构?单ifif else 二选一i...

微信小程序开发(四) - 全局外边框配置 - json 文件_lendq的博客-程序员秘密

注 :注释只能在wxml , js 文件中使用(<!-- --> , // ) 其余`json , wxss`文件都不能使用注释JSON 文件 的作用app.json 本质上只会更改外边框(除了网络超时)pages.json除了以上作用以外,还可以用来添加自定义wxml组件,后面会补充项目配置文件 project.config.json该...

Qt图形特效:QGraphicsDropShadowEffect_qgraphicsitem 发光效果_友善啊,朋友的博客-程序员秘密

一、描述QGraphicsDropShadowEffect类提供投影效果。投影效果使用放置投影渲染源。二、成员属性1、blurRadius : qreal。此属性保存投影的模糊半径(像素)。使用较小的半径产生更清晰的阴影,而使用较大的半径产生更模糊的阴影。默认情况下,模糊半径为1像素。2、color : QColor。此属性保存投影的颜色。默认情况为半透明的深灰色(QColor(63, 63, 63,180))。3、offset : QPointF。此属性以像素为单位保存阴影偏移量。默认情况

v-model绑定数组练习_小可同学啊的博客-程序员秘密

用v-model绑定一个数组在多选上时 会按照多选的选中状态在数组中添加或删除该选项的value值`<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=devi.

rem项目踩到的坑_不同项目rem不一致_由本的博客-程序员秘密

接到一个项目需要你去迭代修改,如果是rem布局,切记先点开浏览器dom树的html标签,看一下上面的font-size是多少,如果浏览器手机模拟器是375的宽dom树上html的font-size应该是25px,那相对ui给的750的图则正好是1rem = 50px,但如果浏览器手机模拟器375宽的dom树你点开html的font-size是20px的话,那他的项目中设置的1rem对应的就是40px—记得手动设置一下vscode里的rem自动转换—大部分项目都是配置1rem = 50px,但也

我的Java开发学习之旅------>Java经典排序算法之快速排序_source >> pos - 1 & 1_字节卷动的博客-程序员秘密

一、算法思想     快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。(1) 分治法的基本思想     分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。(2)快速排序的

随便推点

媒体播放器程序——(第一天:建立程序结构)_鲨鱼咯咯哩的博客-程序员秘密

在linux系统上用c语言开发。使用GStreamer多媒体框架,该框架运行于GNOME桌面环境使用GTK+2.0图形用户界面框架实现屏幕上的显示。用户界面模块:用于和用户进行交互。用户使用键盘或鼠标操作程序时,用户界面将识别出的操作指令传递给核心控制模块,再由核心控制模块作出反应,将程序的运行结果传送到用户界面。核心控制模块:用于协调各个模块的运作,保存当前状态,在程序启动时,该模块最先启动,然后在调用其他模块,程序结束时,该模块清理其他模块使用过的内存,并且最后退出播放控制模块:专门用于

web前端常用工具网址_homie.Y的博客-程序员秘密

PX 转换 em   网址    http://pxtoem.com/

Java对象内存结构_茅坤宝骏氹的博客-程序员秘密

转载自 Java对象内存结构学C/C++出身的我,对Java有一点非常困惑,那就是缺乏计算对象占用内存大小的机制。而在C++中就可以通过sizeof运算符来获得基本类型以及类实例的大小。C和C++中的这个操作符对于指针运算、内存拷贝和IO操作都非常有用。Java中并没有一个类似的运算符。事实上,Java也不需要这种运算符。Java中基本类型的大小在语言规范中已经定义了,而C/C++中基本类型大小则...

MybatisPlus中@TableField注解的使用_霸道流氓气质的博客-程序员秘密

场景项目搭建专栏:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/37194基础搭建:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/89407994实现官方文档说明:com.baomidou.mybatisplus.annotations.T...

完全匹配(hall定理)&完美匹配&最大匹配(匈牙利算法)+计算二分图的完美匹配的个数_FakeOccupational的博客-程序员秘密

用“广度有限”搜索增广路径1,对于一个未匹配的节点u,寻找它的每条边,如果它的边上的另一个节点v还没匹配则表明找到了一个匹配,直接转步骤4;2,假如节点u它边上的另一个节点v已经匹配,那么就转向跟v匹配的节点假设是w,然后再对w重复1,2的步骤,即寻找增广路.3,假如我们在1,2步过程中找到- -条增广路,那么修改各自对应的匹配点,转步骤4,若无增广路,则退出.4,匹配数+1;...

element-ui :cell-class-name的功能加上之后出的问题_耿彦丰的博客-程序员秘密

解决办法就是不要用这个功能,因为这个循环会拖慢整个页面!!!!! 在实际应用中列表cell数目可能会很大,用了这个功能,在里面做个for循环,页面直接卡成狗!