sklearn之随机森林

‘‘‘
    集合算法:
        1.正向激励
        2.自助聚合:每次从总样本矩阵中以有放回抽样的方式随机抽取部分样本构建决策树,这样形成多棵包含不同训练样本的决策树,
                    以削弱某些强势样本对模型预测结果的影响,提高模型的泛化特性。
        3.随机森林:在自助聚合的基础上,每次构建决策树模型时,不仅随机选择部分样本,而且还随机选择部分特征,这样的集合算法,
                    不仅规避了强势样本对预测结果的影响,而且也削弱了强势特征的影响,使模型的预测能力更加泛化。(中庸-->真值)
            随机森林相关API:
                import sklearn.ensemble as se
                # 随机森林回归模型    (属于集合算法的一种)
                # max_depth:决策树最大深度10
                # n_estimators:构建1000棵决策树,训练模型
                # min_samples_split: 子表中最小样本数 若小于这个数字,则不再继续向下拆分
                model = se.RandomForestRegressor(max_depth=10, n_estimators=1000, min_samples_split=2)

    案例:分析共享单车的需求,从而判断如何进行共享单车的投放。
        1.读取数据  bike_day.csv
        2.整理输入集和输出集     划分测试集与训练集
        3.选择模型----随机森林,训练模型
        4.使用测试集输出r2得分
        5.输出特征重要性,并绘制图像
‘‘‘
import numpy as np
import matplotlib.pyplot as mp
import sklearn.metrics as sm
import sklearn.ensemble as se  # 集合算法模块
import sklearn.utils as su  # 打乱数据

‘‘‘=================================分析bike_day.csv===============================‘‘‘
# 读取数据方法1
# data = []
# with open(‘./ml_data/bike_day.csv‘,‘r‘) as f:
#     for line in f.readlines():
#         data.append(line[:-1].split(‘,‘))
# print(data)
# data = np.array(data)

# 读取数据方法2
data = np.loadtxt(‘./ml_data/bike_day.csv‘, unpack=False, dtype=‘U20‘, delimiter=‘,‘)
print(data.shape)
day_headers = data[0, 2:13]
print(day_headers)
x = np.array(data[1:, 2:13], dtype=‘f8‘)
y = np.array(data[1:, -1], dtype=‘f8‘)

# 划分测试集和训练集
x, y = su.shuffle(x, y, random_state=7)  # 打乱样本
train_size = int(len(x) * 0.9)
train_x, test_x, train_y, test_y = x[:train_size], x[train_size:], y[:train_size], y[train_size:]

# 训练模型
model = se.RandomForestRegressor(max_depth=10, n_estimators=1000, min_samples_split=3)
model.fit(train_x, train_y)

# 模型测试
pred_test_y = model.predict(test_x)

# 模型评估
print(‘bike_day的r2_score得分:‘, sm.r2_score(test_y, pred_test_y))

# 输出模型特征重要性
day_fi = model.feature_importances_

‘‘‘=================================分析bike_hour.csv===============================‘‘‘
# 读取数据
data = []
with open(‘./ml_data/bike_hour.csv‘, ‘r‘) as f:
    for line in f.readlines():
        data.append(line[:-1].split(‘,‘))

data = np.array(data)
hour_headers = data[0, 2:14]
print(hour_headers)
x = np.array(data[1:, 2:14], dtype=‘f8‘)
y = np.array(data[1:, -1], dtype=‘f8‘)

# 划分测试集和训练集
x, y = su.shuffle(x, y, random_state=7)  # 打乱样本
train_size = int(len(x) * 0.9)
train_x, test_x, train_y, test_y = x[:train_size], x[train_size:], y[:train_size], y[train_size:]

# 训练模型
model = se.RandomForestRegressor(max_depth=10, n_estimators=1000, min_samples_split=3)
model.fit(train_x, train_y)

# 模型测试
pred_test_y = model.predict(test_x)

# 模型评估
print(‘bike_hour的r2_score得分:‘, sm.r2_score(test_y, pred_test_y))

# 输出模型特征重要性
hour_fi = model.feature_importances_

# 画出bike_day的特征重要性图像
mp.figure(‘Feature Importance‘, facecolor=‘lightgray‘)
mp.rcParams[‘font.sans-serif‘] = ‘SimHei‘
mp.subplot(211)
mp.title(‘Bike_day FI‘)
mp.ylabel(‘Feature Importance‘)
mp.grid(linestyle=":")
sorted_indexes = day_fi.argsort()[::-1]  # 下标排序,从大到小
x = np.arange(day_headers.size)
mp.bar(x, day_fi[sorted_indexes], 0.7, color=‘dodgerblue‘, label=‘BDFI‘)
mp.xticks(x, day_headers[sorted_indexes])  # 设置x轴坐标
mp.tight_layout()
mp.legend()

# 画出bike_hour的特征重要性图像
mp.subplot(212)
mp.title(‘Bike_hour FI‘)
mp.ylabel(‘Feature Importance‘)
mp.grid(linestyle=":")
sorted_indexes = hour_fi.argsort()[::-1]  # 下标排序,从大到小
x = np.arange(hour_headers.size)
mp.bar(x, hour_fi[sorted_indexes], 0.7, color=‘orangered‘, label=‘BHFI‘)
mp.xticks(x, hour_headers[sorted_indexes])  # 设置x轴坐标
mp.tight_layout()
mp.legend()

mp.show()

输出结果:
(732, 16)
[‘season‘ ‘yr‘ ‘mnth‘ ‘holiday‘ ‘weekday‘ ‘workingday‘ ‘weathersit‘ ‘temp‘
 ‘atemp‘ ‘hum‘ ‘windspeed‘]
bike_day的r2_score得分: 0.8929064136199945
[‘season‘ ‘yr‘ ‘mnth‘ ‘hr‘ ‘holiday‘ ‘weekday‘ ‘workingday‘ ‘weathersit‘
 ‘temp‘ ‘atemp‘ ‘hum‘ ‘windspeed‘]
bike_hour的r2_score得分: 0.9185230199218621

  

原文地址:https://www.cnblogs.com/yuxiangyang/p/11184890.html

时间: 2024-10-07 19:09:33

sklearn之随机森林的相关文章

随机森林算法梳理

---恢复内容开始--- 1. 集成学习概念 通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统.基于委员会的学习等 2. 个体学习器概念 通常由一个现有的算法从训练数据产生的基学习器. 3. boosting bagging boosting: 是一族可将弱学习器提升为强学习器的算法.这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练对训练样本分步进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布来训练下一个基

如何调整随机森林的参数达到更好的效果。

原文地址: https://www.analyticsvidhya.com/blog/2015/06/tuning-random-forest-model/ A month back, I participated in a Kaggle competition called TFI. I started with my first submission at 50th percentile. Having worked relentlessly on feature engineering f

转载:scikit-learn随机森林调参小结

在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结.本文就从实践的角度对RF做一个总结.重点讲述scikit-learn中RF的调参注意事项,以及和GBDT调参的异同点. 1. scikit-learn随机森林类库概述 在scikit-learn中,RF的分类类是RandomForestClassifier,回归类是RandomForestRegressor.当然RF的变种Extra Trees也有, 分类类ExtraTreesC

基于UCI数据集Condition Based Maintenance of Naval Propulsion Plants的随机森林回归

数据集参考文献:[1] A. Coraddu, L. Oneto, A. Ghio, S. Savio, D. Anguita, M. Figari, Machine Learning Approaches for Improving Condition?Based Maintenance of Naval Propulsion Plants, Journal of Engineering for the Maritime Environment, 2014, DOI: 10.1177/1475

关于随机森林样本和分类目标的示例

关于随机森林样本和分类目标的示例注意: 1.目标类别是3个以上(逻辑分类只能两个) 2.自变量X以行为单位 3.因变量y以列为单位(每一个值对应X的一行) 4.其它不用管了,交给程序去吧 # -*- coding: utf-8 -*- """ Created on Tue Aug 09 17:40:04 2016 @author: Administrator """ # -*- coding: utf-8 -*- ""&quo

随机森林(Random Forest)详解(转)

来源: Poll的笔记 cnblogs.com/maybe2030/p/4585705.html 1 什么是随机森林?   作为新兴起的.高度灵活的一种机器学习算法,随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来源,保留和流失,也可用来预测疾病的风险和病患者的易感性.最初,我是在参加校外竞赛时接触到随机森林算法的.最近几年的国内外大赛,包括2013年百度校园电影推荐系统大赛.2014年阿里巴巴天池大数据竞赛

随机森林(Random Forest)

 阅读目录 ?1 什么是随机森林? ?2 随机森林的特点 ?3 随机森林的相关基础知识 ?4 随机森林的生成 ?5 袋外错误率(oob error) ?6 随机森林工作原理解释的一个简单例子 ?7 随机森林的Python实现 ?8 参考内容 1 什么是随机森林? 作为新兴起的.高度灵活的一种机器学习算法,随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来源,保留和流失,也可用来预测疾病的风险和病患者的易感性

#调整随机森林的参数(调整max_features,结果未见明显差异)

#调整随机森林的参数(调整max_features,结果未见明显差异) from sklearn import datasets X, y = datasets.make_classification(n_samples=10000,n_features=20,n_informative=15,flip_y=.5, weights=[.2, .8]) import numpy as np training = np.random.choice([True, False], p=[.8, .2],

【Kaggle】用随机森林分类算法解决Biologial Response问题

Kaggle搞起来 Kaggle比赛多依靠机器来自动处理,机器学习几乎是必须要的技能.开始搞Kaggle需要的机器学习技能并不深入,只是需要对于机器学习的常见几个方法有基本了解即可,比如说对于一个问题,你可以认识到它是个classification的问题啊还是regression的问题啊,为什么机器可以根据你输入的一个矩阵来算出来分类结果啊. 其实有时候真的在于是不是愿意踏出那一步,一旦踏出了那一步,做与不做真的是天壤之别. hacker的方式就是通过不断的尝试来学习,所以,搞机器学习,不实践,