【机器学习+python(8)】分类决策树的介绍与实现

机器学习——决策树模型:Python实现 机器学习——决策树模型:Python实现欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你 阅读详情

欢迎关注大家关注微信公众号【哈希大数据】


       之前我们介绍过用逻辑回归根据鸢尾花萼片、花瓣的长度和宽度进行鸢尾花类别的判定;也通过朴素贝叶斯模型分享了如何根据男生专业和身高两大属性,判断其是否有女朋友。而本期我们将介绍另外一种有监督的机器学习分类模型----决策树(也可以实现基本的回归),重点介绍决策树的基本原理和实现,并且借助python的sklearn库中的决策树算法实现上述两类数据分类展示。

决策树的基本原理

       想必大家都有疑问,好多机器学习算法均可实现分类,那不同之处是什么呢?对于逻辑回归,我们已知它是基于线性模型,通过对数据特征给予权重相加得到新的一个回归值,再进行Sigmoid变换将回归值约束在(0,1)之间,进而通过值的大小判断所属的类型(一般情况实现的是线性分割,输入特征x与logit之间是线性的,除非对x进行多维映射)。

       而朴素贝叶斯模型则是基于贝叶斯定理、条件概率、特征独立分布的,根据样本特征计算其属于特定类别的概率,然后根据概率大小确定其最终的分类结果。

      决策树算法简单来说就是带有判断规则(if-then)的一种树,可以依据树中的决策规则来预测未知样本的类别或数值(分类和回归)。其核心是对数据进行一个一个特征的筛选和处理,并且对特征阈值实现非线性分割,根据得出的抉择结果依次建立树模型。其主要优点是树形模型更接近人的思维方式,分类速度快,易于理解,可产生可视化、可解释的的分类规则。

      比如:当我们想要出门时,会根据降雨、雾霾、气温、活动范围是室内还是室外等等特征综合进行考虑和判断,做出最后决定。下图是一个简单判断是否出门的4层决策树分类结果。结果表明,下雨时,一定不出门;而如果不下雨却有雾霾也不会出门。。。。。。 

        整个分类结果 一目了然,而且结构像一棵树,有分叉的节点(数据特征)和树叶(判定结果)。其中根节点(图中降雨属性)表示在此次分类中筛选出的最重要的特征;分叉处的父节点和子节点表示目标的某一个特征或属性,而结果节点也称为叶子节点,是完成判断后产生的最终决策结果(出门or不出门)。

        看到这里可能会有疑问,为什么要选择降雨作为决策树的根节点,而不是雾霾情况或气温等?****而对于时间属性(连续型)的分割,为何是以18°,30°,35°为临界?这就是实现决策树过程要解决的核心问题:如何依次选择数据的属性;如何计算每个属性的决策规则(完成数据的分裂);什么时候可以停止分裂(防止过拟合)。下面详细通过决策树算法来解决这些疑问,并通过实例完成建树和剪枝。

决策树算法

决策树算法简介

       决策树算法通常是递归地选择最优特征,也就是会把每个特征都计算一遍,选取能够使分类分的最好的一个特征,然后用这个最优特征构建根结点,依次对数据集进行分割。比如该特征为离散型有几种值就分割为几个子集;而如果特征是连续型的则通过离散化处理后得到分割阈值后再分割子集;每个子集再分别递归调用特征选择方法,依次返回结点,返回的结点也就是上一层的子结点;直到所有特征都已经用完,或者数据集只有一维特征时停止。

       为了防止过拟合问题,计算每个节点的分类错误,进行剪枝处理。(先剪枝,在构造过程中,当某个节点满足剪枝条件,则直接停止此分支的构造;后剪枝,先构造完成完整的决策树,再通过某些条件遍历树进行剪枝。)

       一般而言,随着划分过程不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别(也就是当下雨时得出的分类结果都是不出门),即节点的“纯度”越来越高。就是保证目标变量要分得足够开(将y=出门和y=不出门两种情况按照不同天气特征判定尽可能分离)。

       此时我们将寻找最纯净的划分方法,决策树中常用的方法有ID3、C4.5、和CART,其中ID3算法使用信息增益作为不纯度;C4.5算法使用信息增益率作为不纯度;CART算法对回归树用平方误差最小化准则,对分类树用基尼指数(Gini index)最小化准则,进行特征选择,生成决策树。

   **来,咱继续唠~~~**

      鉴于ID3算法要求数据特征为离散值,而且特征中的类型数量会影响信息增益值;而c4.5算法生成的多叉树,运算强度较高;因此我们直接以CART算法实现二叉分类树为例,进行完整介绍:

      假设有K个类的样本D(A属性,Y类别)属于第i类的概率为:pi,则分类后的基尼指数为:

       它表示训练数据的不确定性,值越大表明特征所对应的类型越不确定。如二分类问题中,假设样本x属于类别1的概率为p,则基尼指数为:Gini(x)=2p(1-p),当两类情况的可能均为1/2时,其不确定性最大为1/2。对于个给定的样本D,假设有K个类别, 第k个类别的数量为Ck,则样本D的基尼系数为:

    ![image](http://upload-images.jianshu.io/upload_images/11382441-f06c757bf4876374?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

      根据数据特征A将样本D的空间分为两块y1,y2。两块样本数据大小分别为:D1,D2。则在特征A的条件下,基尼系数为:

     ![image](http://upload-images.jianshu.io/upload_images/11382441-c6f41021e8548b0d?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

      选择使该基尼系数最小的属性A,作为父节点,得出对应的子节点或叶子节点。然后依次递归其他所有属性,依次选择基尼系数最下的属性,作为优先判断的属性.其中如果属性是连续的数据,将对这些数据进行离散化处理,处理的基本思路是:

    (1)选取该属性的所有n个数值,取相邻两样本值的中位数,一共取得n-1个划分点,对于这n-1个点,分别计算以该点作为二元分类点时的基尼系数

    (2)选择基尼系数最小的点作为该连续特征的二元离散分类点。

       比如取到的基尼系数最小的点为at,则小于at的值为类别1,大于at的值为类别2,这样我们就做到了连续特征的离散化。其中这些属性后面还可以参与子节点的产生选择过程。

       关于建树和剪枝

          建树具体流程为:

输入:训练集D,基尼系数的阈值,样本个数阈值。

输出:分类决策树T。

流程:(根节点依次往下)

  1. 对于当前节点的数据集为D,如果样本个数小于阈值或者没有特征,则返回决策子树,当前节点停止递归。

  2. 计算样本集D的基尼系数,如果基尼系数小于阈值,则返回决策树子树,当前节点停止递归。

          3.计算当前节点现有的各个特征值对数据集D的基尼系数。

         4.选择基尼系数最小的特征A和对应的特征值a。根据这个最优特征和最优特征值,把数据集划分成两部分D1和D2,同时建立当前节点的左右节点,做节点的数据集D为D1,右节点的数据集D为D2.

  1. 对左右的子节点递归的调用1-4步,生成决策树。

对于生成的决策树做预测的时候,假如测试集里的样本A落到了某个叶子节点,而节点里有多个训练样本。则对于A的类别预测采用的是这个叶子节点里概率最大的类别。

停止分裂的条件

(1)最小节点数

当节点的数据量小于一个指定的数量时,不继续分裂。两个原因:一是数据量较少时,再做分裂容易强化噪声数据的作用;二是降低树生长的复杂性。提前结束分裂一定程度上有利于降低过拟合的影响。

(2)基尼值(信息熵)小于阀值

基尼值大小表示数据的复杂程度,当熵或者基尼值过小时,表示数据的纯度比较大,如果熵或者基尼值小于一定程度时,节点停止分裂。

(3)决策树的深度达到指定的条件

节点的深度可以理解为节点与决策树跟节点的距离,如根节点的子节点的深度为1,因为这些节点与跟节点的距离为1,子节点的深度要比父节点的深度大1。决策树的深度是所有叶子节点的最大深度,当深度到达指定的上限大小时,停止分裂。

(4)所有特征已经使用完毕,不能继续进行分裂

被动式停止分裂的条件,当已经没有可分的属性时,直接将当前节点设置为叶子节点。

决策数的Python实现

# 构建模型def tree_module(trainData,labels):    decision_tree = tree.DecisionTreeClassifier(max_depth=4)    decision_tree_one = decision_tree.fit(trainData, labels)    return decision_tree_one# 绘制决策树图def pic_tree(decision_tree,filename,columns,theclass,save_path):    # 保存模型    with open (filename, 'w') as f:        f = tree.export_graphviz (decision_tree, out_file=f)    dot_data = tree.export_graphviz (decision_tree, out_file=None, feature_names=columns,                                     class_names=theclass, filled=True, rounded=True, special_characters=True)    graph = pydotplus.graph_from_dot_data (dot_data)

分类结果

鸢尾花分类结果:

image

"能找到对象的男生"特征分类结果:

image

结果说明:

从决策树的结果分类来看:对于区分鸢尾花类型,花瓣的宽度是最核心属性。而且在决策树深度为4的条件下:仅有3个样本未完全区分开,其余的gini指数都为0,保证了完全区分。

而在根据男生特征对是否有女朋友的判断中,不同于我们上次贝叶斯分类得出的判断,只要是数学专业的男生无论身高特征几乎都是有女朋友的,而在分类树中身高的高低是最重要的判定因素,更加符合我们的常识判断。

机器学习笔记(4)——ID3决策树算法及其Python实现 决策树是一种基于树结构来进行决策的分类算法,我们希望从给定的训练数据集学得一个模型(即决策树),用该模型对新样本分类。决策树可以非常直观展现分类的过程和结果,一旦模型构建成功,对新样本的分类效率也相当高。 最经典的决策树算法有ID3、C4.5、CART,其中ID3算法是最早被提出的,它可以处理离散属性样本的分类,C4.5和CART算法则可以处理更加复杂的分类问题,本文重点介绍ID3算法。 举个... 阅读详情

相关推荐

头歌实践教学平台python机器学习-决策树

鸢尾花数据集是一类多重变量分析的数据集。通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(SetosaVirginica)三个种类中的哪一类。sklearn中已经提供了鸢尾花数据集的相关接口,想要使用该数据集可以使用如下代码:#加载鸢尾花数据集#X表示特征,y表示标签。

学习只是用户态 2920

Python 机器学习 利用sklearn构建决策树的实现 2

决策树 import numpy as np import os %matplotlib inline import matplotlib import matplotlib.pyplot as plt plt.rcParams['axes.labelsize'] = 14 plt.rcParams['xtick.labelsize'] = 12 plt.rcParams['ytick.labelsize'] = 12 import warnings warning.filterwarn

weixin_44056948的博客 791

手把手教你用Python实现决策树模型

本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第21篇文章,我们一起来看一个新的模型——决策树。 决策树的定义 决策树是我本人非常喜欢的机器学习模型,非常直观容易理解,并且和数据结构的结合很紧密。我们学习的门槛也很低,相比于那些动辄一堆公式的模型来说,实在是简单得多。 其实我们生活当中经常在用决策树,只是我们自己没有发现。决策树的本质就是一堆if-else的组合,举个经典的例子,比如我们去小摊子上买西瓜。水果摊的小贩都是怎么做的?拿起西瓜翻滚一圈,看一眼,然后伸手一拍

TechFlow的博客 5140

树模型参数

树模型参数: 1.criterion gini or entropy 2.splitter best or random 前者是在所有特征中找最好的切分点 后者是在部分特征中(数据量大的时候) 3.max_features None(所有),log2,sqrt,N 特征小于50的时候一般使用所有的 4.max_depth 数据少或者特征少的时候可以不管这个值,如果模型样本量多,特征也多的情况下,可...

xiaofeixia002X的博客 564

机器学习算法的Python实现 (3):决策树剪枝处理

本文数据参照 机器学习-周志华 一书中的决策树一章。可作为此章课后习题4的答案 代码则参照《机器学习实战》一书的内容,并做了一些修改。 CART决策树 使用基尼指数(Gini Index)来选择划分属性。其公式如下: 本文内容包括未剪枝CART决策树、预剪枝CART决策树以及后剪枝决策树 本文使用的Python库包括 numpypandasmath

Will Lin的博客 3万+

9、python决策树分类(实战案例)

目录 1、概念 2 决策树生成方法 3、决策树绘图方法 4、案例代码示例 1、概念 决策树(DEcision Tree) 他通过对训练样本的学习,并建立分类规则,对新样本数据进行分类,属于有监督学习 决策树也是一种多功能的机器学习算法,它可以 实现分类和回归任务,甚至是多输出任务。 优点: 决策树易于理解和实现 决策树可处理数值型和非数值型数据 2 决策树生成方法 #  ...

UP Lee博客 1万+

1. 决策树python源码实现--多叉分类树

多叉分类树 ​ 下面实现的分类树只限于特征是离散变量,而连续变量不能处理。另外,西瓜书介绍的缺失值的处理、多变量处理均未实现。下面实现的树有一个共同的特点,它的分支依据都是一个具体的特征取值,且每次特征选择之后都要删除特征。 一、python实现 ​ 我使用python的类实现多分叉决策树,包括决策树的训练和预测两部分。 1.1树的结构 ​ 使用python的字典(dict)作为树的结点...

weixin_30826761的博客 935

Python 机器学习 决策树算法

决策树是一种常用的机器学习算法,它适用于分类和回归任务。其核心思想是基于数据特征对实例进行分类的过程,可以视为一系列规则的集合。决策树易于理解和解释,能够处理数值型和类别型数据,并且可以可视化决策过程。决策树的主要优点是模型的可解释性强,但同时也容易过拟合。为了解决过拟合问题,可以通过剪枝参数如max_depth、min_samples_split等来限制树的大小。

weixin_42098295的博客 1189

【python库学习】 sklearn中的决策树Decision Trees

本库的决策树通过分段常数逼近目标分布,深度越大,其分段越细致,同时复杂度越大,拟合越好,过拟合风险上升。决策树易于理解与解释,且生成的决策树可以可视化;无需做数据标准化处理,空值剔除等,注意的是本库不支持缺失值;其拟合时间复杂度是0(logN) N为样本数;可以处理多输出问题,可以同时接受连续值与类别型数据,注意本库不支持类别型数据;对数据假设要求不严格,在部分违反下,表现仍然不错。当然根据决策树的原理,也有一些缺点,一是不加限制会学到复杂的树结构,需要注意控制过拟合问题;

qq_38142901的博客 5489

[Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

分类(Classification)属于有监督学习(Supervised Learning)中的一类,它是数据挖掘、机器学习和数据科学中一个重要的研究领域。分类模型类似于人类学习的方式,通过对历史数据或训练集的学习得到一个目标函数,再用该目标函数预测新数据集的未知属性。本章主要讲述分类算法基础概念,并结合决策树、KNN、SVM分类算法案例分析各类数据集,从而让读者学会使用Python分类算法分析自己的数据集,研究自己领域的知识,从而创造价值。 19.1 分类 19.1.1 分类模型 与前面讲述的聚类模型类似

杨秀璋的专栏 2万+

Keil5编译报错:ARM Compiler Version 5缺失的完整解决方案

本文提供了Keil5编译报错“ARM Compiler Version 5缺失”的完整解决方案。详细介绍了手动安装ARM Compiler Version 5的步骤,包括下载安装包、配置编译器路径及常见问题排查,帮助开发者快速恢复老项目的编译环境。

bb456的博客 945

python实现决策树算法_决策树算法笔记及ID3算法的Python实现

决策树是多叉树,决策树是彼此互斥且完备的一系列的if-then规则。决策树还可以看成给定条件下类的条件概率分布,每条路径对应于划分中的一个单元。决策树的损失函数通常是正则化的极大似然函数。决策树的核心算法就是对可能的决策树空间进行自上而下的贪心搜索。特征选择,怎么选特征:熵的解释:信息论中对熵的解释就是熵是对S任一成员的分类信息进行编码所需的最少的bit数量。如果\(p\)是1,那么接收器知道是正...

weixin_39517400的博客 254

机器学习教程 之 半监督学习 Co-training 协同训练 (论文、算法、数据集、代码)

这篇博客介绍的是一篇用于半监督分类问题的方法: 协同训练 Co-training, A. Blum and T. Mitchell, “Combining labeled and unlabeled data with co-training,” in Proc. of the 11th Annual Conf. on Computational Learning Theory, 1998.,这算是半监督领域里面始祖级的论文了,是1998年两位CMU大佬提出的方法。 之前还写过一篇关于Tri-trainin

冯良骏 的 博客 1万+

python决策树怎么选择_【机器学习+python(8)】分类决策树的介绍与实现

之前我们介绍过用逻辑回归根据鸢尾花萼片、花瓣的长度和宽度进行鸢尾花类别的判定;也通过朴素贝叶斯模型分享了如何根据男生专业和身高两大属性,判断其是否有女朋友。而本期我们将介绍另外一种有监督的机器学习分类模型----决策树(也可以实现基本的回归),重点介绍决策树的基本原理和实现,并且借助python的sklearn库中的决策树算法实现上述两类数据分类展示。决策树的基本原理想必大家都有疑问,好多机器学习...

weixin_34138192的博客 336

Ollama-OCR实战:5分钟搞定PDF文档转Markdown(附qwen2.5vl模型配置)

本文详细介绍了如何利用Ollama本地部署多模态大模型qwen2.5vl,结合OCR技术,实现PDF文档到Markdown的端到端智能转换。通过解析传统OCR的局限与AI方案的优势,并提供从环境搭建、提示词工程到处理复杂表格的完整实战指南,帮助用户高效构建自动化文档处理流水线,彻底重塑文档处理工作流。

yog99的博客 606

BRep实战指南:从理论到文件格式的全面解析

本文全面解析BRep(边界表示法)从基础概念到文件格式的实战应用。详细介绍了BRep的数学定义、工业应用场景,以及STEP、IGES等主流文件格式的对比与使用技巧,帮助读者掌握三维建模核心技术并优化性能。

weixin_29235923的博客 407

终极指南:8大Python机器学习算法在材料科学中的创新应用实战

在材料科学领域,Python机器学习算法正成为研究人员和工程师的强大工具,帮助加速新材料发现和性能优化。本文将深入探讨8个关键的机器学习算法及其在材料科学中的实际应用场景,为初学者和专业人士提供完整的实战指南。 ## 🎯 机器学习算法在材料科学中的重要性 材料科学涉及复杂的多尺度问题,从原子级结构到宏观性能预测。传统实验方法耗时耗力,而Python机器学习算法能够从大量数据中提取模式,加速材

gitblog_00554的博客 583

小程序结合Three.js与gsap:打造流畅3D动画的完整指南

本文详细介绍了如何在小程序中整合Three.js与GSAP动画库,打造流畅的3D动画效果。通过从环境搭建、基础场景创建到模型加载与复杂动画编排的完整指南,帮助开发者克服小程序性能限制,实现如商品360度展示等沉浸式交互体验,提升产品视觉吸引力。

python9snake的博客 548

机器学习之分类决策树与回归决策树—基于python实现

介绍分类决策树与回归决策树案例

qq_45856698的博客 4354

基于车辆运动学的规划算法 - Hybrid A*/ State Lattice Planning (前置知识:自行车模型、Dubins、Reeds Shepp、多项式曲线、螺旋曲线)

本文将按顺序讲解基于车辆运动学的规划算法,以及需要的前置知识:自行车模型、Dubins和Reeds Shepp曲线、多项式曲线和螺旋曲线

BigDavid123的博客 4860

8,9,10,11,12,13代CPU特制win7 64位系统

对于7代以上的CPU装win7,在UEFI的模式下,如果不提前注入显卡驱动,就会一直卡在LOGO界面。对于此情况,我们推出一个内置了显卡和USB驱动的特制版win7系统。由于单文件已经大于了4G,所以推荐使用rufus来写入镜像安装。如还有问题,请记录下电脑配置,联系QQ11717907。制作完成以后,就可以通过U盘启动安装了。

海康威视技术支持 7252

决策树算法及Python实现

1 什么是决策树 决策树(Decision Tree)是一种基本的分类与回归方法,本文主要讨论分类决策树。决策树模型呈树形结构,在分类问题中,表示基于特征对数据进行分类的过程。它可以认为是if-then规则的集合。每个内部节点表示在属性上的一个测试,每个分支代表一个测试输出,每个叶节点代表一种类别...

Britesun的博客 14万+

4.3 Langfuse 集成实战:追踪 OpenAI、LangChain 和 LangGraph 应用

本文介绍了如何将Langfuse集成到不同类型的AI应用中,包括原生OpenAI、LangChain和LangGraph应用。主要内容包括: 两种集成模式:手动追踪(精确控制)和自动追踪(通过回调机制) 三种应用场景的集成方案: 原生OpenAI应用:使用langfuse.trace()手动记录对话流程、LLM调用和工具执行 LangChain应用:通过LangfuseCallbackHandler自动追踪Agent执行过程 LangGraph应用:与LangChain相同的自动追踪方式,可可视化节点和状态

yonggeit的博客 3303

【sklearn入门】决策树在sklearn中的实现--实战红酒分类案例

scikit-learn简介 scikit-learn,又写作sklearn,是一个开源的基于python语言的机器学习工具包。它通过NumPy, SciPy和 Matplotlib等python数值计算的库实现高效的算法应用,并且涵盖了几乎所有主流机器学习算法。 http://scikit-learn.org/stable/index.html 在工...

yxc9681的博客 2万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

用python构建线性回归和决策树模型实现房价预测

国家整体经济水平的不断提高和人们生活质量的提升,刺激着房屋价格也在不断的上涨。房价是由多个因素决定的,比如国家的宏观调控、居民人均可支配收入、房地产开发投资、住宅销售面积等,这些因素都影响着房价的走势。未来房价走势如何成为人们关心的热点,本文用Python构建线性回归和决策数模型实现房价的预测。

ziyin_2013的博客 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

用 Python 实现 Gini 决策树分类与可视化-机器学习

本文通过 “环境准备→数据生成→模型训练→可视化” 的完整流程,实现了基于 Gini 指标的决策树分类与可视化。Graphviz 需双重安装:必须同时安装 “核心程序” 和 Python 的graphviz库;数据生成符合题目要求:X 为 100×4 随机矩阵,Y 为二分类标签(含大于 2 的样本);决策树参数可控:通过criterion='gini’和max_depth=3实现题目要求;结果可验证:通过打印数据信息和图片路径,确保每一步可追溯。

m0_54846764的博客 1108

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 【机器学习+python(7)】手动获取随机数据
下一篇: 【机器学习+python(9)】回归决策树
哈希大数据
博客等级 码龄9年 331粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值