机器学习之RF

随机森林实战

执行随机森林算法所涉及的基本步骤如下:
从数据集中选择N个随机记录。
根据这N条记录构建决策树。
在算法中选择所需的树数,然后重复步骤1和2。
在回归问题的情况下,对于新记录,林中的每个树都预测Y(输出)的值。 可以通过取森林中所有树木预测的所有值的平均值来计算最终值。或者,在分类问题的情况下,林中的每个树都预测新记录所属的类别。最后,新记录被分配到赢得多数投票的类别。
在这里插入图片描述
随机森林有很多优点:
随机森林的优点有:
对于很多种数据,它可以产生高准确度的分类器。
它可以处理大量的输入变量。
它可以在决定类别时,评估变量的重要性。
在建造森林时,它可以在内部对于一般化后的误差产生不偏差的估计。
它包含一个好方法可以估计丢失的数据,并且,如果有很大一部分的数据丢失,仍可以维持准确度。
它提供一个实验方法,可以去侦测variable interactions。
对于不平衡的分类数据集来说,它可以平衡误差。
它计算各例中的亲近度,对于数据挖掘、侦测离群点(outlier)和将数据可视化非常有用。
使用上述。它可被延伸应用在未标记的数据上,这类数据通常是使用非监督式聚类。也可侦测偏离者和观看数据。
学习进程是很快速的。
这次实验我们分为两部分,一部分是将随机是随机森林算法用于回归任务,一部分是将随机森林算法用于分类任务。
接下来开始我们的实验。

将随机森林算法用于回归
我们使用的数据集为petrol_consumption.csv,案例是:根据汽油税(以美分计),人均收入(美元),铺设公路(以英里为单位)和拥有驾照的人口比例来预测美国48个州的天然气消费量(以百万加仑计)。
数据集打开如下所示:
在这里插入图片描述
了解背景之后,我们开始编程吧。

第一步是导入需要用于到的库
在这里插入图片描述
加载数据集
在这里插入图片描述
准备训练用的数据,首先是将数据划分为属性集和标签集。
在这里插入图片描述
然后将得到的数据分成训练集和测试集。
在这里插入图片描述
接下来我们需要缩放特征
我们在看csv数据那张图的时候,知道我们的数据集还不是缩放值例如,Average_Income字段的值范围为数千,而Petrol_tax的值范围为数十。因此我们需要缩放我们的数据。我们使用Scikit-Learn的StandardScaler类。
在这里插入图片描述
然后就该开始训练模型了
在这里插入图片描述
sklearn.ensemble库中的RandomForestRegressor类用于通过随机林解决回归问题。RandomForestRegressor类最重要的参数是n_estimators参数。此参数定义随机森林中的树的数量。我们上面的代码是设置n_estimator = 20。
最后一步是评估算法的性能。对于回归问题,用于评估算法的度量是平均绝对误差,均方误差和均方根误差。下面的代码用于给出这些值
在这里插入图片描述
将以上代码整合在一起(1.py)
运行后得到结果如下
在这里插入图片描述
在我们设置20棵树时,均方根误差为64.93。这一定范围内,通过增加树的数量,我们可以降低误差,误差设置为200颗树
在这里插入图片描述
结果如下
在这里插入图片描述
可以看到,相比于20颗树,误差确实下降了

第二个部分是将随机森林用于分类问题。数据集为bill_authentication.csv,给出了图像小波变换图像的方差、偏斜度、熵和图像的简略度,来预测纸币是否真实
同样我们还是先导入库
在这里插入图片描述
加载数据文件
在这里插入图片描述
然后准备训练用的数据
先将数据分别分为属性和标签
在这里插入图片描述
再将数据划分为训练集和测试集
在这里插入图片描述
然后缩放特征
在这里插入图片描述
接下来开始训练模型
在这里插入图片描述
在回归问题中,我们使用sklearn.ensemble库的RandomForestRegressor类。 二对于分类问题而言,我们将sklearn.ensemble库的RandomForestClassifier类。 RandomForestClassifier类也将n_estimators作为参数。与之前一样,此参数定义为随机森林中的树数。我们再次设置为20棵树。
训练之后就该评估了,对于分类问题,用于评估算法的度量是精确度,召回率和F1值等,我们打印出来即可
在这里插入图片描述
完整代码在2.py,结果如下所示
在这里插入图片描述
从上图可以看到,用20棵树的随机森林分类器得到的准确率为98.90%。

参考:
1.《机器学习》(西瓜书)
2.《机器学习导论》(Ethen Alpaydin)
3. https://stackabuse.com

随机森林(Random Forest, RF)是一种由决策树构成的集成算法,采用的是Bagging方法,在很多情况下都能有不错的表现。它是Bagging算法的进化版,思想仍然是bagging,但进行了独有的改进[^1][^3]。 随机森林由很多决策树构成,不同决策树之间没有关联。进行分类任务时,新的输入样本进入,森林中的每一棵决策树分别进行判断和分类,每个决策树会得到一个自己的分类结果,决策树的分类结果中哪一个分类最多,随机森林就会把这个结果当作最终的结果,即通过不同维度使用决策树去分类,再把所有的结果进行统计,得出分类最多的那个分类就是预测的最终结果[^3]。 Bagging的主要思想是从数据集中采样出T个数据集,然后基于这T个数据集,每个训练出一个基分类器,再将这些基分类器进行组合做出预测。在做预测时,对于分类任务,使用简单的投票法;对于回归任务使用简单平均法。若分类预测时出现两个类票数一样时,则随机选择一个[^3]。 使用训练好的随机森林分类器对测试集进行预测,预测结果存储在数组中,该数组包含模型对每个测试样本的预测类别。还可使用`classification_report`函数生成分类报告,输入参数为真实标签和预测标签,该报告包含每个类别的精确率(Precision)、召回率(Recall)、F1 - score 以及每个类别的样本数量等指标,将其输出到控制台,便于查看模型在测试集上的表现[^2]。 以从天气数据集去推断天气情况为例,其实现的Python代码示例如下: ```python import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt from sklearn.preprocessing import LabelEncoder from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import classification_report # 导入数据 data = pd.read_csv('./weather_classification_data.csv') print(data) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值