小 明 5月/ 22/ 2019 | 0

随机森林其实本质上就是多个随机决策树的随机,对应的每一个决策树都给出一个决策值,用类似投票机制,对于整体结果进行一个衡量,得出最终分类结果,Bootstraping方法进行随机取样,假如说我们取80%,那我们就在一个数据集当中取其80%的数据,也就是说,我们通过这个方法,可以把一些噪声进行随机性的去除,获得更好的效果.对于bagging算法,我们通过对于特征的选择,与Bootstrap有所不同的是,Bootstrap对应的随机取样本,而bagging随机取的是特征,根据多个特征给出类似于投票值,最终汇总成为随机森林最后输出结果.那么整个代码的处理流程是这样的: 1.导入数据; 2.进行标签界定;3.进行默认拟合,以及GridsearchCV;4.进行网络搜索,得到最优的参数;以下代码通过sklearn实现随机森林算法:

#导入需要的库
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
import matplotlib.pylab as plt
#导入数据,顺便看看数据的类别分布
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
target ='y' # Disbursed的值就是二元分类的输出
IDcol= 'id'
print(train['y'].value_counts())
#可以看到类别输出如下,也就是类别0的占大多数
#接着选择好样本特征和类别输出,样本特征为除去ID和输出类别的列
x_columns = [x for x in train.columns if x not in [target,IDcol]]
X = train[x_columns]
y = train['y']
#不管任何参数,都用默认的,拟合下数据看看
rf0 = RandomForestClassifier(oob_score=True, random_state=10)
rf0.fit(X,y)
print(rf0.oob_score_)
#{'min_samples_leaf': 10, 'min_samples_split': 50}
rf2= RandomForestClassifier(n_estimators= 70, max_depth=13, 
min_samples_split=50,
min_samples_leaf=10,max_features=9 ,oob_score=True, random_state=10)
rf2.fit(X,y)
result_forest = rf2.predict(test)
np.savetxt('hard.csv',result_forest, delimiter = ',')
print(rf2.oob_score_)

发表评论