• Python ML实战-工业蒸汽量预测02-数据探索


    在这里插入图片描述

    1. 理论基础

    1.1 变量识别

    变量识别就是对数据从变量类型、数据类型等方面进行分析,常见的我们可以分为:

    1. 特征变量、标签(目标)变量
    2. 自变量、因变量
    3. 连续型变量、类别型变量

    1.2 变量分析

    1.2.1 单变量分析

    对于连续型变量,需要统计数据的中心分布趋势和变量的分布。
    对于类别型变量,一般使用频次或占比表示每一个类别的分布情况,对应的衡量指标分别是类别变量的频次和频率(占比),可以用柱形图来表示可视化分布情况。

    1.2.2 多变量分析

    多变量分析可以发现变量之间的关系。
    通常我们可以对多个变量之间可以分析共线性关系、相关性关系、线性关系、非线性关系。

    1.2.3 缺失值、异常值处理

    影响训练结果的脏数据比如缺失值、异常值、噪声等非正常的数据,我们可以适当的根据场景进行处理。
    比如对于缺失值的处理,我们可以根据情况进行删除、给默认值、均值、预测的值等等处理。
    对于异常的值:通常讲偏离整个样本总体的观测值称为异常值,我们有多种方法进行检测,比如箱线图处理、直方图、散点图等等可视化的方式进行检测。异常值的处理一般采用删除、转换、填充、区别对待等方法进行处理。

    1.2.4 变量转换

    经过适当的数据转换后,模型的效果常常有很明显的提升。–这个在比赛中后期尤为关键,数据层面算法层面大家优化的差不多的了,后面就是从特征上发力。
    而由于原始数据比如区间型变量的分布不光滑(或有噪声)、不对称分布,也使得数据转化/特征转化成为一种必需的技术手段。

    在这里插入图片描述

    衍生变量
    1. 产生更加具有商业意义的新变量
    2. 衍生变量的产生在于业务熟悉程度和对项目思路的掌控程度
    3. 记住下面一个例子
      在这里插入图片描述
    改善变量分布的转换

    区间型变量原始的分布状态偏差都较大,而且严重不对称,这种问题非常干扰模型的拟合,且影响模型的效果和效率,但可以通过各种数据转换,使得自变量的分布呈现(或者近似)正太分布,那么对于对于模型的拟合常常会有明显的提升,且转换后的变量预测性能和准确率也能得到提升。
    在这里插入图片描述
    重新改变量纲后:

    在这里插入图片描述

    分箱操作(特征离散化

    目的

    1. 努力提升自变量的预测能力
    2. 强化自变量与因变量的相关性

    连续型特征离散化 (有聚类算法

    特征离散化相关算法:
    无监督: 聚类;等宽;等频法
    有监督: 基于信息熵的方法;基于卡方的方法
    在这里插入图片描述
    另一种表达:
    连续型特征离散化
    离散化原因:
    1、离散化特征算法模型需要:
    比如逻辑回归、决策树、朴素贝叶斯等算法,都是基于离散型的数据展开的。如果要使用该类算法,必须将离散型的数据进行。有效的离散化能减小算法的时间和空间开销,提高系统对样本的分类聚类能力和抗噪声能力。

    2、离散化的特征相对于连续型特征更易理解,更接近知识层面的表达
    比如薪水

    3、可以有效的克服数据中隐藏的缺陷,使模型结果更加稳定

    在这里插入图片描述

    数据的标准化

    使得不同的变量统一量纲,可以有平等分析和比较的基础

    在这里插入图片描述

    1.2.5 筛选有效变量

    主要是解决1. 共线性问题 2.过拟合问题 3. 效率问题
    在这里插入图片描述
    筛选算法:皮尔逊相关性算法; R^2

    皮尔逊相关性算法

    在这里插入图片描述

    R平方

    使用多元回归的分析算法来判断和选择对目标变量有重要预测意义及价值的自变量
    在这里插入图片描述
    SSE:误差平方和
    SST: 总和方差
    SSR: 回归偏差
    SST = SSE + SSR

    公式记忆:
    R^2 = 1- 误差平方和/总的方差
    1- 误差和/方差和

    卡方检验

    在这里插入图片描述

    IO、WOE

    pass

    PCA

    pass

    建模算法

    直接RF, XGBOOST

    2. 赛题数据探索

    2.1 信息查看与统计

    查看训练集;测试集:

    import numpy as np
    import pandas as pd
    
    train_file = "./zhengqi_train.txt"
    test_file = "./zhengqi_test.txt"
    
    train_data = pd.read_csv(train_file, sep='\t', encoding = 'utf-8')
    test_data = pd.read_csv(test_file, sep='\t', encoding = 'utf-8')
    
    # train_data.info()
    
    test_data.info()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    训练集:

    RangeIndex: 2888 entries, 0 to 2887
    Data columns (total 39 columns):
     #   Column  Non-Null Count  Dtype  
    ---  ------  --------------  -----  
     0   V0      2888 non-null   float64
     1   V1      2888 non-null   float64
     2   V2      2888 non-null   float64
     3   V3      2888 non-null   float64
     4   V4      2888 non-null   float64
     5   V5      2888 non-null   float64
     6   V6      2888 non-null   float64
     7   V7      2888 non-null   float64
     8   V8      2888 non-null   float64
     9   V9      2888 non-null   float64
     10  V10     2888 non-null   float64
     11  V11     2888 non-null   float64
     12  V12     2888 non-null   float64
     13  V13     2888 non-null   float64
     14  V14     2888 non-null   float64
     15  V15     2888 non-null   float64
     16  V16     2888 non-null   float64
     17  V17     2888 non-null   float64
     18  V18     2888 non-null   float64
     19  V19     2888 non-null   float64
     20  V20     2888 non-null   float64
     21  V21     2888 non-null   float64
     22  V22     2888 non-null   float64
     23  V23     2888 non-null   float64
     24  V24     2888 non-null   float64
     25  V25     2888 non-null   float64
     26  V26     2888 non-null   float64
     27  V27     2888 non-null   float64
     28  V28     2888 non-null   float64
     29  V29     2888 non-null   float64
     30  V30     2888 non-null   float64
     31  V31     2888 non-null   float64
     32  V32     2888 non-null   float64
     33  V33     2888 non-null   float64
     34  V34     2888 non-null   float64
     35  V35     2888 non-null   float64
     36  V36     2888 non-null   float64
     37  V37     2888 non-null   float64
     38  target  2888 non-null   float64
    dtypes: float64(39)
    memory usage: 880.1 KB
    
    • 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
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    测试集:

    RangeIndex: 1925 entries, 0 to 1924
    Data columns (total 38 columns):
     #   Column  Non-Null Count  Dtype  
    ---  ------  --------------  -----  
     0   V0      1925 non-null   float64
     1   V1      1925 non-null   float64
     2   V2      1925 non-null   float64
     3   V3      1925 non-null   float64
     4   V4      1925 non-null   float64
     5   V5      1925 non-null   float64
     6   V6      1925 non-null   float64
     7   V7      1925 non-null   float64
     8   V8      1925 non-null   float64
     9   V9      1925 non-null   float64
     10  V10     1925 non-null   float64
     11  V11     1925 non-null   float64
     12  V12     1925 non-null   float64
     13  V13     1925 non-null   float64
     14  V14     1925 non-null   float64
     15  V15     1925 non-null   float64
     16  V16     1925 non-null   float64
     17  V17     1925 non-null   float64
     18  V18     1925 non-null   float64
     19  V19     1925 non-null   float64
     20  V20     1925 non-null   float64
     21  V21     1925 non-null   float64
     22  V22     1925 non-null   float64
     23  V23     1925 non-null   float64
     24  V24     1925 non-null   float64
     25  V25     1925 non-null   float64
     26  V26     1925 non-null   float64
     27  V27     1925 non-null   float64
     28  V28     1925 non-null   float64
     29  V29     1925 non-null   float64
     30  V30     1925 non-null   float64
     31  V31     1925 non-null   float64
     32  V32     1925 non-null   float64
     33  V33     1925 non-null   float64
     34  V34     1925 non-null   float64
     35  V35     1925 non-null   float64
     36  V36     1925 non-null   float64
     37  V37     1925 non-null   float64
    dtypes: float64(38)
    memory usage: 571.6 KB
    
    • 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
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    使用以下命令查看统计结果eg:

    print(train_data.describe())
    
    • 1

    在这里插入图片描述
    可以得到样本数;数据的均值;标准差;最小值;最大值等信息

    2.2 可视化数据分布

    2.1 箱形图

    sns.boxplot(x=train_data['V0'], orient="V", width=1)
    plt.show()
    
    • 1
    • 2

    在这里插入图片描述
    从图中可以看住有偏离值,许多数据点位于四分位点以下。

    2.2 获取异常数据并画图

    此方法可以采用模型预测的形式找出异常值,eg:通过岭回归模型找出异常值,并绘制器分布

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    from scipy import stats
    
    train_file = "./zhengqi_train.txt"
    test_file = "./zhengqi_test.txt"
    
    train_data = pd.read_csv(train_file, sep='\t', encoding = 'utf-8')
    test_data = pd.read_csv(test_file, sep='\t', encoding = 'utf-8')
    
    # train_data.info()
    # test_data.info()
    
    # train_data.max()
    # train_data.describe(percentiles=None, include=None, exclude=None)
    # print(train_data.describe())
    
    
    # sns.boxplot(x=train_data['V0'], orient="V", width=1)
    # plt.show()
    
    def find_outliers(model, x, y, sigma=3):
        try:
            y_pred = pd.Series(model.predict(x), index=y.index)
        except:
            model.fit(x,y)
            y_pred = pd.Series(model.predict(x), index=y.index)
        resid = y - y_pred
        mean_resid = resid.mean()
        std_redsid = resid.std()
    
        z = (resid - mean_resid)/std_redsid
        outliers = z[abs(z)>sigma].index
    
        print('R2=',model.score(x,y))
        print('mse=',mean_squared_error(y,y_pred))
        print('--------------------------------')
        print('mean of residuals:', mean_resid)
        print('std of residuals:', std_redsid)
        print('--------------------------------')
        print(len(outliers), 'outliers:')
        print(outliers.tolist())
    
    from sklearn.linear_model import Ridge
    from sklearn.metrics import mean_squared_error
    
    x_train = train_data.iloc[:,0:-1]
    y_train = train_data.iloc[:,-1]
    outliers = find_outliers(Ridge(), x_train, y_train)
    
    
    • 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
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    运行结果如下:

    R2= 0.8890858938210386
    mse= 0.10734857773123632
    --------------------------------
    mean of residuals: -2.3065575303846744e-19
    std of residuals: 0.32769766731934985
    --------------------------------
    31 outliers:
    [321, 348, 376, 777, 884, 1145, 1164, 1310, 1458, 1466, 1484, 1523, 1704, 1874, 1879, 1979, 2002, 2279, 2528, 2620, 2645, 2647, 2667, 2668, 2669, 2696, 2767, 2769, 2807, 2842, 2863]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    图: 暂略

    2.3 直方图和Q-Q图

    2.4 KDE分布图

    2.5 线性回归关系图

    2.3 特征变量相关性分析

  • 相关阅读:
    LeetCode236. Lowest Common Ancestor of a Binary Tree
    uniapp 下拉框数据回显的问题
    产品经理书籍推荐
    win10 安装openssl并使用openssl创建自签名证书
    JavaWeb篇_10——HttpServletRequest对象
    442 - Matrix Chain Multiplication (UVA)
    【LeetCode力扣】189 53 轮转数组 | 最大子数组和
    Centos下自定义安装java环境以及环境变量配置
    解决SAP业务问题的思考——逆向思维
    Spring Security 的 HttpBasic模式 活该被放弃
  • 原文地址:https://blog.csdn.net/qq_31557939/article/details/126614920