Python机器学习:决策树1

这篇具有很好参考价值的文章主要介绍了Python机器学习:决策树1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

昨天学习了KNN,今天来看到决策树,这是一种常用的机器学习算法,回归和分类都可以使用,我看着书上的示例,感觉这个和switch或者连续的if、else条件这些控制流一样:

Python机器学习:决策树1
图1:简单决策树示例

 它其实是很朴素的思想:有一个集合,其中的每个样本由若干个属性构成,那么决策树就是通过贪心策略来挑选最优属性,对于离散属性,就用不同的属性值作为节点,对于连续属性,就用属性的特定分割点来作为节点,每个样本划分到不同的子树中去,再在各个子树上通过递归对子树上的样本进行划分,知道满足一定条件为止,他有着很强的数据拟合能力,往往产生过拟合现象,所以要对决策树进行剪枝,以减小复杂度,提高泛化能力,常用的算法有:ID3、C4.5、CART算法等。

其实看到上面那个图,我就想着小小的试验一下,当然不是算法,就是简单的控制流:

#include<iostream>
using namespace std;
struct node
{
    int age;
    int color;
    int smell; 
};
int main(){
    node appletest[3];
    cout<<"input tester:"<<endl;
    for(int i=0;i<3;i++){
    cout<<"input tester "<<i<<"'s age:";
    cin>>appletest[i].age;
    cout<<"input tester "<<i<<"'s color:";
    cin>>appletest[i].color;
    cout<<"input tester "<<i<<"'s smell:";
    cin>>appletest[i].smell;
    }
    cout<<"start "<<endl;
// 1是最好的,2是一般,3是不好
    for(int i=0;i<3;i++){
        if (appletest[i].age<10)
        {
            if (appletest[i].color==1)
            {
                if (appletest[i].smell==1)
                {
                    cout<<"apple "<<i<<"is great"<<endl;
                }
                else if(appletest[i].smell==2){
                    cout<<"apple "<<i<<"not really great"<<endl;
                }
                else{
                    cout<<"apple "<<i<<"is bad"<<endl;
                }
                
            }
            else if(appletest[i].color==2){
                if (appletest[i].smell==1)
                {
                    cout<<"apple "<<i<<"is great"<<endl;
                }
                else if(appletest[i].smell==2){
                    cout<<"apple "<<i<<"not really great"<<endl;
                }
                else{
                    cout<<"apple "<<i<<"is bad"<<endl;
                }
            }
            else{
                if (appletest[i].smell==1)
                {
                    cout<<"apple "<<i<<"is great"<<endl;
                }
                else if(appletest[i].smell==2){
                    cout<<"apple "<<i<<"not really great"<<endl;
                }
                else{
                    cout<<"apple "<<i<<"is bad"<<endl;
                }
            }
        }
        else if(appletest[i].age>=10&&appletest[i].age<25){
            if (appletest[i].color==1)
            {
                if (appletest[i].smell==1)
                {
                    cout<<"apple "<<i<<"is great"<<endl;
                }
                else if(appletest[i].smell==2){
                    cout<<"apple "<<i<<"not really great"<<endl;
                }
                else{
                    cout<<"apple "<<i<<"is bad"<<endl;
                }
                
            }
            else if(appletest[i].color==2){
                if (appletest[i].smell==1)
                {
                    cout<<"apple "<<i<<"is great"<<endl;
                }
                else if(appletest[i].smell==2){
                    cout<<"apple "<<i<<"not really great"<<endl;
                }
                else{
                    cout<<"apple "<<i<<"is bad"<<endl;
                }
            }
            else{
                if (appletest[i].smell==1)
                {
                    cout<<"apple "<<i<<"is great"<<endl;
                }
                else if(appletest[i].smell==2){
                    cout<<"apple "<<i<<"not really great"<<endl;
                }
                else{
                    cout<<"apple "<<i<<"is bad"<<endl;
                }
            }
        }
       else{
            if (appletest[i].color==1)
            {
                if (appletest[i].smell==1)
                {
                    cout<<"apple "<<i<<"is great"<<endl;
                }
                else if(appletest[i].smell==2){
                    cout<<"apple "<<i<<"not really great"<<endl;
                }
                else{
                    cout<<"apple "<<i<<"is bad"<<endl;
                }
                
            }
            else if(appletest[i].color==2){
                if (appletest[i].smell==1)
                {
                    cout<<"apple "<<i<<"is great"<<endl;
                }
                else if(appletest[i].smell==2){
                    cout<<"apple "<<i<<"not really great"<<endl;
                }
                else{
                    cout<<"apple "<<i<<"is bad"<<endl;
                }
            }
            else{
                if (appletest[i].smell==1)
                {
                    cout<<"apple "<<i<<"is great"<<endl;
                }
                else if(appletest[i].smell==2){
                    cout<<"apple "<<i<<"not really great"<<endl;
                }
                else{
                    cout<<"apple "<<i<<"is bad"<<endl;
                }
            }
        }
    }
    return 0;
}
Python机器学习:决策树1
图2:结果

很长,很繁琐,看来还得是用算法才行,不过,感谢前人积淀,有很多算法供我们使用,真好!

一、特征属性:

要构建一棵决策树,关键就在于每次划分子树的时候,选择哪个属性特征进行划分,信息论中,我们用熵来描述随机变量分布的不确定性,对于离散型随机变量X,假设有n个取值,分别是:我们用频率来表示概率,随机变量的概率分布为:

那么,X的熵,就是p的熵,定义为:

那么,在给定离散型随机变量(X,Y),假设X和Y的取值个数分别是n和m,那么其联合分布律为:

边缘分布率为:

给定X条件下Y的条件熵:

根据上面的定义,我们引入信息增益的概念,信息增益最早用于决策树模型的特征选择指标,就是ID3算法的核心,对于给定样本集合,设,是数据集中任一属性变量,其中表示该属性的可能取值,对使用属性进行数据集划分获得的信息增益进行定义:

其中表示属性取值为时的样本子集,是对应的样本数目,是中标签为的样本数目 。

好了,今天就学到这里吧,早上起床有点迟了,电脑没油了,先不写了文章来源地址https://www.toymoban.com/news/detail-400336.html

到了这里,关于Python机器学习:决策树1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习:回归决策树(Python)

    square_error_utils.py test_decision_tree_R.py

    2024年02月21日
    浏览(40)
  • python机器学习:决策树详解

    决策时(Decislon Tree)是一种非参数的 有监督学习方法 ,它能够从一系列有特征和标签的数据中总结出决策规则。并用树状图的结构来呈现这些规则,**以解决分类和回归问题。**决策树算法的本质是一种图结构, 我们只需要问一系列问题就可以对数据进行分类。 举例:动物类

    2024年02月01日
    浏览(48)
  • Sql Server获取表中今天、昨天、本周、上周、本月、上月等数据

    DATEDIFF ( datepart , startdate , enddate ) 释义:计算时间差 datepare值:year | quarter | month | week | day | hour | minute | second | millisecond startdate:开始日期 enddate :结束日期 GetDate() --用法 select datediff(year, 开始日期,结束日期); --(结束日期-开始日期)间隔年 select datediff(quarter, 开始日期,结束

    2024年02月10日
    浏览(45)
  • Python 机器学习入门 - - 决策树算法学习笔记

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ChatGPT一问世就给整个社会带来巨大的震撼和冲击,不禁让人惊叹现在AI的强大,我们好像离通用人工智能更近一步。在过去十几年人工智能领域的蓬勃发展中,扮演着主导地位的算法基本都是神经网络和

    2023年04月08日
    浏览(42)
  • 【Python机器学习】实验09 决策树

    1.分类决策树模型是表示基于特征对实例进行分类的树形结构。决策树可以转换成一个 if-then 规则的集合,也可以看作是定义在特征空间划分上的类的条件概率分布。 2.决策树学习旨在构建一个与训练数据拟合很好,并且复杂度小的决策树。因为从可能的决策树中直接选取

    2024年02月12日
    浏览(33)
  • 【Python机器学习】理论知识:决策树

    决策树是广泛用于分类和回归任务的模型,本质上是从一层层if/else问题中进行学习,并得出结论。这些问题类似于“是不是”中可能问到的问题。 决策树的每个结点代表一个问题或一个包含答案的终结点(叶结点)。树的边奖问题的答案与将问的下一个问题连接起来。 用机

    2024年02月01日
    浏览(87)
  • 【Python机器学习】实验08 决策树

    1.分类决策树模型是表示基于特征对实例进行分类的树形结构。决策树可以转换成一个 if-then 规则的集合,也可以看作是定义在特征空间划分上的类的条件概率分布。 2.决策树学习旨在构建一个与训练数据拟合很好,并且复杂度小的决策树。因为从可能的决策树中直接选取

    2024年02月14日
    浏览(33)
  • 【机器学习实战】决策树 python代码实现

    优点:计算复杂度不高 输出结果易于理解 对中间值的缺失不敏感,可以处理不相关的特征数据 缺点:可能会产生过度匹配的问题 适用数据类型 数据型和标称型 一般流程: 收集数据 准备数据 分析数据 训练算法 测试算法 使用算法 数据重新加载的问题 代码实现 实现截图

    2024年02月05日
    浏览(37)
  • 帝国CMS灵动标签调用昨天、今天、某天、某天以前、某天以后发布的文章

    昨天发布的10篇文章 调用2020-01-30的10篇文章 [e:loop={\\\'news\\\',10,18,0,\\\'newstime=\\\'.to_time(\\\'2020-01-30 00:00:01\\\').\\\' and newstime=$bqr[title]? [/e:loop] 调用除今天以前的10篇文章 [e:loop={0,10,3,0,\\\'newstime=$bqno?、=$bqr[\\\'title\\\']?=date(\\\'Y-m-d\\\',$bqr[newstime])? [/e:loop] 调用2020-01-30以前的10篇文章 [e:loop={0,10,3,0,\\\'newstime=$bq

    2024年02月03日
    浏览(52)
  • 微信小程序TDesign封装的时间选择器,可以选中今天、昨天、上周、上月等功能

    微信小程序TDesign封装的日期选择器 可以选中今天、昨天、上周、上月等功能。 确定返回日期时,会判断时间戳大小,返回createdTime,endTime 组件图片展示 父组件使用组件 组件wxml 组件wxss 组件JSON 组件js

    2024年02月15日
    浏览(84)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包