【机器学习】红酒数据集和加利福尼亚的房价数据的随机森林算法详解

news2024/10/7 16:21:28

一.随机森林

1.1随机森林的构建

bootstrap参数代表的是bootstrap sample,也就是“有放回抽样”的意思,指每次从样本空间中可以重复抽取同一个样本(因为样本在第一次被抽取之后又被放回去了)

假设,原始样本是”苹果,”西瓜,”香蕉,桃子],那么经过bootstrap sample 重构的样本就可能是[西瓜,”西瓜,香蕉”,桃子],还有可能是['苹果,西瓜,桃子’,桃子],bootstrap sample生成的数据集和原始数据集在数据量上是完全一样的,但由于进行了重复采样,因此其中有一些数据点会丢失。

image-20221119200636938

1.2 红酒数据集之随机森林

1.使用红酒数据集:

from sklearn.datasets import load_wine
wine = load_wine()
X=wine.data
y=wine.target

2.随机森林

from sklearn.model_selection import train_test_split

3.切分数据集:测试集30%

X_train, X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=0)

4.随机森林

from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(n_estimators=25, random_state=3)

5.模型训练及评估

model.fit(X_train,y_train)
print('Trainscore:%f'%(model.score(X_train, y_train) ) )
print('Test score:%f '%(model.score(X_test,y_test) ) )

运行结果如下:

6.增加归一化:

按列归一化,使用 zero-score 零均值归一化算法

wine_X = X.copy()
for i in range(X.shape[1]):
    column_X = X[:, i]
    wine_X[:, i] = (column_X - column_X.mean())/column_X.std()

运行结果:

image-20221119203143551

发现结果一样,说明随机森林,数据的归一化对其影响不大。

1.3加利福尼亚的房价数据之随机森林

1.加利福尼亚的房价数据:

from sklearn.datasets import fetch_california_housing
import pandas as pd
housing = fetch_california_housing()
X = housing.data
y = housing.target
df=pd.DataFrame()
for i in range(8):
    df[housing["feature_names"][i]]=X[:,i]
df["target"]=y
df.to_csv("fetch_california_housing.csv",index=None)
pd.set_option('display.max_column', None)
df.describe()

2.进行数据归一化

wine_X = X.copy()
for i in range(X.shape[1]):
    column_X = X[:, i]
    wine_X[:, i] = (column_X - column_X.mean())/column_X.std()

3.随机森林

from sklearn.model_selection import train_test_split

4.切分数据集:测试集30%

X_train, X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=0)

5.模型训练及评估

from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(n_estimators=25, random_state=3)
model.fit(X_train,y_train)
print('Trainscore:%f'%(model.score(X_train, y_train) ) )
print('Test score:%f '%(model.score(X_test,y_test) ) )

运行结果如下:

image-20221119203131200

1.4为什么要生成bootstrap sample数据集?

这是因为通过重新生成数据集,可以让随机森林中的每一棵决策树在构建的时候,会彼此之间有些差异。再加上每棵树的节点都会去选择不同的样本特征,经过这两步动作之后,可以完全肯定随机森林中的每棵树都不一样。

1.5 bootstrap sample数据集

模型会基于新数据集建立一棵决策树,在随机森林当中,算法不会让每棵决策树都生成最佳的节点,而是会在每个节点上随机地选择一些样本特征,然后让其中之一有最好的拟合表现。可以用max_features这个参数来控制所选择的特征数量最大值的,在不进行指定的情况下,随机森林默认自动选择最大特征数量。
假如把max_features设置为样本全部的特征数n_features就意味着模型会在全部特征中进行筛选,这样在特征选择这一步,就没有随机性可言了。而如果把max_features的值设为1,就意味着模型在数据特征上完全没有选择的余地,只能去寻找这1个被随机选出来的特征向量的阈值了。
max_eatures的取值越高,随机森林里的每一棵决策树就会“长得更像”,它们因为有更多的不同特征可以选择,也就会更容易拟合数据;反之,如果max_features取值越低,就会迫使每棵决策树的样子更加不同,而且因为特征太少,决策树们不得不制造更多节点来拟合数据。

n_estimators这个参数控制的是随机森林中决策树的数量。在随机森林构建完成之后,每棵决策树都会单独进行预测。如果是用来进行回归分析的话,随机森林会把所有决策树预测的值取平均数;如果是用来进行分类的话,在森林内部会进行-“投票“-,每棵树预测出数据类别的概率,比如其中一棵树说,“这瓶酒80%属于class_l",另外一棵树说“这瓶酒60%属于class_2",随机森林会把这些概率取平均值,然后把样本放入概率最高的分类当中。

对于超大数据集来说,随机森林会比较耗时,不过我们可以用多进程并行处理的方式来解决这个问题。实现方式是调节随机森林的njobs 参数,记得把njobs参数数值设为和CPU内核数一致,比如你的CPU内核数是2,那么njobs参数设为3或者更大是没有意义的。当然如果你搞不清楚自己的CPU到底就多少内核,可以设置njobs=-1,这样随机森林会使用CPU的全部内核,速度就会极大提升了。

image-20221119204111493

可以发现随机森林所进行的分类要更加细腻一些,对训练数据集的拟合更好。可以自己试试调节n_estimator参数和random_state参数,看看分类器的表现会有怎样的变化。

1.6 随机森林的优势和不足

在机器学习领域,无论是分类还是回归,随机森林都是应用最广泛的算法之一

  • 优势

​ 1.不需要过于在意参数的调节

​ 2.不要求对数据进行预处理

​ 3.集成了决策树的所有优点,而且能够弥补决策树的不足

​ 4.支持并行处理

  • 不足

​ 1.对于超高维数据集、稀疏数据集等,随机森林模型拟合优度不佳,线性模型要比随机森林的表现更好一些

​ 2.随机森林相对更消耗内存,速度也比线性模型要慢

1.7 决策树

image-20221119202142592

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19854.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【POJ No. 3253】 围栏修复 Fence Repair

【POJ No. 3253】 围栏修复 Fence Repair 北大OJ 题目地址 这道题其实我们 之前就做过了 https://blog.csdn.net/weixin_44226181/article/details/127064923 当时我们 是在学习哈夫曼树 【题意】 约翰想修牧场周围的篱笆,需要N 块(1≤N ≤20000&…

CMake中if的使用

CMake中的if命令用于有条件地执行一组命令&#xff0c;其格式如下&#xff1a; if(<condition>)<commands> elseif(<condition>) # optional block, can be repeated<commands> else() # optional block<commands> endif() 根据Co…

HTML5期末大作业:旅游网页设计与实现——旅游风景区网站HTML+CSS (1)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 游景点介绍 | 旅游风景区 | 家乡介绍 | 等网站的设计与制作 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 CSS&…

【项目实战:核酸检测平台】第一章 逆向工程

引言 准备做个项目实战系列&#xff0c;选一些比较有代表性&#xff0c;难度适中、规模合适的项目&#xff0c;从不同的角度&#xff0c;不同的深度去解析。很多初学者都抱怨没有实战项目&#xff0c;而学校/机构里大量用烂的学生管理、图书管理、电子商城等项目实在没有什么新…

LeetCode--230. 二叉搜索树中第K小的元素(C++描述)

// Source :https://leetcode.cn/problems/kth-smallest-element-in-a-bst/ // Date : 2022-11-19 /************************************************************************************** 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计…

Nginx 快速入门

一、简述 1.1 介绍 传统的 Web 服务器&#xff0c;每个客户端连接作为一个单独的进程或线程处理&#xff0c;需在切换任务时将 CPU 切换到新的任务并创建一个新的运行时上下文&#xff0c;消耗额外的内存和 CPU 时间&#xff0c;当并发请求增加时&#xff0c;服务器响应变慢&…

修改xml文件

一、前言 本节是修改xml;同样方法也可修改arxml文件&#xff1b;主要使用LET.Element创建节点&#xff1b; 二、知识点 1、专门用于格式化处理xml文件使其具有层级分明的缩进函数 #专门用于格式化处理xml文件使其具有层级分明的缩进 def indent( elem, level0): i "\n&…

基于51单片机的全自动智能洗衣机控制系统Proteus仿真

资料编号&#xff1a;108 下面是相关功能视频演示&#xff1a; 108-基于51单片机的全自动智能洗衣机控制系统Proteus仿真&#xff08;仿真源码全套资料&#xff09;设计功能&#xff1a; 1、对水温实时显示 2、显示滚筒转速 3、显示运行倒计时 4、能通过按钮分别设置洗涤时间…

一文带你深入理解【Java基础】· 常用类(上)字符串相关类

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

[附源码]java毕业设计社区私家车位共享收费系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于51单片机的八路电压表采集Proteus仿真

资料编号&#xff1a;110 下面是相关功能视频演示&#xff1a; 110-基于51单片机的八路电压表采集Proteus仿真&#xff08;源码仿真原理图全套资料&#xff09;功能如下&#xff1a; 利用单片机及其外围器件&#xff08;A/D转换器等&#xff09;实现一款简易电压表&#xff0…

(免费分享)基于springboot医药进销存系统

源码获取&#xff1a;关注文末gongzhonghao&#xff0c;输入014领取下载链接 开发工具&#xff1a;IDEA,数据库mysql 技术&#xff1a;springbootmybatis 系统主要分两个角色&#xff0c;客户和员工 package cn.tedu.drug.controller;import java.io…

【Pytorch with fastai】第 18 章 :使用 CAM 进行 CNN 解释

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

Design a Facebook NewsFeed

title: Notes of System Design No.06 — Design a Facebook’s Newsfeed description: Design a Facebook’s Newsfeed ’ date: 2022-05-13 18:01:58 tags: 系统设计 categories: 系统设计 00. What is News Feed? 01.Functional Requirement 02. Non-Functional Requireme…

面试刷题---计算机网络部分(一)

1 请描述 TCP/IP 协议中主机与主机之间通信的三要素 答&#xff1a; IP 地址&#xff08;IP address&#xff09; 子网掩码&#xff08;subnet mask&#xff09; IP 路由&#xff08;IP router&#xff09; 扩展&#xff1a; TCP/IP定义&#xff1a;TCP/IP是基于TCP和IP这两个…

iHRM 人力资源管理系统_第11章_刷脸登录

iHRM 人力资源管理系统_第11章_刷脸登录 文章目录iHRM 人力资源管理系统_第11章_刷脸登录第11章 刷脸登录1 浅谈人工智能1.1 人工智能的概述1.2 人工智能的应用领域1.3 基于人工智能的刷脸登录介绍2 百度云AI概述2.1 概述2.2 百度云AI的开发步骤2.3 百度云AI的注册与认证3 百度…

web大作业 静态网页(地下城与勇士 10页 带视频)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 游戏官网 | 游戏网站 | 电竞游戏 | 游戏介绍 | 等网站的设计与制作 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 …

开源免费的对象存储Minio

什么是Minio&#xff1f; Minio是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合存储大容量、非结构化的数据。例如&#xff0c;图片、视频、日志文件、备份数据和容器/虚拟机镜像等&#xff0c;而一个对象文件可以是…

机器学习:卷积神经网络

卷积神经网络卷积神经网络的结构及原理卷积层池化层激活函数全连接层反馈运算使用MNIST数据集进行代码解析数据介绍实现流程代码实现卷积神经网络的结构及原理 卷积层 卷积运算一个重要的特点就是&#xff1a;通过卷积运算&#xff0c;可以使原信号特征增强&#xff0c;并且降…

服务器常用的异常及性能排查

服务器常用的异常及性能排查 使用 top 命令查看性能指标 top 命令使用详细介绍&#xff1a;传送门 查看Tasks total 进程数 正常我们在使用过程中对每天的一个进程数大概是有一个谱的&#xff0c;比如正常就是1百多个&#xff0c;突然暴增几百&#xff0c;那就很明显这里有…