金融机器学习方法:决策树与随机森林

news2024/11/15 23:48:23

目录

1.决策树

1.1  什么是决策树?

1.2 决策树的优点与缺点

2.随机森林

2.1 什么是随机森林?

2.2 随机森林的优点与缺点

3.决策树与随机森林的联系与区别

4.案例分析

4.1 使用决策树和随机森林预测

4.2绘制ROC曲线


决策树和随机森林都是监督学习的算法,常用于分类和回归任务。本文将简要介绍这两种方法,以及它们之间的联系与区别。

1.决策树

1.1  什么是决策树?

决策树是一个树状模型,用于表示决策过程或概率事件过程。在每一个内部节点上,它都会对某个属性进行测试,根据测试结果,进一步沿着分支进行决策,直到达到叶节点,此时得到一个决策结果。

1.2 决策树的优点与缺点

优点:

  • 直观易于理解,模型可以可视化。
  • 需要的数据预处理较少(例如,不需要特征标准化)。
  • 能够处理数字和分类数据。

缺点:

  • 容易产生过拟合,特别是当树很深时。
  • 对于连续属性,决策树可能不太稳定。
  • 可能不总是产生最优的树。

2.随机森林

2.1 什么是随机森林?

随机森林是一个包含多个决策树的集合,用于对新的数据点进行预测。通过每棵树产生的预测结果进行“投票”或平均,来确定随机森林的最终预测。

2.2 随机森林的优点与缺点

优点:

  • 降低了过拟合的风险:多个决策树的集成学习方式可以减少单个决策树的过拟合现象。
  • 具有很高的准确性。
  • 能够评估哪些特征对于预测最重要。

缺点:

  • 训练时间可能会比单一决策树长。
  • 模型更难以解释,因为它不再是一个简单的决策树。

3.决策树与随机森林的联系与区别

  • 联系:随机森林是基于决策树的算法。其基本单位就是决策树。

  • 区别:随机森林使用了多棵决策树,并且在构建这些决策树时会随机选择数据样本和特征,这样产生的模型差异性更大,能够更好地泛化到未知数据。而单一决策树则可能更容易受到数据中噪声的影响。

4.案例分析

我们将使用 Iris 数据集,这是机器学习中经常使用的一个数据集。它包含150个样本,每个样本有4个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。目标是预测每个样本的种类:setosa、versicolor或virginica。

4.1 使用决策树和随机森林预测

import numpy as np

# 加载数据
iris = load_iris()
X = iris.data + np.random.normal(0, 0.5, iris.data.shape)  # 添加噪音
y = iris.target

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 使用决策树进行训练,限制最大深度
clf_tree = DecisionTreeClassifier(max_depth=3, random_state=42)
clf_tree.fit(X_train, y_train)
y_pred_tree = clf_tree.predict(X_test)
print("决策树预测准确率:", accuracy_score(y_test, y_pred_tree))

# 使用随机森林进行训练,减少估计器的数量
clf_rf = RandomForestClassifier(n_estimators=10, random_state=42)
clf_rf.fit(X_train, y_train)
y_pred_rf = clf_rf.predict(X_test)
print("随机森林预测准确率:", accuracy_score(y_test, y_pred_rf))

预测结果;

决策树预测准确率: 0.7666666666666667
随机森林预测准确率: 0.9

4.2绘制ROC曲线

import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
from sklearn.preprocessing import label_binarize

# 为了绘制ROC曲线,我们需要将标签二值化
y_bin = label_binarize(y, classes=[0, 1, 2])
n_classes = y_bin.shape[1]

# 划分数据集
X_train, X_test, y_train_bin, y_test_bin = train_test_split(X, y_bin, test_size=0.2, random_state=42)

# 使用随机森林进行训练并预测概率
clf_rf = RandomForestClassifier(n_estimators=10, random_state=42)
clf_rf.fit(X_train, y_train_bin)
y_score_rf = clf_rf.predict_proba(X_test)

# 使用决策树进行训练并预测概率
clf_tree = DecisionTreeClassifier(max_depth=3, random_state=42)
clf_tree.fit(X_train, y_train_bin)
y_score_tree = clf_tree.predict_proba(X_test)

# 绘制ROC曲线
plt.figure(figsize=(10, 8))

for i in range(n_classes):
    fpr_rf, tpr_rf, _ = roc_curve(y_test_bin[:, i], y_score_rf[i][:, 1])
    roc_auc_rf = auc(fpr_rf, tpr_rf)
    
    fpr_tree, tpr_tree, _ = roc_curve(y_test_bin[:, i], y_score_tree[i][:, 1])
    roc_auc_tree = auc(fpr_tree, tpr_tree)
    
    plt.plot(fpr_rf, tpr_rf, color='darkorange', lw=2, label=f'ROC curve of class {i} (RF area = {roc_auc_rf:.2f})')
    plt.plot(fpr_tree, tpr_tree, color='blue', lw=2, label=f'ROC curve of class {i} (Tree area = {roc_auc_tree:.2f})')

plt.plot([0, 1], [0, 1], 'k--', lw=2)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic for Iris dataset (with noise)')
plt.legend(loc="lower right")
plt.show()

结果图:

通过上述代码,我们可以对比决策树和随机森林在鸢尾花数据集上的表现。通常,随机森林的预测准确率会优于单一决策树,因为它融合了多棵树的预测,减少了过拟合的风险。不过,特定的数据集和设置可能会导致两者的差异变大或变小。为了更准确地评估模型性能,还可以使用交叉验证等技术,并进行多次实验来获得平均结果。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1113896.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊聊Android线程优化这件事

一、背景 在日常开发APP的过程中,难免需要使用第二方库和第三方库来帮助开发者快速实现一些功能,提高开发效率。但是,这些库也可能会给线程带来一定的压力,主要表现在以下几个方面: 线程数量增多:一些库可…

uniapp——自定义组件插槽及使用

案例样式 自定义组件pageBox.vue <template><view><view class"bgColor" :style"{ height: bgHeight rpx }"></view><view class"main"><!-- 主要内容放这里 --><slot></slot></view>&…

虚拟/物理机备份中深度有效数据提取应用原理

当前针对虚拟机的磁盘映像备份的通用技术&#xff0c;主要通过识别虚拟机磁盘文件的元数据&#xff0c;或是借助虚拟化API&#xff08;如CBT接口&#xff09;或分区结构提取位图来进行。然而&#xff0c;由于虚拟化环境底层的限制&#xff0c;无法洞悉文件系统的内部运作&#…

idea中java类属性(字段)链式赋值

很多人看到标题可能会想到 lombok 的 Builder&#xff0c;lombok 在国内用的挺多的&#xff0c;开源的组件中 mybatis-plus 中用到了这个&#xff0c;使用这个有一个问题就是通过对应 get 和 set 方法找不到对应的赋值方法&#xff0c;因为 lombok 使用了 apt 在编译期生成了相…

超全整理,服务端性能测试-tomcat部署项目/查看日志(细致)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 tomcat部署单项目…

vue3+vite中使用Lottie动画

Lottie通过读取json文件信息实现动画效果 官方文档 Lottie官网 lottie库有众多动画 选择下载Lottie JSON到项目中 安装Lottie包 pnpm add lottie-web 模板创建 <template><div class"bg"><div id"canvas" class"canvas" ref&quo…

【Spring篇】详解AOP相关知识

&#x1f38a;专栏【Spring】 &#x1f354;喜欢的诗句&#xff1a;天行健&#xff0c;君子以自强不息。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f33a;AOP简介&#x1f33a;AOP作用&#x1f33a;AOP核心概…

【完美世界】石昊挑逗云曦,斩杀神级猿魔,吃血魂草开新挂,团灭战族追兵

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析完美世界资讯。 《完美世界》第133集更新&#xff0c;画质升级&#xff0c;渲染精美。石昊在剧中击败神级猿魔和战族追兵&#xff0c;并开发出新外挂。 石昊发现猿魔通过吃血魂草和金菩果增强实力&#xff0c;通过吃这些草…

Qt消息对话框的使用

本文介绍Qt消息对话框的使用。 QMessageBox类是Qt编程中常用到的一个类&#xff0c;主要用来进行一些简单的消息提示&#xff0c;比如&#xff1a;问题对话框&#xff0c;信息对话框等&#xff0c;这些对话框都属于QMessageBox类的静态方法&#xff0c;使用起来比较简单&#…

uniapp开发h5引入第三方js(sdk)

manifest.json 应用配置 | uni-app官网 根据文档上描述需要自定义模板的场景为&#xff1a; 起初以为是在原有的index.html基础上再新建一个html文件&#xff0c;最后发现不是&#xff0c;而是赋值文档里面的hmlt模板基础代码覆盖之前的index.html中的所有代码。 之前uniapp创…

鸿蒙应用开发之组件状态管理

一、概述 在应用中&#xff0c;界面通常都是动态的。如图1所示&#xff0c;在子目标列表中&#xff0c;当用户点击目标一&#xff0c;目标一会呈现展开状态&#xff0c;再次点击目标一&#xff0c;目标一呈现收起状态。界面会根据不同的状态展示不一样的效果。 图片 ArkUI作为…

神经网络画图?PPT就够了

在写项目文档或者论文&#xff0c;甚至是开组会的时候都需要画出模型的图片&#xff0c;但一些高端的画图软件或网站不太会用&#xff0c;而且我们画的模型又没有很复杂&#xff0c;大可不必花太多时间。 但问题是一些免费的画图工具效果不佳&#xff0c;要么图片不好看&#…

完整搭建Git服务器

文章目录 搭建Git服务器第一步&#xff0c;安装git&#xff1a;第二步&#xff0c;创建一个git用户&#xff0c;用来运行git服务第三步&#xff0c;添加SSH公钥第四步&#xff0c;初始化Git仓库&#xff1a;第五步&#xff0c;连接Git服务器 搭建Git服务器 GitHub就是一个免费…

【斗破年番】美杜莎女王怀孕和萧潇被删,官方真敢这么做吗?结局一定会很惨

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析斗破苍穹年番国漫资讯。 随着《斗破苍穹》年番即将更新&#xff0c;传出美杜莎女王怀孕和萧潇的剧情将被删减魔改的消息&#xff0c;引发网友激烈讨论。 根据网友透露的消息&#xff0c;美杜莎女王怀孕的设定甚至萧潇都可…

轻资产、降成本、快速上市!ODM/OEM 专题闪耀登场!

轻资产、降成本、快速上市!ODM/OEM 专题闪耀登场 swop2023包装世界(上海)博览会引爆创新潮流 消费者对个性化需求、情感诉求和创新创意的要求不断增长,这对品牌商提出了更高的要求。品牌方不仅需要注重外观设计,还要关注产品实力和品质,同时控制成本,上市速度等,才能在激烈的…

低调而无为而治,藏在超级应用背后的道家哲学

众所周知&#xff0c;Elon Musk 想将 Twitter 重新设计定位成一款“超级应用 - X”的野心已经不再是秘密。伴随着应用商店中 Twitter 标志性的蓝鸟 Logo 被 X 取代后&#xff0c;赛博世界充满了对这件事情各种角度的探讨与分析。 Musk 曾经无数次通过微信这一样本来推广他的“超…

00后都到适婚年龄啦!90后的还在低调什么?

当你的想法还停留在00后读书时代&#xff0c;其实大部分00后早已步入工作社会&#xff0c;还有不少人已经步入婚姻。广东金媒人婚恋&#xff0c;无论是广州、深圳、东莞、佛山举办活动的参与者中&#xff0c;00后的男生女生都占了不少。 广州深圳这样一二线城市的单身年轻人群&…

Note—— OSError np.degress() scipy.signal.argrelextrema

OSError Flask项目 python filename.py 报错 地址已被使用 搜索相关问题后发现是因为&#xff0c;你曾启动过相同或者类似的服务占用了这个端口&#xff08;一般来讲&#xff0c;在Mac上直接用Python启动的话&#xff0c;会导致退出不完整&#xff0c;你不能通过点击GUI的“退…

华为云Stack的学习(十)

十一、华为云Stack容器服务介绍 1.云容器引擎服务CCE 云容器引擎&#xff08;Cloud Container Engine&#xff0c;CCE&#xff09;提供高度可扩展的、高性能的企业级Kubernetes集群&#xff0c;支持运行Docker容器。借助云容器引擎&#xff0c;可以在云上轻松部署、管理和扩展…

SpringFramework之基于配置类管理Bean

1、完全注解开发理解 Spring 完全注解配置&#xff08;Fully Annotation-based Configuration&#xff09;是指通过 Java配置类 代码来配置 Spring 应用程序&#xff0c;使用注解来替代原本在 XML 配置文件中的配置。相对于 XML 配置&#xff0c;完全注解配置具有更强的类型安…