决策树和随机森林——推导与实践

第三章 分类模型-随机森林知识点详细总结 机器学习算法系列 第一章 Python/Spark分类模型-逻辑回归知识点详细总结 第二章分类模型-决策树知识点详细总结 目录 机器学习算法系列 前言 二、了解什么是集成学习 三、随机森林工作原理(构建过程) 四、特征重要性 五、随机森林分类模型参数说明 六、随机森林优缺点 七、应用领域 八、随机森林代码 前言 本章节内容主要介绍随机森林,集成学习、随机森林工作原理、特征重要性、随机森林参数说明并附上部分代码、随机森林优缺点。 一、随机森林简介 ... 阅读详情

决策树:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
条件熵:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
决策树实践代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
import pydotplus


# 花萼长度、花萼宽度,花瓣长度,花瓣宽度
iris_feature_E = 'sepal length', 'sepal width', 'petal length', 'petal width'
iris_feature = u'花萼长度', u'花萼宽度', u'花瓣长度', u'花瓣宽度'
iris_class = 'Iris-setosa', 'Iris-versicolor', 'Iris-virginica'


if __name__ == "__main__":
    mpl.rcParams['font.sans-serif'] = [u'SimHei']
    mpl.rcParams['axes.unicode_minus'] = False

    path = '..\\8.Regression\\iris.data'  # 数据文件路径
    data = pd.read_csv(path, header=None)
    x = data[range(4)]
    y = pd.Categorical(data[4]).codes
    # 为了可视化,仅使用前两列特征
    x = x.iloc[:, :2]
    x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.7, random_state=1)
    print y_test.shape

    # 决策树参数估计
    # min_samples_split = 10:如果该结点包含的样本数目大于10,则(有可能)对其分支
    # min_samples_leaf = 10:若将某结点分支后,得到的每个子结点样本数目都大于10,则完成分支;否则,不进行分支
    model = DecisionTreeClassifier(criterion='entropy')
    model.fit(x_train, y_train)
    y_test_hat = model.predict(x_test)      # 测试数据

    # 保存
    # dot -Tpng my.dot -o my.png
    # 1、输出
    with open('iris.dot', 'w') as f:
        tree.export_graphviz(model, out_file=f)
    # 2、给定文件名
    # tree.export_graphviz(model, out_file='iris1.dot')
    # 3、输出为pdf格式
    dot_data = tree.export_graphviz(model, out_file=None, feature_names=iris_feature_E, class_names=iris_class,
                                    filled=True, rounded=True, special_characters=True)
    graph = pydotplus.graph_from_dot_data(dot_data)
    graph.write_pdf('iris.pdf')
    f = open('iris.png', 'wb')
    f.write(graph.create_png())
    f.close()

    # 画图
    N, M = 50, 50  # 横纵各采样多少个值
    x1_min, x2_min = x.min()
    x1_max, x2_max = x.max()
    t1 = np.linspace(x1_min, x1_max, N)
    t2 = np.linspace(x2_min, x2_max, M)
    x1, x2 = np.meshgrid(t1, t2)  # 生成网格采样点
    x_show = np.stack((x1.flat, x2.flat), axis=1)  # 测试点
    print x_show.shape

    # # 无意义,只是为了凑另外两个维度
    # # 打开该注释前,确保注释掉x = x[:, :2]
    # x3 = np.ones(x1.size) * np.average(x[:, 2])
    # x4 = np.ones(x1.size) * np.average(x[:, 3])
    # x_test = np.stack((x1.flat, x2.flat, x3, x4), axis=1)  # 测试点

    cm_light = mpl.colors.ListedColormap(['#A0FFA0', '#FFA0A0', '#A0A0FF'])
    cm_dark = mpl.colors.ListedColormap(['g', 'r', 'b'])
    y_show_hat = model.predict(x_show)  # 预测值
    print y_show_hat.shape
    print y_show_hat
    y_show_hat = y_show_hat.reshape(x1.shape)  # 使之与输入的形状相同
    print y_show_hat
    plt.figure(facecolor='w')
    plt.pcolormesh(x1, x2, y_show_hat, cmap=cm_light)  # 预测值的显示
    plt.scatter(x_test[0], x_test[1], c=y_test.ravel(), edgecolors='k', s=150, zorder=10, cmap=cm_dark, marker='*')  # 测试数据
    plt.scatter(x[0], x[1], c=y.ravel(), edgecolors='k', s=40, cmap=cm_dark)  # 全部数据
    plt.xlabel(iris_feature[0], fontsize=15)
    plt.ylabel(iris_feature[1], fontsize=15)
    plt.xlim(x1_min, x1_max)
    plt.ylim(x2_min, x2_max)
    plt.grid(True)
    plt.title(u'鸢尾花数据的决策树分类', fontsize=17)
    plt.show()

    # 训练集上的预测结果
    y_test = y_test.reshape(-1)
    print y_test_hat
    print y_test
    result = (y_test_hat == y_test)   # True则预测正确,False则预测错误
    acc = np.mean(result)
    print '准确度: %.2f%%' % (100 * acc)

    # 过拟合:错误率
    depth = np.arange(1, 15)
    err_list = []
    for d in depth:
        clf = DecisionTreeClassifier(criterion='entropy', max_depth=d)
        clf.fit(x_train, y_train)
        y_test_hat = clf.predict(x_test)  # 测试数据
        result = (y_test_hat == y_test)  # True则预测正确,False则预测错误
        if d == 1:
            print result
        err = 1 - np.mean(result)
        err_list.append(err)
        # print d, ' 准确度: %.2f%%' % (100 * err)
        print d, ' 错误率: %.2f%%' % (100 * err)
    plt.figure(facecolor='w')
    plt.plot(depth, err_list, 'ro-', lw=2)
    plt.xlabel(u'决策树深度', fontsize=15)
    plt.ylabel(u'错误率', fontsize=15)
    plt.title(u'决策树深度与过拟合', fontsize=17)
    plt.grid(True)
    plt.show()

随机森林实践代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
from sklearn.ensemble import RandomForestClassifier


def iris_type(s):
    it = {'Iris-setosa': 0, 'Iris-versicolor': 1, 'Iris-virginica': 2}
    return it[s]

# 'sepal length', 'sepal width', 'petal length', 'petal width'
iris_feature = u'花萼长度', u'花萼宽度', u'花瓣长度', u'花瓣宽度'

if __name__ == "__main__":
    mpl.rcParams['font.sans-serif'] = [u'SimHei']  # 黑体 FangSong/KaiTi
    mpl.rcParams['axes.unicode_minus'] = False

    path = '..\\8.Regression\\iris.data'  # 数据文件路径
    data = pd.read_csv(path, header=None)
    x_prime = data[range(4)]
    y = pd.Categorical(data[4]).codes

    feature_pairs = [[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [2, 3]]
    plt.figure(figsize=(10, 9), facecolor='#FFFFFF')
    for i, pair in enumerate(feature_pairs):
        # 准备数据
        x = x_prime[pair]

        # 随机森林
        clf = RandomForestClassifier(n_estimators=200, criterion='entropy', max_depth=3)
        clf.fit(x, y.ravel())

        # 画图
        N, M = 50, 50  # 横纵各采样多少个值
        x1_min, x2_min = x.min()
        x1_max, x2_max = x.max()
        t1 = np.linspace(x1_min, x1_max, N)
        t2 = np.linspace(x2_min, x2_max, M)
        x1, x2 = np.meshgrid(t1, t2)  # 生成网格采样点
        x_test = np.stack((x1.flat, x2.flat), axis=1)  # 测试点

        # 训练集上的预测结果
        y_hat = clf.predict(x)
        y = y.reshape(-1)
        c = np.count_nonzero(y_hat == y)    # 统计预测正确的个数
        print '特征:  ', iris_feature[pair[0]], ' + ', iris_feature[pair[1]],
        print '\t预测正确数目:', c,
        print '\t准确率: %.2f%%' % (100 * float(c) / float(len(y)))

        # 显示
        cm_light = mpl.colors.ListedColormap(['#A0FFA0', '#FFA0A0', '#A0A0FF'])
        cm_dark = mpl.colors.ListedColormap(['g', 'r', 'b'])
        y_hat = clf.predict(x_test)  # 预测值
        y_hat = y_hat.reshape(x1.shape)  # 使之与输入的形状相同
        plt.subplot(2, 3, i+1)
        plt.pcolormesh(x1, x2, y_hat, cmap=cm_light)  # 预测值
        plt.scatter(x[pair[0]], x[pair[1]], c=y, edgecolors='k', cmap=cm_dark)  # 样本
        plt.xlabel(iris_feature[pair[0]], fontsize=14)
        plt.ylabel(iris_feature[pair[1]], fontsize=14)
        plt.xlim(x1_min, x1_max)
        plt.ylim(x2_min, x2_max)
        plt.grid()
    plt.tight_layout(2.5)
    plt.subplots_adjust(top=0.92)
    plt.suptitle(u'随机森林对鸢尾花数据的两特征组合的分类结果', fontsize=18)
    plt.show()

机器学习入门:10小时掌握四大核心算法与Python实战 这次我们来看一个面向研一同学(或任何机器学习初学者)的快速入门路径。标题里提到的“10小时吃透机器学习4大算法”听起来很激进,但核心思路是对的:在有限时间内,抓住最核心、最通用、最能帮你建立直觉的算法,快速搭建起知识框架,然后直奔更前沿的深度学习。这比一开始就陷入庞杂的数学推导或冷门算法要高效得多。 对于刚接触机器学习的研究生或自学者,最大的困惑往往是“从哪开始”和“学什么有用”。本文的目标就是解决这个问题。我们不空谈理论,而是直接锁定四个基石算法: 线性回归、逻辑回归、决策树(及随机森林)、支持向量机(S 阅读详情

相关推荐

2024机器学习实战入门:从零到一掌握六大核心算法与scikit-learn

机器学习作为人工智能的核心技术,其本质是通过算法从数据中学习规律并做出预测或决策。其基本原理是构建模型以拟合数据分布,从而实现自动化决策与洞察。这项技术的核心价值在于将数据转化为 actionable intelligence,赋能业务优化与创新。在工程实践中,scikit-learn 作为 Python 的机器学习标准库,以其一致的 API 设计和丰富的算法集,极大地降低了应用门槛。无论是进行客户分群、销量预测还是图像分类,掌握经典算法的工作流都是关键。本文聚焦于线性回归、K-Means聚类、决策树与随机

weixin_30673611的博客 410

独家 | 一文读懂随机森林的解释和实现(附python代码)

作者:William Koehrsen翻译:和中华校对:李润嘉本文约6000字,建议阅读15分钟。本文从单棵决策树讲起,然后逐步解释了随机森林的工作原理,并使用sklea...

数据派THU 6250

机器学习基础原理与代码实战案例讲解

机器学习基础原理与代码实战案例讲解 作者:禅与计算机程序设计艺术 / Zen and the Art of Computer Programming 1. 背景介绍 1.1 问题的由来 随着信息技术的飞速发展,数据量呈爆炸式增长

AI天才研究院 1038

图解机器学习算法(7) | 随机森林分类模型详解(机器学习通关指南·完结)

随机森林是一种由决策树构成的(并行)集成算法。本文讲解随机森林算法涉及的模型集成、Bagging、算法特点及优缺点等重要知识点,最后介绍关键参数和参数调优。

ShowMeAI研究中心 3万+

【AI大数据计算原理与代码实例讲解】机器学习

【AI大数据计算原理与代码实例讲解】机器学习 作者:禅与计算机程序设计艺术 / Zen and the Art of Computer Programming 关键词 机器学习、大数据计算、算法原理、深度学习、代码实例、实践应用

AI架构师小马 1478

分类(Classification) 原理与代码实例讲解

分类(Classification) - 原理与代码实例讲解 关键词:分类, 监督学习, 逻辑回归, 支持向量机, 决策树, 集成学习, Python, Scikit-learn 1. 背景介绍

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 905

随机森林系列(一)——随机森林分类算法原理推导

一文看懂随机森林!

初一的博客 7328

RandomForest随机森林算法

RandomForest,随机森林算法

【机器学习】集成学习(Bagging)——随机森林(RandomForest)(理论+图解+公式推导)

如果需要完整代码可以关注下方公众号,后台回复“代码”即可获取,阿光期待着您的光临~ 文章目录一、引言二、随机森林1.数据抽样2.集成模型结果3.生成单棵树三、学习器多样性增强1.数据样本扰动2.特征属性扰动3.模型参数扰动 2021人工智能领域新星创作者,带你从入门到精通,该博客每天更新,逐渐完善机器学习各个知识体系的文章,帮助大家更高效学习。 一、引言 集成学习方式大致分为两种,一种是Boosting架构,采用模型之间串行的方式,典型算法代表为AdaBoost、GBDT等,第二种为Baggin.

优快云 精品推荐 6417

随机森林算法介绍

随机森林算法介绍,详细介绍随机森林算法的原理,流程,功能,特性。

通俗解释随机森林算法

首先我们来复习一下之前介绍过的两个机器学习模型:Bagging和DecisionTree。Bagging是通过bootstrap的方式,从原始的数据集D中得到新的D^;然后再使用一些basealgorithm对每个D^都得到相应的gt;最后将所有的gt通过投票uniform的形式组合成一个G,G即为我们最终得到的模型。DecisionTree是通过递归形式,利用分支条件,将原始数据集D切割成一个个子树结构,长成一棵完整的树形结构。DecisionTree最终得到的G(x)是由相应的分支条件b(x)和分支树Gc(x)递归组成。Bagging和DecisonTree算法各自有一个很重要的特点。Ba

机器学习:邹博邹伟教学

邹博,中国科学院副研究员,天津大学软件学院创业导师,成立中国科学院邹博,人工智能研究中心(杭州站) ,在规创、天识,容客邦等公司担任技术顾问,研·究方向机器学习、深度学习、计算几何,应用于大型气象设备图像与文本挖握股票交易与预测、量子化学医药路径寻优、传统农资产品价格预测和决策等领域。 课程介绍 本课程特点是从数学层面推导最经典的机器学习算法,以及每种算法的示例和代码实现(Python)、如何做算法的参数调试、以实际应

weixin_44523062的博客 1849

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第10套模块A:网络构建 & (五)网络运维配置+(六)SDN网络配置-命令配置

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第10套模块A:网络构建 & (五)网络运维配置+(六)SDN网络配置-命令配置

君逍遥o 812

AI学习教程 - 完整版机器学习算法库

本项目旨在帮助初学者理解机器学习算法的核心原理,通过纯Python实现(不依赖sklearn等库)来展示算法的内部工作机制。📖 详细的理论解释💻 从零开始的代码实现🔍 实际应用示例📊 可视化演示✨ 最佳实践指导。

小铭kimi的博客 720

查找【优快云】- 人工客服

【代码】查找【优快云】- 人工客服。

👨‍💻 前端开发者 | 技术分享者 1409

matlab 点云泊松盘采样

本文介绍了泊松盘采样算法在三维点云处理中的应用。该算法通过最小间距约束(任意两点距离≥r)和均匀分布特性,生成高质量、均匀分布的点集。文章详细阐述了参数设置(如采样半径、候选点数),并与体素栅格、随机采样等方法进行了对比。代码实现部分展示了MATLAB版本的泊松盘采样算法,包括KD树加速和候选点生成机制。实验结果表明,该方法能有效保持点云特征,适用于点云简化、曲面重建等场景。文中还提供了参数调整建议和不同应用场景下的使用指导。

点云侠的博客 537

机器学习核心算法精讲:从理论推导到实战应用

本文深入解析机器学习核心算法,包括线性回归、支持向量机、决策树和集成学习的理论推导与实战应用。通过Python代码示例和工程实践建议,帮助读者掌握从基础到进阶的机器学习技术,提升模型性能和应用效果。

milk5的博客 599

手把手教您如何在飞牛NAS上部署OpenClaw(Clawdbot/Moltbot)智能助手,接入钉钉,0成本使用(万字保姆级教程)

想在飞牛NAS上部署一个24小时待命的AI助手?🤖 本文手把手教您如何在飞牛NAS上部署一个完全免费的OpenClaw智能助手 ✅

XiaoqiangClub的博客 7238

13个机器学习算法实战教程:从西瓜书到代码实现完全指南

想要真正掌握机器学习算法吗?《机器学习》(西瓜书)代码实战项目为你提供了从理论到实践的完整学习路径。这个开源项目包含了13个核心机器学习算法的Python实现,通过scikit-learn和numpy等流行框架,让你能够快速上手并深入理解每个算法的原理和应用。无论你是机器学习初学者还是希望巩固基础的中级开发者,这个项目都能帮助你建立扎实的算法基础。 ## 🎯 项目概述与价值主张 **机器学习

gitblog_00106的博客 793

HyperLynx(十三)Hyperlynx前放置之对网络的EMC分析

在“Spectrum Analyzer”对话框的“Stimulus”(激励)栏中,设置激励源频率为100MHz,选择“IC modeling”为“Fast-Strong”,并按图所示设置其他选项。显然,在仿真的基频上,它的幅值最大,将鼠标光标置于柱状图上,可以读取其值为64.28mA,这个数值是由选定的驱动芯片决定的。按上图所示的原理图,在接收端增加一个并联的RC负载,再次运行仿真,结果如图所示。在对话框左侧的“Pins”列表中,显示出了已添加电流探针的引脚,可以在此列表中选择所要仿真的目标。...

小幽余生不加糖 4681

[QMT量化交易小白入门]-三十七、QMT中如何使用类似于通达信中的VBA函数(量化python代码解析)

这段代码主要围绕着在QMT环境中实现类似通达信VBA函数的功能展开,核心功能是基于RSI指标来判断股票的买卖时机,并根据持仓情况进行相应的交易操作。class G():passg = G()这里定义了一个空类G,并创建了该类的实例g。这个实例g将作为全局变量来存储一些在整个程序运行过程中需要共享的数据,例如除复权类型、股票代码、目标数量等。1、使用VBA开发策略时,参数固化的问题会带来一些限制,比如无法修改MA函数的周期参数,只能使用固定周期。

木头大左的博客 1700

联想机器学习面试10大高频考题解析

机器学习作为人工智能的核心技术,通过算法让计算机从数据中学习规律。其核心原理包括监督学习、无监督学习和强化学习三大范式,涉及特征工程、模型训练和评估等关键环节。在实际工程应用中,机器学习算法需要解决类别不平衡、模型部署优化等典型问题,其中逻辑回归、决策树和CNN等经典算法常被用于业务场景。本文基于联想等科技公司的真实面试经验,精选10道高频考题,涵盖从基础理论推导到工程实践优化的完整知识体系,特别针对机器学习面试中的常见误区如损失函数混淆、感受野计算等难点提供多角度解析。通过结构化解题框架和业务场景映射,帮

weixin_31887307的博客 302

SAP FICO应付票据平台开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP FICO应付票据平台开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

我好像病了的博客 379

大促场景下,JiuwenSwarm构建多Agent安全高效协助新范式

本章将介绍六种经典的机器学习算法,包括线性回归、逻辑回归、神经网络、支持向量机、随机森林和梯度提升决策树(GBDT)。每种算法将从原理、实现和应用三个层面进行讲解,配合Jupyter Notebook代码演示,帮助学员快速掌握机器学习模型的核心概念和实践技能。总学时:3学时(每节0.5学时)算法类型核心思想适用场景线性回归回归最小二乘法拟合直线数值预测逻辑回归分类Sigmoid函数转换概率二分类/多分类神经网络通用多层非线性变换复杂模式识别支持向量机分类/回归。

红目香薰 4万+

《从底层结构开始学习FPGA》目录与传送门

《从底层结构开始学习FPGA》目录与传送门

孤独的单刀 16万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

oh-my-openagent 中 Java 项目的 jdtls LSP 配置指南:安装、配置与验证全流程

在 oh-my-openagent(omo)项目中,Java 语言服务默认由内置的 `jdtls`(Eclipse JDT Language Server)提供,本文面向需要在 omo/Codex 环境中为 `.java` 项目接通诊断(diagnostics)、跳转定义(goto_definition)、查找引用(find_references)等 LSP 能力的开发者。读完本文你将掌握:`jd

gitblog_00860的博客 378

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 线性回归——推导及实践
下一篇: 机器学习——提升算法理论
CoderMateng
博客等级 码龄7年 8粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值