Sklearn之随机森林

一:定义

随机森林是一个包含多棵决策树的分类器,其输出的类别是由个别树输出的类别的众数而定。在Sklearn库中,随机森林包含:随机森林分类、随机森林回归两种。

二:随机森林分类器
class sklearn.ensemble.RandomForestClassifier(n_estimators=’warn’,
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、n_estimators:森林里的数目数量;默认=10
		2、 max_depth:树的最大深度
		3、min_samples_split:拆分内部节点所需要的最小样本数;默认=2
		4、min_samples_leaf:叶子节点所需要的最小样本数
		5、oob_score:是否使用袋外样本来估计泛化精度
		6、n_jobs:适合和预测并运行的作业数;默认=None;-1表示使用所有的处理器
	重要方法:
		1、fit(X,y):从训练集(X,y)建立一片森林
			X:训练集样本数据
			y:目标值(分类中的类标签,回归中的实数)
		2、predict(X ):预测X的类
			X:输入的样本数据
			return:预测的类
		3、predict_proba(X )
			X:输入的样本数据
			return:预测为每个类的概率	
'''
三:随机森林回归
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)

'''
	重要参数:
		1、n_estimators:森林里的数目数量;默认=10
		2、 max_depth:树的最大深度
		3、min_samples_split:拆分内部节点所需要的最小样本数;默认=2
		4、min_samples_leaf:叶子节点所需要的最小样本数
		5、oob_score:是否使用袋外样本来估计看不见的参数
		6、n_jobs:适合和预测并运行的作业数;默认=None;-1表示使用所有的处理器
	重要方法:
		1、fit(X,y):从训练集(X,y)建立一片森林
			X:训练集样本数据
			y:目标值(分类中的类标签,回归中的实数)
		2、predict(X ):预测X的类
			X:输入的样本数据
			return:预测值
'''
四:代码示例

下面我们用随机森林回归分析一个数据集,我们首先将数据集分为两部分,一部分用作训练集,一部分用作测试集,然后将训练集扔进森林里面训练

from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
import time
import numpy as np

'''
    function : 使用随机森林回归进行预测
    author : lemon
'''

boston = load_boston()
# 将数据分为训练集和测试集两部分
train_data = boston.data[:400:]
train_target = boston.target[:400:]
test_data = boston.data[400::]
test_target = boston.target[400::]
forest = RandomForestRegressor(n_estimators=500,oob_score=True,n_jobs=-1)
print(f"{time.strftime('%Y-%m-%d %H:%M:%S')}: begin training...")
forest.fit(train_data,train_target)
# result 预测的值
print(f"{time.strftime('%Y-%m-%d %H:%M:%S')}: begin testing...")
result = forest.predict(test_data)
MSE = ((np.array([result]) - np.array(test_target))**2)/len(test_target)
print('MSE = '+str(MSE.sum().round(3)))

预测结果

2019-02-20 15:03:07: begin training...
2019-02-20 15:03:07: begin testing...
MSE = 17.181

可以看到,最后我们预测的值和真实值之间的均方误差MSE=17.181,我们在上一篇博客中使用决策树回归对同样的数据进行预测,均让误差MSE=45.055。通过对比,不难发现随机森林回归在拟合的方差上要比决策树处理好。

五:决策树 & 随机森林

决策树在数据的处理中可能会产生过拟合的现象,虽然决策树中的种种参数可以起到防止过拟合的作用,但是多棵树的效果肯定要比一棵树要好,这也是为什么随机森林的拟合方差会优于决策树的原因。但是我们在使用随机森林的时候要格外注意n_estimators参数,它代表森林中树木的数量,越大越好,但是计算时间也会越长;此外,结果将远远超过临界数量的数目。

你可能感兴趣的:(Sklearn,RandomForest,python,DecisionTree)