码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python每日一练——第44天:大厂真题练习


    文章目录

    • 1. 决策树的生成与训练-信息熵的计算
    • 2. 使用梯度下降对逻辑回归进行训练
    • 《100天精通Python》专栏推荐白嫖80g Python全栈视频

    废话少说速度上号刷题卷起来



    1. 决策树的生成与训练-信息熵的计算

    描述:
    决策树是非常经典的机器学习模型,以决策树为基模型的集成学习模型(XGBoost、GBDT 等)在工业界得到了极为广泛的应用。决策树有三种常见的启发式生成标准,信息增益就是其中之一。计算某一特征的信息增益主要分为两步,第一步是计算数据集的信息熵,信息熵可以表示为,其中代表的是属于某一类的样本个数,D 是整个数据集的样本数量,K 为类别数量。第二步是根据信息熵计算每个特征的经验条件熵。特征的信息增益即为信息熵和经验条件熵的差。现有一数据集,有 4 个特征,分别为教育程度、是否有车、是否有正式工作和征信情况,通过这 4 个特征决策是否予以审批信用卡,数据已经通过 dataSet 给出。其中 dataSet 每行的前 4 列依次代表上述特征的取值,最后一列代表对应的 label 标签。
要求实现 calcInfoEnt 功能,数据集从当前路径下 dataSet.csv读取,计算在给定数据集的情况下,数据集的信息熵,信息熵用 infoEnt 进行表示,数据类型为 float,将 infoEnt 作为函数返回值。计算逻辑参考题目描述中给出的公式。
其中dataSet.csv的示例数据集如下所示:

    其中dataSet.csv的示例数据集如下所示:

    在这里插入图片描述

    实现代码:

    # -*- coding: UTF-8 -*-
    from math import log
    import pandas as pd
     
    dataSet = pd.read_csv('dataSet.csv', header=None)
     
    def calcInfoEnt(dataSet):
        # 数据集的样本数量 D
        numEntres = len(dataSet)
        #code start here
        # 样本类别分组
        label = dataSet.iloc[:,-1].value_counts()
         
        infoEnt = 0.0
        for i in label.index:
            # Pi
            Pi = label[i]/numEntres
            # H(D)
            infoEnt = infoEnt - Pi * log(Pi, 2)
             
        return infoEnt
        #code end here
        #返回值 infoEnt 为数据集的信息熵,表示为 float 类型
         
    if __name__ == '__main__':
        print(calcInfoEnt(dataSet))
        #输出为当前数据集的信息熵
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    运行结果:
    在这里插入图片描述



    2. 使用梯度下降对逻辑回归进行训练

    描述:
    在这里插入图片描述

    实现代码:

    import numpy as np
    import pandas as pd
    
    def generate_data():
        datasets = pd.read_csv('dataSet.csv', header=None).values.tolist()
        labels = pd.read_csv('labels.csv', header=None).values.tolist()
        return datasets, labels
    def sigmoid(X):
        #补全 sigmoid 函数功能
        #code start here
        s = 1/(1+np.exp(-X))
        return s
        #code end here
    def gradientDescent(dataMatIn, classLabels):
        alpha = 0.001  # 学习率,也就是题目描述中的 α
        iteration_nums = 100  # 迭代次数,也就是for循环的次数
        dataMatrix = np.mat(dataMatIn) 
        labelMat = np.mat(classLabels).transpose() 
        m, n = np.shape(dataMatrix)  # 返回dataMatrix的大小。m为行数,n为列数。
        weight_mat = np.ones((n, 1)) #初始化权重矩阵
        #iteration_nums 即为循环的迭代次数
        #请在代码完善部分注意矩阵乘法的维度,使用梯度下降矢量化公式
        #code start here
        for i in range(iteration_nums):
            error = sigmoid(dataMatrix*weight_mat)-labelMat
            weight_mat=weight_mat-alpha*dataMatrix.transpose()*error
        
        return weight_mat
    
        #code end here
    if __name__ == '__main__':
        dataMat, labelMat = generate_data()
        print(gradientDescent(dataMat, labelMat))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    运行结果:

    在这里插入图片描述


    《100天精通Python》专栏推荐白嫖80g Python全栈视频

    《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html

    • 优点:订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)!
    • 专栏福利:简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等
      在这里插入图片描述
      在这里插入图片描述
  • 相关阅读:
    使用GPU搭建支持玛雅(Maya)和Adobe AI,DW,PS的职校云计算机房
    第十届蓝桥杯大赛Python组省赛
    《JavaEE》HTTPS
    货币银行学重点汇总
    前端二倍图
    0033【Edabit ★☆☆☆☆☆】【字符串表达式计算器】Miserable Parody of a Calculator
    程序员的浪漫:如何用java代码画❤️表白呢?
    java计算机毕业设计高校贫困生信息管理系统源码+mysql数据库+系统+lw文档+部署
    catkin_make 常用参数
    Ubuntu 20.04系统中Sage(sagemath)安装及使用详细过程
  • 原文地址:https://blog.csdn.net/yuan2019035055/article/details/127658459
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号