189 8069 5689

随机森林java代码 随机森林 代码

统计-可能是最丰富的随机森林攻略+代码放送

a) 先用临近值填补缺失值

我们提供的服务有:成都网站设计、成都网站建设、微信公众号开发、网站优化、网站认证、云和ssl等。为上千余家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的云和网站制作公司

iter: 迭代数 breiman说4-6次就好,过多的迭代数不会让OOB error变小

set.seed:保证抽取的过程是随机的

hd~: 我们想通过所有参数预测hd

红框部分为每次迭代的OOB error

b) 构建随机森林模型

mtry:

如果我们想预测的是连续变量,该值为总的变量值/3

如果想预测的是factor,该值为总变量数的根号

本例子中,hd是factor,mtry的默认值为sqrt(13)=3.6约等于3

number of tree :500 种树个数,默认500个

no. of variables tried at each split : 3 (即mtry)节点个数

OOB误差 :17.82% 这个很重要

cofusion matrix的意义 :

22个unhealthy被分入healthy中

32个healthy被分入unhealthy中

c) 更换mtry和number of trees的数量,使随机森林达到最优

核心思想:使OOB,healthy, unhealthy的error rate达到最低

横行:种的第i颗树,i=1:500,依次类推

纵行:OOB error rate; healthy error rate; unhealthy error rate

可以看出:当树种到400以后,三者的误差基本不变了

500-1000之间,误差基本不变,因此选500颗树就好

可以看出, mtry在3左右就很好,再低容易引起过拟合

具体原理参照我之前的帖子

可见我们的随机森林效果不错, healthy分成一类,unhealthy分成一类

注意:importance=TRUE必须得打开,否则没法进行重要性评分

求问随机森林算法的简单实现过程?

随机森林(Random forest)指的是利用多棵树对样本进行训练并预测的一种分类器。 并且其输出的类别是由个别树输出的类别的众数而定。在机器学习中有一个地位很重要的包scikit-learn可实现随机森林算法。

原理:(随机森林的分类预测和回归预测sklearn.ensemble.RandomForestRegressor方法)

(1)给定训练集S,测试集T,特征维数F。确定参数:使用到的CART的数量t,每棵树的深度d,每个节点使用到的特征数量f,终止条件:节点上最少样本数s,节点上最少的信息增益m,对于第1-t棵树,i=1-t:

(2)从S中有放回的抽取大小和S一样的训练集S(i),作为根节点的样本,从根节点开始训练

(3)如果当前节点上达到终止条件,则设置当前节点为叶子节点,如果是分类问题,该叶子节点的预测输出为当前节点样本集合中数量最多的那一类c(j),概率p为c(j)占当前样本集的比例;如果是回归问题,预测输出为当前节点样本集各个样本值的平均值。然后继续训练其他节点。如果当前节点没有达到终止条件,则从F维特征中无放回的随机选取f维特征。利用这f维特征,寻找分类效果最好的一维特征k及其阈值th,当前节点上样本第k维特征小于th的样本被划分到左节点,其余的被划分到右节点。继续训练其他节点。

(4)重复(2)(3)直到所有节点都训练过了或者被标记为叶子节点。

(5)重复(2),(3),(4)直到所有CART都被训练过。

随机森林的简单实现过程如下:

一、 开发环境、编译环境:

PyCharm Community Edition 2016.2.3

Python2.7.10

二、 所用库及安装方法:

pandas[python自带]

sklearn:命令行pip install sklearn;如果没有安装pip,先使用easy_install pip安装pip;如果在MAC上没有权限,使用sudo pip install sklearn;

三、 代码介绍

1. 使用pandas读取本地excel的训练集和测试集,将属性集赋给X_train和Y_train;将要预测的集合赋给X_test和Y_test;

2. 使用DictVectorizer对数据进行规范化、标准化

3. 生成RandomForestRegressor对象,并将训练集传入fit方法中进行训练

4. 调用predict函数进行预测,并将结果存入y_predict变量中;

5. 使用mean_squared_error、score方法输出MSE、NMSE值对拟合度、稳定度进行分析;输出feature_importance,对影响最终结果的属性进行分析;

6. 详细代码见附录

四、 附录

# coding:utf-8

import pandas as pd

data_train = pd.read_excel('/Users/xiaoliu/Desktop/data_train.xlsx')

X_train = data_train[['CPI', 'GDP', 'PPI', 'AJR', 'BJFJ', 'FBDR', 'PCFD', 'PCFDED', 'BDR']]

y_train = data_train['FJ']

data_test = pd.read_excel('/Users/xiaoliu/Desktop/data_test.xlsx')

X_test = data_test[['CPI', 'GDP', 'PPI', 'AJR', 'BJFJ', 'FBDR', 'PCFD', 'PCFDED', 'BDR']]

y_test = data_test['FJ']

from sklearn.feature_extraction import DictVectorizer

vec = DictVectorizer(sparse=False)

X_train = vec.fit_transform(X_train.to_dict(orient='records'))

X_test = vec.transform(X_test.to_dict(orient='records'))

from sklearn.ensemble import RandomForestRegressor

rf = RandomForestRegressor()

rf.fit(X_train,y_train)

y_predict = rf.predict(X_test)

print 'predict value:',y_predict

from sklearn.metrics import mean_squared_error

print 'MSE:', mean_squared_error(y_test, y_predict)

print 'NMES:',rf.score(X_test, y_test)

print rf.feature_importances_

                       

求会matlab和机器学习的大牛,教我怎么实现一个随机森林

随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输 入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本 为那一类。

在建立每一棵决策树的过程中,有两点需要注意 - 采样与完全分裂。首先是两个随机采样的过程,random forest对输入的数据要进行行、列的采样。对于行采样,采用有放回的方式,也就是在采样得到的样本集合中,可能有重复的样本。假设输入样本为N个,那 么采样的样本也为N个。


文章题目:随机森林java代码 随机森林 代码
文章转载:http://cdxtjz.cn/article/ddespid.html

其他资讯