• Python每日一练——第44天:大厂真题练习


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



    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、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等
      在这里插入图片描述
      在这里插入图片描述
  • 相关阅读:
    Ubuntu22.04虚拟机配置双网
    C51--单片机中断
    Spring整合Web环境
    pytest实战练习
    QT源码拾贝0-5(qimage和qpainter)
    C语言 输入输出
    c++实现建造者模式
    计算机毕业设计之java+ssm某地区精准扶贫网站
    药物从研发到上市需要经历哪些流程?||新药研发
    航空货运数据挖掘那些事|航班换季
  • 原文地址:https://blog.csdn.net/yuan2019035055/article/details/127658459