决策树

import pandas as pd
import numpy as np
import graphviz
from sklearn.tree import DecisionTreeRegressor
from sklearn import treeX = np.array(data[['C', 'E']])  # Create an array
y = np.array(data['NOx'])regt = DecisionTreeRegressor(max_depth=4)regt = regt.fit(X, y)  # Build a decision tree regressor from the training set (X, y)dot_data = tree.export_graphviz(regt, out_file=None)  # Export a decision tree in DOT formatgraph = graphviz.Source(dot_data)graph.render("tree")  # Save the source to file


[注]

节点属性:

  • X[1]X = np.array(data[['C', 'E']])中的E列,为特征值
  • samples:样本的数量
  • mse:均方误差(mean-square error, MSE)是反映估计量与被估计量之间差异程度的一种
  • value:平均值

print(regt.score(X, y))
------------------------------------
0.949306568162
regt1 = regt.fit(X[:, 1].reshape(-1, 1), y)  # reshape(-1, 1) 将数组改为 多行1列dot_data = tree.export_graphviz(regt, out_file=None)graph = graphviz.Source(dot_data)graph.render("tree1")regt1.score(X[:, 1].reshape(-1, 1), y)

对比过后,发现 treetree1 完全相同


u = np.sort(np.unique(X[:, 1]))
t = np.diff(u)/2+u[:-1]  # diff() 后一个元素减去前一个元素#
mse = []
mse1 = []
mse2 = []
for i in t:m1 = (y[X[:, 1] < i]-np.mean(y[X[:, 1] < i]))**2  # X[:, 1] 取该二维数组第二列所有数据m2 = (y[X[:, 1] > i]-np.mean(y[X[:, 1] > i]))**2mse1.append(np.mean(m1))  # “拍脑袋”平方和mse2.append(np.mean(m2))  # “拍脑袋”平方和mse.append((np.sum(m1)+np.sum(m2))/len(y))
I = np.argmin(mse)  # 求mse最小值的indexMSE0 = np.mean((y-np.mean(y))**2)
print("Original total MSE={}\nSplit point={}\nMin mse={}\nLeft mse={}\nRight mse={}".format(MSE0, I, mse[I], mse1[I], mse2[I]))
-------------------------------------------------------------------------------
Original total MSE=1.26845241619
Split point=60
Min mse=0.854108834661
Left mse=1.13202721562
Right mse=0.0686873232514

上述代码的函数形式

def spl(X, y):u = np.sort(np.unique(X))t = np.diff(u)/2+u[:-1]mse = []mse1 = []mse2 = []for i in t:m1 = (y[X < i]-np.mean(y[X < i]))**2m2 = (y[X > i]-np.mean(y[X > i]))**2mse1.append(np.mean(m1))mse2.append(np.mean(m2))mse.append((np.sum(m1)+np.sum(m2))/len(y))i = np.argmin(mse)return mse[i], t[i], mse1[i], mse2[i]print(spl(X[:, 1], y))
print(spl(X[:,0], y))
------------------------------------------------------------------
(0.8541088346609912, 1.0945, 1.1320272156213018, 0.06868732325141778)
(1.264189318071551, 13.5, 1.103670472054112, 1.5072607134693878)
def FCV(x, y, regr, cv=10, seed=2015):np.random.seed(seed)ind = np.arange(len(y))np.random.shuffle(ind)  # 随机化下标X_folds = np.array_split(x[ind], cv)y_folds = np.array_split(y[ind], cv)X2 = np.empty((0, X.shape[1]), float)y2 = np.empty((0, y.shape[0]), float)yp = np.empty((0, y.shape[0]), float)for k in range(cv):X_train = list(X_folds)  # 只有list才能popX_test  = X_train.pop(k)  # 从中取出第k份X_train = np.concatenate(X_train)  # 合并剩下的cv-1份y_train = list(y_folds)y_test = y_train.pop(k)y_train = np.concatenate(y_train)regr.fit(X_train, y_train)  # 拟合选中的regr模型y2 = np.append(y2, y_test)X2 = np.append(X2, X_test)yp = np.append(yp, regr.predict(X_test))nmse = np.sum((y2-yp)**2)/np.sum((y2-np.mean(y2))**2)r2 = 1-nmsereturn np.array([nmse, r2])

求出 线性回归 LinearRegression 和 决策树 DecisionTreeRegressor 所对应的 NMSER^2

from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
names = ["Linear Regression", "Decision Tree"]
regressors = [LinearRegression(), DecisionTreeRegressor(max_depth=4)]A = np.empty((0, 2), float)for reg in regressors:tt = np.array(FCV(X, y, reg, 8))tt.shape = (1, 2)  # 一行二列A = np.append(A, tt, axis=0)  # 把各种方法的回归结果合并print(A)
-----------------------------------------------------------------
[[ 1.06233633 -0.06233633][ 0.15896376  0.84103624]]
import matplotlib.pyplot as pltfig = plt.figure(figsize=(20, 10))ax = fig.add_subplot(121)
ax.bar(np.arange(np.array(A).shape[0]), np.array(A)[:, 0])ax.set_xticklabels(names)  # 标注回归方法
fig.autofmt_xdate()  # 回归方法标注斜放ax.set_ylabel('NMSE')
ax.set_title('NMSE')
ax.set_xticks(np.arange(np.array(A).shape[0]) + 0.35)bx = fig.add_subplot(122)
bx.bar(np.arange(np.array(A).shape[0]), np.array(A)[:, 1])
bx.set_xticklabels(names)fig.autofmt_xdate()bx.set_ylabel('Score')
bx.set_title('Score')
bx.set_xticks(np.arange(np.array(A).shape[0]) + 0.35)plt.savefig("examples.jpg")

Score:R2R2R^{2}


bagging 是由 Breiman 提出的一个简单的组合模型, 它对原始数据集做很多次放回抽样, 每次抽取和样本量同样多的观测值, 放回抽样使得每次都有大约百分之三十多的观测值没有抽到, 另一些观测值则会重复抽到, 如此得到很多不同的数据集, 然后对于每个数据集建立一个决策树, 因此产生大量决策树. 对于回归来说, 一个新的观测值通过如此多的决策树得到很多预测值, 最终结果为这些预测值的简单平均.

from sklearn.ensemble import BaggingRegressorregr = BaggingRegressor(n_estimators=100, oob_score=True, random_state=1010)
regr.fit(X, y.ravel())print("Score:", regr.score(X, y))  # Score为可决系数R^2
print("NMSE:", 1-regr.score(X, y))  # 标准化均方误差 NMSE

Breiman 发明的随机森林的原理并不复杂, 和 bagging 类似, 它对原始数据集做很多次放回抽样, 每次抽取和样本量同样多的观测值, 由于是放回抽样, 每次都有一些观测值没有抽到, 一些观测值会重复抽到, 如此会得到很多不同的数据集, 然后对于每个数据集建立一个决策树, 因此产生大量决策树. 和 bagging 不同的是, 在随机森林每棵树的每个节点, 拆分变量不是由所有变量竞争, 而是由随机挑选的少数变量竞争, 而且每棵树都长到底. 拆分变量候选者的数目限制可以避免由于强势变量主宰而忽略的数据关系中的细节, 因而大大提高了模型对数据的代表性. 随机森林的最终结果是所有树的结果的平均, 也就是说, 一个新的观测值, 通过许多棵树(比如 n 棵)得到 n 个预测值, 最终用这 n 个预测值的平均作为最终结果.

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regressionregr = RandomForestRegressor(n_estimators=500, oob_score=True, random_state=1010)
regr.fit(X, y.ravel())
print("Variable importance:\n", regr.feature_importances_)
print("Score:\n", regr.oob_score_)
---------------------------------------------------------------------]
('Variable importance:\n', array([0.03731845, 0.00096088, 0.00580794, 0.00074913, 0.02247829,0.43575755, 0.01257118, 0.06612205, 0.00307613, 0.01341358,0.01549635, 0.0116068 , 0.37464165]))
('Score:\n', 0.8829155069608635)<font color=red >问题:score 代表的是 可决系数R^2 吗?</font>

线性回归、bagging回归、随机森林回归相关推荐

  1. sklearn线性回归,支持向量机SVR回归,随机森林回归,神经网络回归参数解释及示例

    1.sklearn线性回归 线性回归,其中目标值 y 是输入变量 x 的线性组合. 在数学概念中,如果  是预测值. 在整个模块中,我们定义向量  作为 coef_ ,定义  作为 intercept ...

  2. Python数据分析案例-利用多元线性回归与随机森林回归算法预测笔记本新品价格

    1.前言 目的: 本文通过多元线性回归与随机森林算法预测笔记本新品的发售价 工具: 语言:Python 3.8 软件:Jupyter Notebook 库:pandas.numpy.matplotli ...

  3. Python数据分析案例22——财经新闻可信度分析(线性回归,主成分回归,随机森林回归)

    本次案例还是适合人文社科领域,金融或者新闻专业.本科生做线性回归和主成分回归就够了,研究生还可以加随机森林回归,其方法足够人文社科领域的硕士毕业论文了. 案例背景 有八个自变量,['微博平台可信度', ...

  4. 机器学习系列(10)_决策树与随机森林回归

    注:本篇文章接上一篇文章>>机器学习系列(9)_决策树详解01 文章目录 一.决策树优缺点 二.泰坦尼克号幸存者案例 三.随机森林介绍 1.随机森林的分类 2.重要参数 [1]n_esti ...

  5. LESSON 9.1 随机森林回归器的实现

    目录 三 随机森林RandomForest   1 RamdomForestRegressor的实现   2 随机森林回归器的参数    2.1 弱分类器结构    2.2 弱分类器数量    2.3 ...

  6. 基于python的随机森林回归实现_随机森林理论与python代码实现

    1,初品随机森林 随机森林,森林就是很多决策树放在一起一起叫森林,而随机体现在数据集的随机采样中和特征的随机选取中,具体下面再讲.通俗的说随机森林就是建立多颗决策树(CART),来做分类(回归),以多 ...

  7. r语言随机森林回归预测_从零实现回归随机森林

    一.前言 回归随机森林作为一种机器学习和数据分析领域常用且有效的算法,对其原理和代码实现过程的掌握是非常有必要的.为此,本文将着重介绍从零开始实现回归随机森林的过程,对于随机森林和决策树的相关理论原理 ...

  8. predict函数 R_R包randomForest的随机森林回归模型以及对重要变量的选择

    R包randomForest的随机森林回归模型以及对重要变量的选择关于随机森林(random forest),前文"随机森林分类以及对重要变量的选择"中已经对其基本原理作了简单概括 ...

  9. 基于python的随机森林回归实现_python实现随机森林

    定义: 随机森林指的是利用多棵决策树对样本进行训练并预测的一种分类器.可回归可分类. 所以随机森林是基于多颗决策树的一种集成学习算法,常见的决策树算法主要有以下几种: 1. ID3:使用信息增益g(D ...

  10. 多元随机森林回归(Multivariate Random Forest Regreesor)经验总结

    多元随机森林回归(Multivariate Random Forest Regreesor)经验总结 随机森林 多元回归问题 是否需要分析自变量相关性 最近在使用随机森林解决多元回归问题,本文涉及一些 ...

最新文章

  1. 油品调和计算软件_燕山石化汽油在线调和系统完成升级改造
  2. web.xml 配置 加载顺序
  3. CNN网络加速--Performance Guaranteed Network Acceleration via High-Order Residual Quantization
  4. Android NDK开发-3-环境搭建
  5. Matlab学习笔记——文件的打开与关闭
  6. python程序设计梁勇 百度网盘_20194220 2019-2020-2 《Python程序设计》实验二报告
  7. DNA Sorting
  8. HTML、CSS知识点总结,浅显易懂。
  9. 使用ThreadLocal绑定连接资源(事务)
  10. matlab 码元扩展,扩频通信及matlab仿真
  11. 查询加索引oracle,指定索引/*+INDEX(TABLE INDEX_NAME)*/等优化Oracle查询效率的总结
  12. php html5 案例,35个非常好的HTML5+CSS3实例
  13. 负边距在布局中的使用
  14. 矩池云上安装chumpy失败
  15. 集合竞价如何买入_世界上最稳健的抓涨停方法“10分钟集合竞价”选股诀窍,买入直接稳赚10个点,赚到笑...
  16. html 公式编辑器,基于web的在线复杂公式编辑器的实现
  17. html5中span作用,span标签的作用与用法总结
  18. HDU5510 Bazinga(KMP)
  19. 使用 mesh 实现多边形裁剪图片!Cocos Creator!
  20. CAD中的选择集过滤----DXFCode(一)

热门文章

  1. 【QT】QT事件处理
  2. 火星坐标系解密-iDesktopX空间数据处理
  3. 超级高铁(Hyperloop)
  4. 微信开发之百度地图API学习(一)
  5. E盾网络验证企业版个人版离线版对接好的自绘界面4加密防破解易语言源码加密
  6. android带投屏播放器,投屏播放器app下载
  7. 蓝丝雨第十四季商业实战系列(全民奇迹中控台实战)
  8. 计算机专业毕业论文写作指导(案例超详解)
  9. st计算机编程语言,初学ST语言,有了这篇ST编程语言的相关知识就容易多了~
  10. 【Linux】Debian 连接惠普打印机并共享