文章目录

  • 前言
  • 一、随机森林介绍
  • 一、定义函数
  • 二、模型建立
    • 1.模型参数设置
    • 2.模型训练集和测试集拆分
    • 3.模型训练
    • 4.特征值
  • 总结

前言

https://blog.csdn.net/m0_65157892/article/details/129523883这篇文章中已经对数据进行了标准化和异常值处理。得到了一个新的数据集,且数据集是不受极端值影响的数据集。
在另外一篇文章中讲解了普遍情况下的随机森林预测模型,在这篇文章将运用在信用评分预测上。


一、随机森林介绍

首先了解一下集成学习,集成学习(ensemble)思想是为了解决单个模型或者某一组参数的模型所固有的缺陷,从而整合起多个模型,取长补短,避免局限性。
集成时一般用到bootstrap方法(自助法,随机抽样),bagging方法(自助抽样集成,多个模型,使用投票或其他方法来整合模型,分类问题一般类似投票,回归问题一般均值)
随机森林就是集成学习思想下的产物,将许多棵决策树整合成森林,合并用来预测最终结果。实际上是一种特殊的bagging方法,将决策树用作bagging中的模型。
用bootstrap方法生成m个训练集,然后,对于每个训练集,构造一颗决策树。不同的是选择特征时是随机抽取部分特征取最优解来分裂。预测阶段,采用的是bagging的策略,分类问题就是投票(回归问题则为均值)。
随机森林算法可被用于很多不同的领域,如银行,股票市场,医药和电子商务。在银行领域,它通常被用来检测那些比普通人更高频率使用银行服务的客户,并及时偿还他们的债务。同时,它也会被用来检测那些想诈骗银行的客户。在金融领域,它可用于预测未来股票的趋势。在医疗保健领域,它可用于识别药品成分的正确组合,分析患者的病史以识别疾病。除此之外,在电子商务领域中,随机森林可以被用来确定客户是否真的喜欢某个产品。

一、定义函数


def list_add(a, b):# 这个函数实现列表a与列表b相加,同时相加后的值存到列表a中assert len(a) == len(b)for i in range(len(a)):a[i] += b[i]def list_div(a, num):# 这个函数将列表a的各值除以num,同时将处理后的值存到列表a中for i in range(len(a)):a[i] /= numreturn a

这个定义的函数是为了在后面模型训练打下基础的。

二、模型建立

1.模型参数设置

acc_mean = 0
acc_mean_10test = 0
feature_mean = [0] * len(df.columns[:-1])
n = 1000
max_acc = 0;
index_of_max = 0  # 何时的acc最大,以及对应的index
min_acc = 1;
index_of_min = 0  # 何时的acc最小,以及对应的index
max_arg_acc = 0;
index_of_max_acc2 = 0  # 何时的acc最大,以及对应的index
# 树的个数
trees = 10
  1. 我们在这里是将循环次数设置为n = 1000
  2. 即在随机划分训练集和测试集时,穷举随机数种子为1-1000时的情况
  3. trees = 10随机森林数量设置为10

2.模型训练集和测试集拆分

 x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.6, random_state=i + 1)x_test2, x_check, y_test2, y_check = train_test_split(x_test, y_test, train_size=0.25, random_state=i + 1)

3.模型训练

在这里我们需要先定义一个函数train_test(),通过这个函数我们可以训练随机森林模型,不断地迭代直到出现最合适的解出现。

def train_test():global acc_mean, acc_mean_10test, max_acc, max_arg_acc, min_acc, index_of_max, index_of_max_acc2, index_of_minfor i in range(50):# print('*'*150)print('第 %d 次 test' % (i + 1))# x_test,x_train,y_test,y_train=train_test_split(x,y,random_state=i+1)x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.6, random_state=i + 1)x_test2, x_check, y_test2, y_check = train_test_split(x_test, y_test, train_size=0.25, random_state=i + 1)forest = RandomForestClassifier(n_estimators=trees, random_state=100)#y_train改成y_train.astype('int')forest.fit(x_train, y_train.astype('int'))# 经测试,random_state=594时验证集上精度最高# n_estimators表示树的个数,测试中10颗树足够# print('*'*100)# print('start')test_score = forest.score(x_check, y_check.astype('int'))  # 300条数据得到的score# print("random forest with %d trees:"%trees)print("accuracy on the training subset:{:.3f}".format(forest.score(x_train, y_train.astype('int'))))print("accuracy on the test subset:{:.3f}".format(test_score))# print("avg accuracy on the test subset:{:.3f}".format(acc_mean/(i+1)))# print('Feature importances:{}'.format(forest.feature_importances_))if (max_acc <= test_score):max_acc = test_scoreindex_of_max = i + 1if (min_acc >= test_score):min_acc = test_scoreindex_of_min = i + 1acc_mean += test_score  # check subset meanprint("i times avg accuracy on the check subset:{:.3f}".format(acc_mean / (i + 1)))acc_mean2 = 0  # 临时的acc_mean2 += test_scoreprint('10 check score')for j in range(10):# x_test2,x_train2,y_test2,y_train2=train_test_split(x,y,random_state=j+1)# x_train2,x_test2,y_train2,y_test2=train_test_split(x,y,random_state=j+1)# x_train2,x_test2,y_train2,y_test2=train_test_split(x,y,train_size=0.4,test_size=0.4,random_state=j+1)# x_train2,x_test2,y_train2,y_test2=train_test_split(x,y,test_size=0.4,random_state=j+1)x_test2, x_check, y_test2, y_check = train_test_split(x_test, y_test, train_size=0.25,random_state=j + 1)  # 划分10次check集acc_mean2 += forest.score(x_check, y_check.astype('int'))print(forest.score(x_test2, y_test2.astype('int')), end=' ')print()print("avg accuracy on the 11 check subset:{:.3f}".format(acc_mean2 / 11))  # 在此模型下多次划分check集合得到一个平均精度acc_mean2 = acc_mean2 / 11# 得到最大时的indexif (max_arg_acc <= acc_mean2):max_arg_acc = acc_mean2index_of_max_acc2 = i + 1list_add(feature_mean, forest.feature_importances_)acc_mean_10test += acc_mean2print("all-avg accuracy on the 10 check subsets:{:.3f}".format(acc_mean_10test / (i + 1)))# 得到一千次训练的平均精度# 然后暂时可以先用最高精度构造出分类器后测试其在不同测试集上的精度# print()print('Final :')print("avg accuracy on the check subset:{:.3f}".format(acc_mean / n))# print('avg Feature importances:{}'.format(list_div(feature_mean,n)))print('max_acc on the check subset: %f' % max_acc)print('index : %d' % index_of_max)print('min_acc on the check subset: %f' % min_acc)print('index : %d' % index_of_min)print('max_arg_acc on 11 check subsets: %f' % max_arg_acc)print('index : %d' % index_of_max_acc2)train_test()

4.特征值

train_test()# x_train,x_test,y_train,y_test=train_test_split(x,y,train_size=0.4,test_size=0.4,random_state=index_of_max_acc2)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.4, random_state=index_of_max_acc2)
x_test2, x_check, y_test2, y_check = train_test_split(x_test, y_test, train_size=0.25, random_state=index_of_max_acc2)
# x_test,x_train,y_test,y_train=train_test_split(x,y,random_state=index_of_max_acc2)
forest = RandomForestClassifier(n_estimators=trees, random_state=100)
forest.fit(x_train, y_train.astype('int'))
result_acc = 0
result_acc += forest.score(x_check, y_check.astype('int'))
for j in range(10):x_test2, x_check, y_test2, y_check = train_test_split(x_test, y_test, train_size=0.25, random_state=j + 1)print(forest.score(x_check, y_check.astype('int')), end=' ')# print(forest.predict(x_check))result_acc += forest.score(x_check, y_check.astype('int'))
print()
print("avg accuracy on the 11 check subsets:{:.3f}".format(result_acc / 11))# 做出特征重要性的图
n_features = x.shape[1]
plt.barh(range(n_features), forest.feature_importances_, align='center')
plt.yticks(np.arange(n_features), names)
plt.title("random forest with %d trees:" % trees)
plt.xlabel('Feature Importance')
plt.ylabel('Feature')
plt.show()

通过模型的迭代求出最佳取值,将所求出的最佳值用来特征值选取,从而求得哪个变量的影响因素最大。

总结

通过随机森林模型,我们可以求出特征变量的特征值,银行在进行信用评分时,可以根据这些变量来对决策进行修改。如上图所示即特征值得分,通过这个特征值我们可以看到,第八个变量的特征值得分最高,最低的得分是第五个变量,因此在进行信用赋分时,我们可以按照不同的特征值,赋予不同的权重,使预测更加准确。

【信用评分预测模型(四)】Python随机森林模型相关推荐

  1. python随机森林模型简单股票涨跌预测

    前言: 学了差不多10多天的入门机器学习,突然发现学好数学是多么的重要,以前上学时还觉得数学只要学会加减乘除就可以了,什么导数,回归方程都没什么用,这段时间真后悔死,看了好多模型原理推导,有好多的数学 ...

  2. Python使用随机森林模型进行电影评分预测

    目录 数据处理 数据划分 数据建模 模型评估 结果预测 综合运用数据分析与数据挖掘课程中的数据探索.数据预处理.分析建模等理论知识,能够根据不同的业务的场景,选定不同的数据分析与数据挖掘模型,并能够通 ...

  3. 随机森林模型_量化策略——短周期、单期货品种的随机森林预测模型

    在前一篇"期货学习量化学习策略--随机森林模型"一文中(链接:https://mp.weixin.qq.com/s/IhcVZ9D-3cmB1GaAFinboQ),我们尝试了长周期 ...

  4. python基于随机森林模型的预测概率和标签信息可视化ROC曲线

    python基于随机森林模型的预测概率和标签信息可视化ROC曲线 目录 python基于随机森林模型的预测概率和标签信息可视化ROC曲线

  5. 【信用评分预测模型(一)】信用评分预测模型简介

    文章目录 前言 一.数据准备 1.文章所使用的数据都是基于下面这两个网站: 2.观察期和表现期 二.数据处理 1.缺失值和异常值 2.筛选数据 三.相关性检验 四.特征工程 1.特征变量 五.模型构建 ...

  6. 大数据分析案例-基于随机森林模型对北京房价进行预测

    目录 1.项目背景 2.项目简介 2.1数据说明 2.2技术工具 3.算法原理 4.项目实施步骤 4.1理解数据 4.2数据预处理 4.2.1缺失值处理 4.2.2重复值处理 4.2.3异常值处理 4 ...

  7. ArcGIS Pro随机森林模型深度机器学习预测海草栖息地【教程】

    开始之前,总体梳理一下项目流程,大致了解一下我们是怎么一步一步得到最终结果的 1.创建训练数据集 下载数据(链接:https://pan.baidu.com/s/1tM4ZXplEP2MC787OKS ...

  8. 信用评分python_信用评分卡(python)

    目录 导入数据 缺失值和异常值处理 特征可视化 特征选择 模型训练 模型评估 模型结果转评分 计算用户总分 一.导入数据 #导入模块 importpandas as pdimportnumpy as ...

  9. python随机森林变量重要性_python机器学习之随机森林(七)

    机器学习之随机森林,供大家参考,具体内容如下 1.Bootstraping(自助法) 名字来自成语"pull up by your own bootstraps",意思是依靠你自己 ...

最新文章

  1. 红旗linuxcentos_用红旗Linux 11的体验报告,附使用红旗Linux 11截图
  2. MATLAB的var与std函数 与 均值,方差,标准差,均方差,均分误差
  3. Tips6:用[HideInInspector]在Inspector中隐藏变量
  4. 银行委托第三方催收信用卡欠款,是合法吗?
  5. for 循环 和 Array 数组对象
  6. 特定热点事件监控与分析项目
  7. ASPxGridView 结合CheckBox实现多选(在后台事件代码控制)
  8. 文本框中只能输入小于等于100的正整数
  9. mysql 创建十万测试表_用MYSQL的存储过程创建百万级测试数据表
  10. java 面试题 生产者 消费者_面试大厂必看!就凭借这份Java多线程和并发面试题,我拿到了字节和美团的offer!...
  11. Scratch2exe-ch将sb2文件转换为exe文件
  12. 火狐浏览器书签工具栏固定书签宽度
  13. 鄙视那些把爬虫当作AI的SB,清华学霸尹成大哥的历史上最强大的爬虫视频
  14. 2022-车道线检测综述
  15. 软件测试运维工程师面试题,运维工程师笔试题目
  16. w ndows7光盘安装,想装啥版装啥版:Windows7安装光盘版本转换软件
  17. L1-030. 一帮一-PAT团体程序设计天梯赛GPLT
  18. 2021年安全生产模拟考试(建筑起重机司机-物料提升机模拟考试题库)安考星
  19. Snipaste 截图贴图
  20. Hack The Box——Ready

热门文章

  1. 【LeetCode刷题日记】89. 格雷编码
  2. JavaScript 遍历DOM
  3. 龙珠最强之战微信互通服务器,12月20日微信互通新服公告
  4. 快手技术副总裁王仲远:AI技术让音乐创作进入普惠阶段
  5. bcoma 应用程序发生错误_我的电脑打开打开应用程序就会显示应用程序错误
  6. 轻量级权限框架之-Sa-ToKen
  7. 获取路由器超级用户权限(你懂得...)
  8. Deepin关机死机有效素质三连
  9. 手把手教你进行安全帽的佩戴检测(附数据集+代码演示+实验结果)
  10. 数字化新零售电商:阿里与腾讯的行业布局