@python 随机森林分类模型 随机优化参数

学习笔记

随机森林

1.随机森林模型
随机森林算法是基于决策树算法的Begging优化版本,通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。
决策树是一个监督学习模型,可用于分类和回归,它是一个由内节点和叶节点构成的树型结构。每个内节点对应了一个关于某种特征的测试,通过测试可以把样本分开。最后位于同一叶子节点的样本被分为某一类。
决策树的划分依据:熵反映了事件的不确定性,对于一般分布事件而言,熵是各种可能性的熵以概率为权重进行加和。属性划分的标准是让每个分支纯度更高,最好是每个分支的数据尽可能属于同一类别,其实就是尽可能增加分类的确定性。而熵表示了事件的不确定性,消除熵可以增加事件的确定性,所以只需计算划分前后熵的变化,依次计算各个属性的信息增益然后选择最大的那个属性来划分分支。
随机森林模型包含许多决策树,从而可以将这个包含许多决策树的模型看做一整个森林,随机性体现在两个方面,首先是数据采样的随机,训练数据取自整个数据集中的一部分,如果每一个树模型的输入数据都是不同的,并且是有放回的采样,那么每棵树得到的结果必然也会有所差异,这是第一重随机。接下来还需考虑一下特征,如果对不同的树模型选择不同的一部分特征进行建模,结果的差异就会更大。对不同的树选择不同的部分特征进行建模,就把差异放大了,这就是第二重随机。有这两重随机性,就可以提高森林的多样性,这样再求它们的平均,结果能更稳定有效。
在本模型中首先通过测试集所给的用户基本信息,借贷信息,等设为特征值,以此来构建决策树的根节点,叶节点,来进行决策,完成对申贷客户的识别。
之后将决策树构建为随机森林,解决决策树中欠拟合,过拟合等问题,以此来提高模型的准确度。

随机搜索

我们使用Scikit-Learn 的RandomizedSearchCV 来寻找最佳的超参数组合,进行模型优化,随机搜索是用交叉验证来评估超参数值的所有组合,当超参数的搜索范围较大时,通常会优先选择使用 RandomizedSearchCV 。它不会尝试所有可能的组合,而是在每次迭代中为每个超参数选择一个随机值,然后对一定数量的随机组合进行评估。这种方法有两个优点,如果运行随机1000个迭代,那么将会探索每个超参数的1000个不同的值,而不是只探索少量的值,并且通过简单地设置迭代次数,可以更好地控制要分配给超参数搜索的计算预算。它相比于网格搜索有着更好的随机性,能够在相同时间内探索更多可能的区域,但也会带来不确定性。
本模型中通过随机搜索来对随机森林模型中bmax_features, n_estimators等参数选取最优解,以此来提高我们模型的准确度。

数据预处理

1.转换为csv格式。
2.将5个csv文件分别按id排序。
3.将bhv_train.csv、cust_train.csv、train_label.csv按id合并为一个矩阵,将bhv_test.csv、cust_test.csv按id合并为一个矩阵。
4.将合并后的文件空缺部分用算法补全
5.将数据进行挑选

// ! unzip ../input/toUser.zip -d ../output/data #压缩文件解压
pip install openpyxl
#测试集数据合并 query函数--挑选符合条件的数据并列出;sort_value函数--排序;merge函数---合并
y=train_label.query('label==1')
c=train_label.sort_values(['id'])#按照id排序
a=train_a.sort_values(['id'])
b=train_b.sort_values(['id'])
result = pd.merge(a,b)
train = pd.merge(result,c)
#最终合并完成的train
train.to_csv('train.csv')
#数据填充 fillna
train=train.fillna(train.interpolate())
#查看填充结果
print(train.isnull().sum())
#不同数值的相关度计算 corr_matrix
corr_matrix = train.corr()
corr_matrix.to_csv('corr_matrix.csv')
#和label的相关度比较 【-1,1】 >0为正相关;<0为负相关
corr_matrix["label"].sort_values(ascending=False)
#合并测试集
test_a.fillna(test_a.median(),inplace=True)
test_b.fillna(test_b.median(),inplace=True)
a=test_a.sort_values(['id'])
b=test_b.sort_values(['id'])
test = pd.merge(a, b)
test=test.fillna(test.interpolate())
#test=test.fillna(0)
test.to_csv('test.csv')
#处理特征值  drop函数扔掉列数据
traindf= train.drop('label',axis=1)
traindf=traindf.drop('id',axis=1)
traindf

随机森林代码

重要参数

max_depth:树深
max_features:特征数
n_estimators:随机森林里决策树的棵树
criterion: 特征选取方法,可以是gini(基尼系数),entropy(信息增益),通常选择gini,即CART算法,如果选择后者,则是ID3和C4,.5

#训练集训练
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_squared_error
from sklearn.tree import DecisionTreeClassifier # 决策树
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier # 随机森林
#tree_reg = DecisionTreeClassifier(max_depth=5,random_state=123)
X=traindf  ##去掉label
y=train['label']
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.32,random_state=123)
tree_reg = RandomForestClassifier(bootstrap= False, max_features=8, n_estimators= 152)
#tree_reg = RandomForestClassifier(oob_score=True)
tree_reg.fit(X_train, y_train)
y_pr =tree_reg.predict(X_test)#直接预测结果为numpy,需要转换为DataFrame
#numpy转换DataFrame语句
a=pd.DataFrame()
a['预测值']=list(y_pr)
a['实际值']=list(y_test)
#score函数--计算预测得分,正确率
score=accuracy_score(y_pr,y_test)
#预测概率计算
y_pred_proba=tree_reg.predict_proba(X_test)
b=pd.DataFrame(y_pred_proba,columns=['label=0','label=1'])
a['pred_prob']=b['label=1']          #pr的
a['pred_label']=list(y_pr)
print('得分:', score)
#各个特征值的重要性
tree_reg.feature_importances_

随机搜索优化参数代码

from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint
#训练集训练
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_squared_error
from sklearn.tree import DecisionTreeClassifier # 决策树
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier # 随机森林
#tree_reg = DecisionTreeClassifier(max_depth=5,random_state=123)
X=traindf  ##去掉label
y=train['label']
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.32,random_state=123)
tree_reg = RandomForestClassifier(bootstrap= False, max_features=8, n_estimators= 152)
#tree_reg = RandomForestClassifier(oob_score=True)
tree_reg.fit(X_train, y_train)
y_pr =tree_reg.predict(X_test)param_distribs = {# 均匀离散随机变量'n_estimators': randint(low=1, high=200),'max_features': randint(low=7, high=9),}tree_reg = RandomizedSearchCV(tree_reg, param_distributions=param_distribs,n_iter=10, cv=5, scoring='neg_mean_squared_error', random_state=42)
tree_reg.fit(X_train, y_train)
tree_reg.best_params_

网格优化参数代码

#最佳参数预测
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_squared_error
from sklearn.tree import DecisionTreeClassifier # 决策树
from sklearn.model_selection import train_test_split #训练集与测试集划分
from sklearn.ensemble import RandomForestClassifier # 随机森林
from sklearn.model_selection import GridSearchCV #随机搜索参数
#tree_reg = DecisionTreeClassifier(max_depth=5,random_state=123)
#tree_reg = RandomForestClassifier()
# 模型训练
X=traindf
y=train['label']
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.32,random_state=123) #test_size=0.32,训练集与测试集比例划分
#tree_reg.fit(X_train, y_train)
param_grid = [# 尝试3×4=12种超参数组合{'n_estimators': [10, 30, 50], 'max_features': [2, 4, 6, 8,10]},# 之后设置bootstrap=False,再尝试2×3=6种超参数组合{'bootstrap': [False], 'n_estimators': [3, 10,], 'max_features': [2, 3, 4,10]},]forest_reg = RandomForestClassifier(random_state=42)
# 训练5次,总共(12+6)×5=90次
tree_reg = GridSearchCV(forest_reg, param_grid, cv=5,scoring='neg_mean_squared_error',return_train_score=True)
tree_reg.fit(X_train, y_train)
y_pr = tree_reg.predict(X_test)
a=pd.DataFrame()
a['预测值']=list(y_pr)
a['实际值']=list(y_test)
score=accuracy_score(y_pr,y_test)
y_pred_proba=tree_reg.predict_proba(X_test)
b=pd.DataFrame(y_pred_proba,columns=['label=0','label=1'])
print('得分:', score)
tree_reg.best_params_

python 随机森林分类 DecisionTreeClassifier 随机搜索优化参数 GridSearchCV相关推荐

  1. Python 随机森林分类

    Python 随机森林分类 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 2 决策树分类简介 相关概念见下: 决策树的最大问题是 ...

  2. Python实现GWO智能灰狼优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 灰狼优化算法(GWO),由澳大利亚格里菲斯大学学者 Mirjal ...

  3. GEE:随机森林分类教程(样本制作、特征添加、训练、精度、参数优化、贡献度、统计面积)

    作者: _养乐多_ 本文将介绍在Google Earth Engine (GEE)平台上进行随机森林分类的方法和代码,其中包括制作样本点教程(本地.在线和本地在线混合制作样本点,合并样本点等),加入特 ...

  4. 随机森林分类算法python代码_Python机器学习笔记:随机森林算法

    随机森林算法的理论知识 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能,因此,随机森林被誉为&q ...

  5. 数学建模_随机森林分类模型详解Python代码

    数学建模_随机森林分类模型详解Python代码 随机森林需要调整的参数有: (1) 决策树的个数 (2) 特征属性的个数 (3) 递归次数(即决策树的深度)''' from numpy import ...

  6. python与算法社区_【Python算法】分类与预测——Python随机森林

    [Python算法]分类与预测--Python随机森林 1.随机森林定义 随机森林是一种多功能的机器学习算法,能够执行回归和分类的任务.同时,它也是一种数据降维手段,在处理缺失值.异常值以及其他数据探 ...

  7. Python 随机森林特征重要度

    Python 随机森林特征重要度 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 2 随机森林特征重要度简介 决策树的优点是通过树 ...

  8. GEE东拼西凑之随机森林分类

    这里记录一下使用landsat5做随机森林分类的代码,理一下思路.很多内容都是到处找教程东拼西凑的,十分感谢各位大佬. 导入研究区.制作标签 首先加载研究区边界,查看需要分类时间的原影像.在影像上添加 ...

  9. python随机森林 交叉验证_随机森林算法详解及Python实现

    一 简介 随机森林是一种比较有名的集成学习方法,属于集成学习算法中弱学习器之间不存在依赖的一部分,其因为这个优点可以并行化运行,因此随机森林在一些大赛中往往是首要选择的模型. 随机森立中随机是核心,通 ...

最新文章

  1. confluence 常见问题处理
  2. C#之获取mp3文件信息
  3. [渝粤教育] 西南科技大学 电子设计EDA 在线考试复习资料
  4. C#将Json字符串反序列化成List对象类集合
  5. Livejourmal是什么
  6. SQL Server 2000中数据库质疑的恢复方法
  7. 4_2 刽子手游戏(UVa489)自顶向下逐步求精法
  8. 天翼,有毒?“校园客户端挂马事件”雷锋网独家解析
  9. solidworks流体模拟分析概述
  10. Java界面开发(以五子棋为例)
  11. 关于三极管的理解---根据IC符号简易迅速判断三极管导通情况
  12. word导航窗显示二级目录
  13. 产品策划五:App升级系统策划方案
  14. 计算机中被选中会是什么颜色,举例详解使用photoshop cc 2017改变图片中被选中区域的颜色-网络教程与技术 -亦是美网络...
  15. 工具篇:Java中邮件类MimeMessage说明
  16. “双一流”霸气官宣:博士生,涨薪!
  17. 不得不使用的百度快照优化seo技巧
  18. 度量衡计算工具_【度量衡换算器下载】中国古代度量衡换算器 v2.1 中文版-开心电玩...
  19. 计算机软件转让的知识产权归属,买卖合同中知识产权的归属
  20. 在线HTTP速度测试(响应时间测试)及浏览器兼容测试

热门文章

  1. html返回首页页面代码,后台返回的HTML整个页面代码打开方法
  2. C++ snippets
  3. excel计算机不准确,excel表格数据合计不准确-EXCEL表格中,求和的数字总是不对...
  4. 用POI实现双层标题excel打印
  5. (六) 自己写简单的u-boot
  6. 无延时直播与传统视频直播优势对比
  7. 全球十大外盘外汇交易平台排行榜
  8. 论文浅尝 | DKN: 面向新闻推荐的深度知识感知网络
  9. 推荐系统论文:DKN Deep Knowledge-Aware Network for News Recommendation
  10. 【哈希】购物券(bday)