【机器学习】python实现随机森林

这篇具有很好参考价值的文章主要介绍了【机器学习】python实现随机森林。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、模型介绍

1. 集成学习

2. bagging

3. 随机森林算法

二、随机森林算法优缺点

三、代码实现

四、疑问

五、总结


本文使用mnist数据集,进行随机森林算法。

一、模型介绍

1. 集成学习

集成学习通过训练学习出多个估计器,当需要预测时通过结合器将多个估计器的结果整合起来当作最后的结果输出。

集成学习的优势是提升了单个估计器的通用性与鲁棒性,比单个估计器拥有更好的预测性能。集成学习的另一个特点是能方便的进行并行化操作。

2. bagging

  Bagging 算法是一种集成学习算法,其全称为自助聚集算法(Bootstrap aggregating),顾名思义算法由 Bootstrap 与 Aggregating 两部分组成。

算法的具体步骤为:假设有一个大小为 N 的训练数据集,每次从该数据集中有放回的取选出大小为 M 的子数据集,一共选 K 次,根据这 K 个子数据集,训练学习出 K 个模型。当要预测的时候,使用这 K 个模型进行预测,再通过取平均值或者多数分类的方式,得到最后的预测结果。

3. 随机森林算法

将多个决策树结合在一起,每次数据集是随机有放回的选出,同时随机选出部分特征作为输入,所以该算法被称为随机森林算法。可以看到随机森林算法是以决策树为估计器的Bagging算法。

随机森林python,机器学习在态势感知的应用,python,随机森林

上图展示了随机森林算法的具体流程,其中结合器在分类问题中,选择多数分类结果作为最后的结果,在回归问题中,对多个回归结果取平均值作为最后的结果。

使用Bagging算法能降低过拟合的情况,从而带来了更好的性能。单个决策树对训练集的噪声非常敏感,但通过Bagging算法降低了训练出的多颗决策树之间关联性,有效缓解了上述问题。


二、随机森林算法优缺点

1. 对于很多种资料,可以产生高准确度的分类器
2. 可以处理大量的输入变量
3. 可以在决定类别时,评估变量的重要性
4. 在建造森林时,可以在内部对于一般化后的误差产生不偏差的估计
5. 包含一个好方法可以估计丢失的资料,并且如果有很大一部分的资料丢失,仍可以维持准确度
6. 对于不平衡的分类资料集来说,可以平衡误差
7. 可被延伸应用在未标记的资料上,这类资料通常是使用非监督式聚类,也可侦测偏离者和观看资料
8. 学习过程很快速
 


三、代码实现

代码:

from sklearn.ensemble import  RandomForestClassifier  # 随机森林分类器
from sklearn.datasets import load_digits  # 数据集
from sklearn.model_selection import train_test_split  # 数据分割模块
from sklearn.metrics import classification_report  # 生产报告
from sklearn.metrics import confusion_matrix

# 1.加载数据
mnist = load_digits()

# 2.分割数据集
x_train, x_test, y_train, y_test, image_train, image_test = train_test_split(mnist.data, mnist.target, mnist.images,
                                                                             test_size=0.25, random_state=33)

# 3.训练分类器
rfc = RandomForestClassifier(n_jobs=-1)
train_history = rfc.fit(x_train, y_train)

# 4.测试
pred = rfc.predict(x_test)
report = classification_report(y_test, pred)
confusion_mat = confusion_matrix(y_test, pred)

print(report)
print(confusion_mat)

 结果:

              precision    recall  f1-score   support

           0       0.97      1.00      0.99        35
           1       0.98      1.00      0.99        54
           2       1.00      0.95      0.98        44
           3       0.98      0.89      0.93        46
           4       0.94      0.94      0.94        35
           5       0.92      0.94      0.93        48
           6       0.98      0.98      0.98        51
           7       0.92      1.00      0.96        35
           8       0.95      0.95      0.95        58
           9       0.93      0.93      0.93        44

    accuracy                           0.96       450
   macro avg       0.96      0.96      0.96       450
weighted avg       0.96      0.96      0.96       450

[[35  0  0  0  0  0  0  0  0  0]
 [ 0 54  0  0  0  0  0  0  0  0]
 [ 1  0 42  0  0  0  0  0  0  1]
 [ 0  0  0 41  0  2  0  1  1  1]
 [ 0  0  0  0 33  0  0  2  0  0]
 [ 0  0  0  0  0 45  1  0  1  1]
 [ 0  0  0  0  1  0 50  0  0  0]
 [ 0  0  0  0  0  0  0 35  0  0]
 [ 0  1  0  0  1  1  0  0 55  0]
 [ 0  0  0  1  0  1  0  0  1 41]]

四、疑问

以上代码是从书上学习的,但是有一些问题:

1. 为什么不划分验证集,结果如何以图片的形式可视化?

2. 为什么不进行数据的预处理,如下代码所示:

def get_mnist_data():

    (x_train_original, y_train_original), (x_test_original, y_test_original) = mnist.load_data()

    # 从训练集中分配验证集
    x_val = x_train_original[50000:] #(10000,28,28)每一个图片
    y_val = y_train_original[50000:] #10000,每个图片的标签
    x_train = x_train_original[:50000]# (50000,28,28)
    y_train = y_train_original[:50000]#50000

    # 将图像转换为四维矩阵(nums,rows,cols,channels), 这里把数据从unint类型转化为float32类型, 提高训练精度。
    x_train = x_train.reshape(x_train.shape[0], 28, 28, 1).astype('float32')
    #x_train.shape[0]表示x_train的行数。28是图片自身的大小。这里与原本的LeNet-5不同,原有的输入大小是32
    x_val = x_val.reshape(x_val.shape[0], 28, 28, 1).astype('float32')
    x_test = x_test_original.reshape(x_test_original.shape[0], 28, 28, 1).astype('float32')

    # 原始图像的像素灰度值为0-255,为了提高模型的训练精度,通常将数值归一化映射到0-1。
    x_train = x_train / 255
    x_val = x_val / 255
    x_test = x_test / 255

    # 图像标签一共有10个类别即0-9,这里将其转化为独热编码(One-hot)向量
    y_train = np_utils.to_categorical(y_train)#标签都变成为二维
    y_val = np_utils.to_categorical(y_val)
    y_test = np_utils.to_categorical(y_test_original)

    return x_train, y_train, x_val, y_val, x_test, y_test

不进行归一化,不转化为独热编码向量?

3. 所用划分测试集和训练集的代码:

x_train, x_test, y_train, y_test, image_train, image_test = train_test_split(mnist.data, mnist.target, mnist.images,
                                                                             test_size=0.25, random_state=33)

经查询,只能划分测试集和训练集,那如果想要画验证集,怎么办呢?

4. 如何绘制loss曲线、accuracy曲线?按照tensprflow的结构,总是会报错,说不存在history

5. 损失函数如何定义呢?代码中似乎没有。

6. 不需要定义epochs等超参数吗?sklearn库的fit函数:

train_history = rfc.fit(x_train, y_train)

不能添加上面所说的超参数 


五、总结

总之,可能是我对sklearn库了解的不够,感觉和写cnn完全不是一个思路,还需要进一步的学习。如果该代码有进一步的后续改进,会在评论区发出。文章来源地址https://www.toymoban.com/news/detail-743776.html

到了这里,关于【机器学习】python实现随机森林的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 随机森林回归算法的Python实现与应用

         随机森林回归是一种集成学习算法,通过组合多个决策树来实现回归任务,构建多个决策树,并将它们组合成一个强大的回归模型。本文将会从随机森林回归算法的算法原理、Python实现及实际应用进行详细说明。     在现在的数据分析及数学建模等竞赛中,机器学习算

    2024年02月12日
    浏览(40)
  • 【机器学习】R语言实现随机森林、支持向量机、决策树多方法二分类模型

    暑期简单学习了机器学习理论知识,当时跟着B站咕泡老师学的,内容讲得蛮详细,实例代码、资料都比较全面,但是学校Python课程开设在这学期,所以用Python进行数据分析、建模等不是很熟悉,所以决定用之前学过的R语言来实现机器学习。R语言的相关包也都比较完善,所以

    2024年02月04日
    浏览(43)
  • python机器学习——分类模型评估 & 分类算法(k近邻,朴素贝叶斯,决策树,随机森林,逻辑回归,svm)

    交叉验证:为了让被评估的模型更加准确可信 交叉验证:将拿到的数据,分为训练和验证集。以下图为例:将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。 通常情

    2024年02月03日
    浏览(67)
  • 机器学习——决策树/随机森林

    决策树可以做分类也可以做回归,决策树容易过拟合 决策树算法的基本原理是依据信息学熵的概念设计的(Logistic回归和贝叶斯是基于概率论),熵最早起源于物理学,在信息学当中表示不确定性的度量,熵值越大表示不确定性越大。 ID3算法就是一种通过熵的变化,构造决策

    2024年02月07日
    浏览(38)
  • 17. 机器学习 - 随机森林

    Hi,你好。我是茶桁。 我们之前那一节课讲了决策树,说了决策树的优点,也说了其缺点。 决策树实现起来比较简单,解释解释性也比较强。但是它唯一的问题就是不能拟合比较复杂的关系。 后来人们为了解决这个问题,让其能够拟合更加复杂的情况,提出来了一种模型,

    2024年02月05日
    浏览(50)
  • 机器学习笔记:随机森林

    集成学习通过构建多个学习器采用加权的方式来完成学习任务 一般来讲,多个学习器同属于一种模型,比如决策树,线性模型,而不会交叉用多种模型 为了保证集成学习的有效性,多个弱分类器之间应该满足两个条件 准确性 :个体学习器要有一定的准确性,这样才能有好的

    2024年02月16日
    浏览(64)
  • 【机器学习】随机森林

    集成学习方法通过建立几个模型组合来解决单一预测问题。它的工作原理就是生成多个分类器/模型,各自独立地学习和做出预测。这些预测最后结合成组合预测,因此优于任何一个单分类做出的预测。 在机器学习中,随机森林是一个包含多个决策树的分类器。并且其输出的

    2024年02月05日
    浏览(52)
  • 机器学习随机森林笔记

            随机森林(Random Forests)是一种集成学习方法,用于解决分类和回归问题。它是由Leo Breiman和Adele Cutler于2001年提出的,是集成学习中最受欢迎和广泛应用的算法之一。         随机森林通过组合多个决策树来进行预测。每个决策树都是独立地从原始数据的随机

    2024年02月15日
    浏览(42)
  • 机器学习——决策树与随机森林

    机器学习——决策树与随机森林 决策树和随机森林都是常见的机器学习算法,用于分类和回归任务,本文将对这两种算法进行介绍。 决策树算法是一种基于树结构的分类和回归算法。它通过对数据集进行 递归地二分 ,选择最佳的特征进行划分,直到达到终止条件。 决策树

    2024年02月09日
    浏览(38)
  • 【机器学习】随机森林 – Random forest

    随机森林是一种由 决策树 构成的 集成算法 ,他在很多情况下都能有不错的表现。 要深入理解上面这句话,请阅读我的另外两篇文章: 【机器学习】决策树 – Decision Tree 【机器学习】集成学习 - Ensemble Learning 随机森林属于 集成学习 中的 Bagging (Bootstrap AGgregation 的简称)

    2024年02月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包