随机森林,Random Forests Classifiers/Regressor

news2025/9/19 8:06:42

目录

介绍: 

一、 Random Forests Classifiers(离散型)

1.1 数据处理

1.2建模

1.3特征值权值分析

1.4 特征值的缩减

二、Random Forests Regressor(连续型)

2.1数据处理 

2.2建模

2.3调参


介绍: 

随机森林(Random Forests)是一种集成学习算法,它由多个决策树组成。它在每个决策树的训练过程中引入了随机性,以提高模型的泛化能力和鲁棒性。

随机森林的训练过程如下:

  1. 从训练集中随机选取一部分样本,构建一个决策树。这种随机选取样本的过程叫做自助采样(bootstrap sampling)。
  2. 对于每个决策树的每个节点,从所有特征中随机选取一部分特征,根据这些特征来选择最优的分割点。
  3. 重复以上两个步骤,构建多个决策树。
  4. 预测时,将待预测样本输入到每个决策树中,得到多个预测结果。最终,根据这些预测结果进行投票或平均,确定最终的预测结果。

随机森林在许多方面都表现出良好的性能。它可以用于分类问题和回归问题,并且对于处理高维数据和大型数据集也非常有效。此外,随机森林能够处理缺失数据和不平衡数据,并能够评估特征的重要性。

总的来说,随机森林是一种强大的机器学习算法,它通过组合多个决策树的预测结果来提高模型的性能和鲁棒性。它在实际应用中广泛使用,并且具有很好的可解释性和通用性。

一、 Random Forests Classifiers(离散型)

1.1 数据处理

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

data=pd.read_csv('iris.csv')#离散型

X=data.iloc[:,1:5]
'''结果:
 	Sepal.Length 	Sepal.Width 	Petal.Length 	Petal.Width
0 	5.1 	3.5 	1.4 	0.2
1 	4.9 	3.0 	1.4 	0.2
2 	4.7 	3.2 	1.3 	0.2
3 	4.6 	3.1 	1.5 	0.2
4 	5.0 	3.6 	1.4 	0.2
... 	... 	... 	... 	...
145 	6.7 	3.0 	5.2 	2.3
146 	6.3 	2.5 	5.0 	1.9
147 	6.5 	3.0 	5.2 	2.0
148 	6.2 	3.4 	5.4 	2.3
149 	5.9 	3.0 	5.1 	1.8

150 rows × 4 columns
'''

y=data.iloc[:,-1:]
'''结果:
 	Species
0 	setosa
1 	setosa
2 	setosa
3 	setosa
4 	setosa
... 	...
145 	virginica
146 	virginica
147 	virginica
148 	virginica
149 	virginica

150 rows × 1 columns
'''

1.2建模

from  sklearn.model_selection import train_test_split#将数据分成测试和训练集
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=0)#测试集占百分之三十,random_state=0随机抽取数据集里的成为测试集

from sklearn.ensemble import RandomForestClassifier#import  random forest model

clf=RandomForestClassifier(n_estimators=100)#赋类,100棵树,后面可以调参
clf.fit(X_train,y_train)#训练集喂给这个模型
y_pred=clf.predict(X_test)#预测值

y_pred#预测值
'''结果:
array(['virginica', 'versicolor', 'setosa', 'virginica', 'setosa',
       'virginica', 'setosa', 'versicolor', 'versicolor', 'versicolor',
       'virginica', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'setosa', 'versicolor', 'versicolor', 'setosa',
       'setosa', 'virginica', 'versicolor', 'setosa', 'setosa',
       'virginica', 'setosa', 'setosa', 'versicolor', 'versicolor',
       'setosa', 'virginica', 'versicolor', 'setosa', 'virginica',
       'virginica', 'versicolor', 'setosa', 'virginica', 'versicolor',
       'versicolor', 'virginica', 'setosa', 'virginica', 'setosa',
       'setosa'], dtype=object)
'''

from sklearn import metrics
metrics.accuracy_score(y_test,y_pred)#模型的值,y_test,y_pred对比
#结果:0.9777777777777777

1.3特征值权值分析

#特征变量的权值分析
feature_list=list(X.columns)
feature_imp=pd.Series(clf.feature_importances_,index=feature_list).sort_values(ascending=False)
feature_imp#特征值的权重
'''结果:
Petal.Width     0.456188
Petal.Length    0.411471
Sepal.Length    0.106732
Sepal.Width     0.025609
dtype: float64
'''

feature_imp.index
#结果:Index(['Petal.Width', 'Petal.Length', 'Sepal.Length', 'Sepal.Width'], dtype='object')
sns.barplot(x=feature_imp,y=feature_imp.index)
plt.xlabel('feature importance score')
plt.ylabel('feature')
plt.legend(feature_imp.index)
plt.show()

 

1.4 特征值的缩减

#特征变量的缩减,对于成百上千特征变量的大数据非常有意义
X=data.iloc[:,1:-2]
'''结果:
 	Sepal.Length 	Sepal.Width 	Petal.Length
0 	5.1 	3.5 	1.4
1 	4.9 	3.0 	1.4
2 	4.7 	3.2 	1.3
3 	4.6 	3.1 	1.5
4 	5.0 	3.6 	1.4
... 	... 	... 	...
145 	6.7 	3.0 	5.2
146 	6.3 	2.5 	5.0
147 	6.5 	3.0 	5.2
148 	6.2 	3.4 	5.4
149 	5.9 	3.0 	5.1

150 rows × 3 columns
'''


X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=0)#测试集占百分之三十,random_state=0随机抽取数据集里的成为测试集
clf=RandomForestClassifier(n_estimators=100)#赋类,100棵树,后面可以调参
clf.fit(X_train,y_train)#训练集喂给这个模型
y_pred=clf.predict(X_test)#预测值
metrics.accuracy_score(y_test,y_pred)#模型的值,y_test,y_pred对比
#结果:0.9333333333333333

二、Random Forests Regressor(连续型)

2.1数据处理 

dataset = pd.read_csv('petrol_consumption.csv')
dataset#汽油税,收入,高速费,人口密度,汽油消耗

dataset.info()
'''结果:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 48 entries, 0 to 47
Data columns (total 5 columns):
 #   Column                        Non-Null Count  Dtype  
---  ------                        --------------  -----  
 0   Petrol_tax                    48 non-null     float64
 1   Average_income                48 non-null     int64  
 2   Paved_Highways                48 non-null     int64  
 3   Population_Driver_licence(%)  48 non-null     float64
 4   Petrol_Consumption            48 non-null     int64  
dtypes: float64(2), int64(3)
memory usage: 2.0 KB
'''

X = dataset.iloc[:,0:4]
y=dataset.iloc[:,4]

#数据差异非常大,需要引入数据标准化
from sklearn.preprocessing import StandardScaler
sc =  StandardScaler()
X_train = sc.fit_transform(X_train)
X_test=sc.transform(X_test)

X_train
'''结果:
array([[-0.60684249, -0.13370363, -0.39371558,  0.71661097],
       [-0.60684249,  0.73650306,  0.12337074,  2.41961586],
       [-0.60684249, -0.08812138,  1.37233744,  0.09273789],
       [ 0.33674156, -0.35747107,  0.14030588, -0.29507511],
       [ 1.28032561,  1.11152071, -0.85491594, -1.1718697 ],
       [-0.60684249, -0.3201765 ,  0.85525111, -0.14332219],
       [-0.60684249, -1.45973288, -0.42137631, -0.29507511],
       [-0.60684249,  0.48165682,  0.66501302,  1.39106835],
       [-0.60684249, -0.12541595, -0.52016464,  0.37938228],
       [ 0.33674156,  0.17915639,  0.87472653, -0.86836388],
       [-0.60684249, -0.31810458,  0.31106856, -0.59858093],
       [ 1.28032561, -1.32505804, -0.20658227, -0.61544236],
       [ 2.22390966,  2.03352542, -1.16990957, -0.16018363],
       [-0.60684249, -1.3312738 , -0.21250957, -0.6828881 ],
       [-1.00314779, -1.15723246,  0.66501302,  0.81777958],
       [-0.60684249, -0.05911449,  0.75674504,  0.46368945],
       [ 0.80853358, -1.50324322, -0.62205774,  1.39106835],
       [ 1.28032561, -0.55637546, -1.19333652, -0.14332219],
       [-0.60684249,  0.94576705,  0.40985689, -0.10959932],
       [-0.60684249, -1.27533194, -0.80919106, -1.22245401],
       [ 0.80853358,  0.44229032, -0.80693304, -0.49741232],
       [ 0.33674156,  1.98587124,  1.80361904, -2.18355578],
       [ 1.28032561, -0.21243662, -0.22351741, -1.0707011 ],
       [-2.49401059, -0.65375573,  3.4728595 , -0.2444908 ],
       [ 0.33674156,  1.28970589, -1.37623605,  0.36252084],
       [ 0.80853358, -0.0404672 ,  0.15018472,  1.62712844],
       [-0.60684249,  0.31383124,  0.85496886, -0.48055089],
       [-0.60684249, -0.03217952, -0.4439565 ,  1.54282127],
       [ 1.28032561,  0.23924209, -0.43351316, -0.16018363],
       [-0.13505047,  1.05557885, -0.88257667, -0.86836388],
       [ 1.28032561, -1.63584614, -0.9884213 , -0.93580962],
       [-1.55042654,  1.77039149, -0.89640703,  1.54282127]])
'''

2.2建模

from sklearn.ensemble import RandomForestRegressor
regressor = RandomForestRegressor(n_estimators=100,random_state=0)
regressor.fit(X_train,y_train)
y_pred = regressor.predict(X_test)
#结果:array([586.98, 489.34, 626.27, 658.65, 631.72, 614.6 , 612.19, 579.32,
#       465.44, 512.32, 438.32, 657.18, 624.52, 598.46, 534.4 , 555.78])


from sklearn import metrics
print('Mean Absolute Error',metrics.mean_absolute_error(y_test,y_pred))
print('Mean Squared Error',metrics.mean_squared_error(y_test,y_pred))
print('root mean squared error',np.sqrt(metrics.mean_squared_error(y_test,y_pred)))
'''结果:
Mean Absolute Error 50.18562499999999
Mean Squared Error 3964.588093749999
root mean squared error 62.964975134990716
'''

2.3调参

rmse=nestimators=[]#调参
for n in [20,30,50,80,100,200,300,400,500,600,700,800]:
    regressor = RandomForestRegressor(n_estimators=n,random_state=0)
    regressor.fit(X_train,y_train)
    y_pred = regressor.predict(X_test)
    print('-------------------')
    print('n_estimators={}',format(n))
    print('Mean Absolute Error',metrics.mean_absolute_error(y_test,y_pred))
    print('Mean Squared Error',metrics.mean_squared_error(y_test,y_pred))
    print('Root mean squared error',np.sqrt(metrics.mean_squared_error(y_test,y_pred)))
    rmse=np.append(rmse,np.sqrt(metrics.mean_squared_error(y_test,y_pred)))
    nestimators=np.append(nestimators,n)

'''结果:
-------------------
n_estimators={} 20
Mean Absolute Error 56.128125000000004
Mean Squared Error 4606.41578125
Root mean squared error 67.87058111766835
-------------------
n_estimators={} 30
Mean Absolute Error 49.94375000000001
Mean Squared Error 3922.442708333335
Root mean squared error 62.62940769585271
-------------------
n_estimators={} 50
Mean Absolute Error 49.158750000000005
Mean Squared Error 3868.3672749999996
Root mean squared error 62.19619984372035
-------------------
n_estimators={} 80
Mean Absolute Error 50.70390625
Mean Squared Error 4013.614755859375
Root mean squared error 63.35309586641662
-------------------
n_estimators={} 100
Mean Absolute Error 50.18562499999999
Mean Squared Error 3964.588093749999
Root mean squared error 62.964975134990716
-------------------
n_estimators={} 200
Mean Absolute Error 48.34375
Mean Squared Error 3622.057096875
Root mean squared error 60.18352845152069
-------------------
n_estimators={} 300
Mean Absolute Error 49.467708333333334
Mean Squared Error 3789.9574437499987
Root mean squared error 61.5626302536693
-------------------
n_estimators={} 400
Mean Absolute Error 48.489999999999995
Mean Squared Error 3636.7144398437504
Root mean squared error 60.30517755420135
-------------------
n_estimators={} 500
Mean Absolute Error 48.917499999999976
Mean Squared Error 3726.081923499998
Root mean squared error 61.041640897833
-------------------
n_estimators={} 600
Mean Absolute Error 48.97749999999999
Mean Squared Error 3719.864061805555
Root mean squared error 60.990688320476885
-------------------
n_estimators={} 700
Mean Absolute Error 48.50473214285714
Mean Squared Error 3633.144154209183
Root mean squared error 60.275568468569276
-------------------
n_estimators={} 800
Mean Absolute Error 48.12984374999999
Mean Squared Error 3560.1158533203115
Root mean squared error 59.66670640583668
'''
rmse
'''结果:
array([67.87058112, 62.6294077 , 62.19619984, 63.35309587, 62.96497513,
       60.18352845, 61.56263025, 60.30517755, 61.0416409 , 60.99068832,
       60.27556847, 59.66670641])
'''

sns.set_style('whitegrid')
plt.plot(nestimators,rmse,'bo',linestyle='dashed',linewidth=1,markersize=10)#前面x,后面y
plt.xlabel('feature importance score')
plt.ylabel('features')
plt.title("viualizing importeant features")
plt.show()

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

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

相关文章

灵芝,到2025年有望达到9.2亿美元

灵芝是一种传统的药食两用菌&#xff0c;其具有丰富的营养成分和医疗价值&#xff0c;因此备受关注。全球市场分析 从全球市场来看&#xff0c;近年来灵芝的市场需求持续增长。据估计&#xff0c;2019年全球灵芝市场规模为4.1亿美元&#xff0c;到2025年有望达到9.2亿美元。市场…

山西电力市场日前价格预测【2024-01-05】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-05&#xff09;山西电力市场全天平均日前电价为259.10元/MWh。其中&#xff0c;最高日前电价为363.99元/MWh&#xff0c;预计出现在18:00。最低日前电价为0.00元/MWh&#xff0c;预计出…

跨模态检索论文阅读:Plug-and-Play Regulators for Image-Text Matching用于图像文本匹配的即插即用调节器

Plug-and-Play Regulators for Image-Text Matching用于图像文本匹配的即插即用调节器 利用细粒度的对应关系和视觉语义比对在图像-文本匹配中显示出巨大的潜力。通常&#xff0c;最近的方法首先使用跨模态注意力单元来捕捉潜在的区域-单词交互&#xff0c;然后整合所有比对以获…

如何使用VsCode编译C语言?

下载VsCode (1) 解压到D盘跟目录 (2) 运行[vscode.reg]&#xff0c;注册右键菜单 (3) 进入[pack]文件夹&#xff0c;运行[install.bat]。安装基本插件。 下载mingw32 (1) 解压任意目录 (2) 我的电脑右键–高级系统设置–高级–环境变量–系统变量–Path(双击)–空白行(双击)–…

Arduino使用PWM驱动TB6612控制直流减速电机

目录 一、PWM介绍 二、硬件介绍 1、设备型号 2、接线图 3、TB6612控制电机转动逻辑 &#xff08;1&#xff09;控制逻辑 &#xff08;2&#xff09;真值表 4、G37系列JGB-520直流减速电机 三、测试程序 1、电机正反转控制 2、编码器脉冲读取 &#xff08;1&#xf…

柯桥小语种学习,留学韩语 生活日常口语 语法

① N이다/A/V/았ㄹ/을지도 모르다 说不定 이미 도착했을 지도 모르니까 전화해 봐요 说不定已经到了&#xff0c;打电话试试 주말에 세일이 있을지도 모르니까 주말에 가 보자 周末说不定会搞活动&#xff0c;我们周末去吧 ② ㄴ/은/는/았었는/ㄹ/을지 모르다 不知道 처음이…

《Aspect Sentiment Quad Prediction as Paraphrase Generation》论文阅读

文章目录 文章介绍文章模型问题定义文章模型PARAPHRASE建模 文章地址&#xff1a; https://arxiv.org/abs/2110.00796 文章介绍 这篇文章在已有的方面级情感分析任务的基础了研究了一项新的任务&#xff1a;方面级情感四元组提取&#xff08;Aspect Sentiment Quad Prediction…

【UEFI基础】EDK网络框架(基础说明)

基础说明 UEFI中的网络框架大致如下&#xff1a; 红框部分是实现UEFI的EDK2开源项目中网络框架自带的实现&#xff0c;红框之外的部分需要网卡设备商提供驱动。UEFI下通常推荐使用最右边的形式&#xff0c;即网卡设备商提供实现了UNDI的网卡驱动。因此UEFI网络框架的另一个形式…

亚信安慧AntDB携核心业务系统数据库升级改造方案亮相“2023年国有企业应用场景发布会”

近日&#xff0c;亚信安慧AntDB数据库携核心业务系统数据库升级改造方案亮相“2023年国有企业应用场景发布会”。本次国有企业应用场景发布会由北京市国资委主办、中关村发展集团承办、中关村软件园公司协办&#xff0c;以“融通创新 智引未来”为主题&#xff0c;聚焦智慧城市…

同义词替换器降低论文重复率的最新技术趋势预测

大家好&#xff0c;今天来聊聊同义词替换器降低论文重复率的最新技术趋势预测&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 标题&#xff1a;同义词替换器降低论文重复率…

RK3568驱动指南|第九篇 设备模型-第105章 platform总线设备注册流程实例分析实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

1月4日代码随想录对称二叉树

101.对称二叉树 101. 对称二叉树 - 力扣&#xff08;LeetCode&#xff09; 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2…

面试算法89:房屋偷盗

题目 输入一个数组表示某条街道上的一排房屋内财产的数量。如果这条街道上相邻的两幢房屋被盗就会自动触发报警系统。请计算小偷在这条街道上最多能偷取到多少财产。例如&#xff0c;街道上5幢房屋内的财产用数组[2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;3]表示…

【JVM面试题】Java中的静态方法为什么不能调用非静态方法

昨晚京东大佬勇哥在群里分享了一道他新创的JVM面试题&#xff0c;我听完后觉得还挺有意思的&#xff0c;分享给大家 小佬们先别急着看我的分析&#xff0c;先自己想想答案 你是不是想说 因为静态方法是属于类的&#xff0c;而非静态方法属于实例对象 哈&#xff0c;有人这样回答…

【解决openGauss无法使用gs_check等服务器端命令问题】

【解决openGauss无法使用gs_check等服务器端命令问题】 一、问题描述二、问题原因三、解决方法 一、问题描述 [ommopengauss03 ~]$ gs_check -i CheckCPU Parsing the check items config file successfully [GAUSS-53026]: ERROR: Execute SSH command on host 192.168.56.19…

什么是设备树?

一. 简介 前面只是简单使用过设备树文件&#xff0c;接下来详细谈一谈设备树。掌握设备树是 Linux 驱动开发人员必 备的技能&#xff01; 因为在新版本的 Linux 中&#xff0c;ARM 相关的驱动全部采用了设备树(也有支持老式驱动的&#xff0c;比较少)&#xff0c;最新出的 CP…

打地鼠python程序设计说明,打地鼠游戏界面设计

这篇文章主要介绍了打地鼠python程序设计说明&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 Pygame库是专门为了帮助做出的游戏和其他多媒体应用Python编程语言的一个开放源代…

PyQt学习笔记

文章目录 1 环境搭建1.1 安装PyQt51.1.1 安装1.1.2 验证 1.2 安装PyInstaller1.3 安装PySide1.4 安装InnoSetup1.5 PyCharm配置外部工具1.5.1 PyCharm配置PyLUpdate1.5.2 PyCharm配置QtLinguist1.5.3 PyCharm配置QtDesigner1.5.4 PyCharm配置PyUIC1.5.5 PyCharm配置PyRCC1.5.6 …

SCPMA最新研究论文推荐!中国移动玻色量子发布联合研究成果

《中国科学&#xff1a;物理学 力学 天文学》英文版(SCIENCE CHINA Physics, Mechanics & Astronomy, SCPMA)出版中移(苏州)软件技术有限公司闻经纬和钱岭团队与北京玻色量子文凯团队的研究成果&#xff0c;文章题为“Optical experimental solution for the multiway numb…

win10搭建keras深度学习框架

在Win10系统上安装Keras&#xff0c;你可以按照以下步骤进行&#xff1a; 安装Python环境--建议安装Anaconda3&#xff0c;可以从官方网站下载对应版本的安装程序进行安装。一步一步的next就行了。安装完成后把根目录下的scripts目录加入path系统变量。 使用pip命令安装Tensor…