scikit-learn:随机森林

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

class sklearn.ensemble.RandomForestClassifier (n_estimators=10, 
											criterion=’gini’, 
											max_depth=None,
											min_samples_split=2, 
											min_samples_leaf=1, 
											min_weight_fraction_leaf=0.0, 
											max_features=’auto’,
											max_leaf_nodes=None, 
											min_impurity_decrease=0.0, 
											min_impurity_split=None, 
											bootstrap=True, 
											oob_score=False,
											n_jobs=None, 
											random_state=None, 
											verbose=0, 
											warm_start=False, 
											class_weight=None
										)

在这里插入图片描述
这些参数在随机森林中的含义,和我们在上决策树时说明的内容一模一样,单个决策树的准确率越高,随机森林的准确率也会越高,因为装袋法是依赖于平均值或者少数服从多数原则来决定集成的结果的。

在这里插入图片描述
建立一片森林,进行一个随机森林和单个决策树效益的对比。

#1. 导入我们需要的包
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_wine

#2. 导入需要的数据集
wine = load_wine()
wine.data
wine.target

#3. sklearn建模的基本流程
from sklearn.model_selection import train_test_split
Xtrain, Xtest, Ytrain, Ytest = train_test_split(
							wine.data,
							wine.target,
							test_size=0.3)

clf = DecisionTreeClassifier(random_state=0)
rfc = RandomForestClassifier(random_state=0)

clf = clf.fit(Xtrain,Ytrain)
rfc = rfc.fit(Xtrain,Ytrain)
score_c = clf.score(Xtest,Ytest)
score_r = rfc.score(Xtest,Ytest)

#4. 画出随机森林和决策树在一组交叉验证下的效果对比
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt

rfc = RandomForestClassifier(n_estimators=25)
rfc_s = cross_val_score(rfc,wine.data,wine.target,cv=10)

clf = DecisionTreeClassifier()
clf_s = cross_val_score(clf,wine.data,wine.target,cv=10)

plt.plot(range(1,11),rfc_s,label = "RandomForest")
plt.plot(range(1,11),clf_s,label = "Decision Tree")
plt.legend()
plt.show()


#5. 画出随机森林和决策树在十组交叉验证下的效果对比
rfc_l = []
clf_l = []
for i in range(10):
	rfc = RandomForestClassifier(n_estimators=25)
	rfc_s = cross_val_score(rfc,wine.data,wine.target,cv=10).mean()
	rfc_l.append(rfc_s)
	clf = DecisionTreeClassifier()
	clf_s = cross_val_score(clf,wine.data,wine.target,cv=10).mean()
	clf_l.append(clf_s)

plt.plot(range(1,11),rfc_l,label = "Random Forest")
plt.plot(range(1,11),clf_l,label = "Decision Tree")
plt.legend()
plt.show()


#6. n_estimators的学习曲线
superpa = []
for i in range(200):
	rfc = RandomForestClassifier(n_estimators=i+1,n_jobs=-1)
	rfc_s = cross_val_score(rfc,wine.data,wine.target,cv=10).mean()
	superpa.append(rfc_s)
print(max(superpa),superpa.index(max(superpa)))
plt.figure(figsize=[20,5])
plt.plot(range(1,201),superpa)
plt.show()

在这里插入图片描述

import numpy as np
from scipy.special import comb
np.array([comb(25,i)*(0.2**i)*((1-0.2)**(25-i)) for i in range(13,26)]).sum()

可见,判断错误的几率非常小,这让随机森林在红酒数据集上的表现远远好于单棵决策树
在这里插入图片描述
随机森林的重要属性之一:estimators_,查看森林中树的状况

rfc = RandomForestClassifier(n_estimators=20,random_state=2)
rfc = rfc.fit(Xtrain, Ytrain)

#随机森林的重要属性之一:estimators_,查看森林中树的状况
rfc.estimators_[0].random_state

for i in range(len(rfc.estimators_)):
	print(rfc.estimators_[i].random_state)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#无需划分训练集和测试集
rfc = RandomForestClassifier(n_estimators=25,oob_score=True)
rfc = rfc.fit(wine.data,wine.target)

#重要属性oob_score_
rfc.oob_score_

在这里插入图片描述

rfc = RandomForestClassifier(n_estimators=25)
rfc = rfc.fit(Xtrain, Ytrain)
rfc.score(Xtest,Ytest)

rfc.feature_importances_
rfc.apply(Xtest)

rfc.predict(Xtest)
rfc.predict_proba(Xtest)

在这里插入图片描述

x = np.linspace(0,1,20)
y = []
for epsilon in np.linspace(0,1,20):
    E = np.array([comb(25,i)*(epsilon**i)*((1-epsilon)**(25-i)) for i in range(13,26)]).sum()
    y.append(E)
plt.plot(x,y,"o-",label="when estimators are different")
plt.plot(x,x,"--",color="red",label="if all estimators are same")
plt.xlabel("individual estimator's error")
plt.ylabel("RandomForest's error")
plt.legend()
plt.show()

在这里插入图片描述
在这里插入图片描述

class sklearn.ensemble.RandomForestRegressor (n_estimators=’warn’,
											criterion=’mse’, 
											max_depth=None,
											min_samples_split=2, 
											min_samples_leaf=1, 
											min_weight_fraction_leaf=0.0, 
											max_features=’auto’,
											max_leaf_nodes=None,
											min_impurity_decrease=0.0, 
											min_impurity_split=None, 
											bootstrap=True, 
											oob_score=False,
											n_jobs=None, 
											random_state=None, 
											verbose=0, 
											warm_start=False
									)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
随机森林回归用法

和决策树完全一致,除了多了参数n_estimators

from sklearn.datasets import load_boston
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestRegressor
boston = load_boston()
regressor = RandomForestRegressor(n_estimators=100,random_state=0)
cross_val_score(regressor, boston.data, boston.target, cv=10
,scoring = "neg_mean_squared_error")
sorted(sklearn.metrics.SCORERS.keys())

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值