网站建设的目标人群是什么,seo外链招聘,WordPress更改网站地址,厦门网站建设咨询介绍
随机森林是一种基于集成学习的有监督机器学习算法。随机森林是包含多个决策树的分类器#xff0c;一般输出的类别是由决策树的众数决定。随机森林也可以用于常见的回归拟合。随机森林主要是运用了两种思想。具体如下所示。
Breimans的Bootstrap aggregatingHo的random …介绍
随机森林是一种基于集成学习的有监督机器学习算法。随机森林是包含多个决策树的分类器一般输出的类别是由决策树的众数决定。随机森林也可以用于常见的回归拟合。随机森林主要是运用了两种思想。具体如下所示。
Breimans的Bootstrap aggregatingHo的random subspace method
储备知识
集成学习
集成学习主要是通过个体学习器如决策树通过一定组合策略将其组合起来形成一个准确率较高较为优秀的学习器。 学习器有同质和异质之分如随机森林里面的学习器都是决策树即为是同质反之即为异质。 集成学习的学习器一般为弱学习器但弱学习器也需要下列特质。
需要一定的准确性需要多样性弱学习器之间需要存在一定差异性 决策树学习
决策树是机器学习常见的方法而且决策树本质为树学习树学习能够有以下优点。
在特征值缩放和其他转换下决策树的结果保持不变无关特征对于结果影响较少因此决策树对于无关结果是稳健的
树学习的缺点如下。
生长很深的树容易学习到高度不规则的模式即为过学习在训练集上具有一定的低偏差和高变异数的特点。
因此随机森林是平均多个深决策树的结果目的是为了降低变异数。此外随机森林的决策树是在一个数据集的不同部分进行训练各部分具有一定的独立性。 随机森林的缺点为偏差的小幅增加和可解释性的丧失。优点为用于大数据集上能够提高准确率和性能。
Bagging 算法
Bagging算法又称为引导聚集算法装袋算法属于集成学习算法。主要的目的为能够提高回归风雷的准确性以及稳定性同时能够降低结果的变异数降低过拟合发生的概率。 随机森林训练算法将bagging算法应用于树学习中给定训练集合 X x 1 , ⋯ x n Xx_1, \cdots x_n Xx1,⋯xn和label集合 Y y 1 ⋯ y n Yy_1 \cdots y_n Yy1⋯ynBagging 算法会从训练集合中有放回采样B次在这些样本上不断训练树模型。 具体流程如下所示。 For b 1, …, B:循环B次即为重复B次操作 Sample, with replacement, n training examples from X, Y; call these Xb, Yb.有放回采样样本数量为B Train a classification or regression tree fb on Xb, Yb训练树回归/分类模型 迭代B次之后即为训练结束对未知样本x的预测可以通过对x上所有单个回归书的预测求取平均来实现。 公式如下所示。 f ^ \hat f f^为预测结果可以为分类或者拟合结果。 f b ( x ′ ) f_b(x^{\prime}) fb(x′)为经过单个决策树之后的结果。 f ^ 1 B ∑ b 1 B f b ( x ′ ) \hat{f}\frac1B\sum_{b1}^Bf_b(x^{\prime}) f^B1b1∑Bfb(x′)
此外 x ′ x^{\prime} x′上所以单个回归树的预测的标准差可以作为预测的不确定性的估计数值。具体公式如下所示。 σ ∑ b 1 B ( f b ( x ′ ) − f ^ ) 2 B − 1 . \sigma\sqrt{\frac{\sum_{b1}^B(f_b(x^{\prime})-\hat{f})^2}{B-1}}. σB−1∑b1B(fb(x′)−f^)2 .
bagging方法在不增加偏置的情况下能够降低方差。 单个树模型的预测会对数据集的噪声十分敏感因此对于多个树模型只要树模型没有明显的相关性在同一个数据集上简单的训练多个树模型会导致树模型具有强相关性。因此bagging方法的Bootstrap抽样方法能够通过同样的数据集产生不同的训练集以供其他树模型训练。从而降低模型的关联性。
代码
样本数据主要根据下列连接获取。 需要自主上传下载google云盘去获取
import sklearn.datasets as datasets
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestRegressor
from sklearn.decomposition import PCA
from six import StringIO
from IPython.display import Image
from sklearn.tree import export_graphviz
import pydotplus
import os# 导入数据路径中要么用\\或/或者在路径前加r目前是读取当前路径所以数据文件要放置在同一文件夹/目录中
dataset pd.read_csv(r./petrol_consumption.csv)# 准备训练数据
# 自变量 因变量本代码主要做的是拟合而且这里主要获取数据的dataframe转化为ndarry
X dataset.iloc[:, 0:4].values
y dataset.iloc[:, 4].values# 将数据分为训练集和测试集切分数据集合而且比例为8:2随机种子为0保证结果可复现性
X_train, X_test, y_train, y_test train_test_split(X,y,test_size0.2,random_state0)
regr RandomForestRegressor() # 设置随机森林拟合下列为参数
# regr RandomForestRegressor(random_state100,
# bootstrapTrue,
# max_depth2,
# max_features2,
# min_samples_leaf3,
# min_samples_split5,
# n_estimators3)
# 这里为封装管道最终直接可以调用所以这里运用的是最大最小归一化而且运用的是PCA降低维度最终回归用的是regr所以走完了所有的操作
pipe Pipeline([(scaler, StandardScaler()), (reduce_dim, PCA()),(regressor, regr)])
pipe.fit(X_train, y_train)
ypipe pipe.predict(X_test)# 执行一次需要自己去配置graphviz这个网上有很多教程主要是用于绘制图像
# os.environ[PATH] os.environ[PATH];rD:\CLibrary\Graphviz2.44.1\bin\graphviz
dot_data StringIO()
# export_graphviz()数是一个用于将决策树可视化的函数通常与机器学习库scikit-learn一起使用
export_graphviz(pipe.named_steps[regressor].estimators_[0],# pipe.named_steps[regressor].estimators_[0]返回的是回归器的第一个实例即为随机初始化一个决策树绘制out_filedot_data)
graph pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_png(tree.png)Image(graph.create_png())# Get numerical feature importances获取特征输入变量的重要程度即为判断哪个因素最为重要
importances list(regr.feature_importances_)
# List of tuples with variable and importance
print(importances)# 保存模型的特征名称
feature_list list(dataset.columns)[0:4]
# round()函数将特征重要程度四舍五入
feature_importances [(feature, round(importance, 2)) for feature, importance in zip(feature_list, importances)]
# 将特征重要程度进行排序
feature_importances sorted(feature_importances, key lambda x: x[1], reverse True)import matplotlib.pyplot as plt
# Set the style
# plt.style.use(fivethirtyeight)
# list of x locations for plotting
x_values list(range(len(importances)))
print(x_values)
# Make a bar chart
plt.bar(x_values, importances, orientation vertical)
# Tick labels for x axis
plt.xticks(x_values, feature_list,rotation6)
# Axis labels and title
plt.ylabel(Importance); plt.xlabel(Variable); plt.title(Variable Importances);
plt.show()
print(successful)回归器的参数如下所示。sklearn的RandomForestRegressor参数如下所示。 sklearn.ensemble.RandomForestRegressor(
n_estimators100, *, # 树的棵树默认是100
criterionmse, # 默认“ mse”衡量质量的功能可选择“mae”。
max_depthNone, # 树的最大深度。
min_samples_split2, # 拆分内部节点所需的最少样本数
min_samples_leaf1, # 在叶节点处需要的最小样本数。
min_weight_fraction_leaf0.0, # 在所有叶节点处的权重总和中的最小加权分数。
max_featuresauto, # 寻找最佳分割时要考虑的特征数量。
max_leaf_nodesNone, # 以最佳优先方式生长具有max_leaf_nodes的树。
min_impurity_decrease0.0, # 如果节点分裂会导致杂质的减少大于或等于该值则该节点将被分裂。
min_impurity_splitNone, # 提前停止树木生长的阈值。
bootstrapTrue, # 建立树木时是否使用bootstrap抽样。 如果为False则将整个数据集用于构建每棵决策树。
oob_scoreFalse, # 是否使用out-of-bag样本估算未过滤的数据的R2。
n_jobsNone, # 并行运行的Job数目。
random_stateNone, # 控制构建树时样本的随机抽样
verbose0, # 在拟合和预测时控制详细程度。
warm_startFalse, # 设置为True时重复使用上一个解决方案否则只需拟合一个全新的森林。
ccp_alpha0.0,
max_samplesNone) # 如果bootstrap为True则从X抽取以训练每个决策树。参考
维基百科随机森林介绍 随机森林算法梳理Random Forest 一文看懂随机森林 用Python实现随机森林回归