当前位置: 首页 > news >正文

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

在这里插入图片描述

文章目录

  • 1. 理论基础
    • 1.1 变量识别
    • 1.2 变量分析
      • 1.2.1 单变量分析
      • 1.2.2 多变量分析
      • 1.2.3 缺失值、异常值处理
      • 1.2.4 变量转换
        • 衍生变量
        • 改善变量分布的转换
        • 分箱操作(特征离散化)
        • 数据的标准化
      • 1.2.5 筛选有效变量
        • 皮尔逊相关性算法
        • R平方
        • 卡方检验
        • IO、WOE
        • PCA
        • 建模算法
  • 2. 赛题数据探索
    • 2.1 信息查看与统计
    • 2.2 可视化数据分布
      • 2.1 箱形图
      • 2.2 获取异常数据并画图
      • 2.3 直方图和Q-Q图
      • 2.4 KDE分布图
      • 2.5 线性回归关系图
    • 2.3 特征变量相关性分析

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()

训练集:

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

测试集:

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

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

print(train_data.describe())

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

2.2 可视化数据分布

2.1 箱形图

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

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

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)

运行结果如下:

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]

图: 暂略

2.3 直方图和Q-Q图

2.4 KDE分布图

2.5 线性回归关系图

2.3 特征变量相关性分析

相关文章:

  • Android识别字符串中的简体和繁体字
  • ie11浏览器兼容性报错app.js script1003 缺少:
  • 资源管理器占用CPU过高的解决方法
  • (附源码)ssm高校实验室 毕业设计 800008
  • [CISCN2019 华东南赛区]Web4
  • 聚苯乙烯微球载金属纳米粒子/中空结构聚苯乙烯纳米微球/间隔臂羧化聚苯乙烯微球的研究
  • 软硬件一体,利尔达芯智行创新智能电摩解决方案
  • 【元宇宙欧米说】个人创作者的NFT探索之路
  • Kaggle官方·数据科学比赛经验集;百度开源·飞桨图像数据标注高效工具;C++并发编程实践第2版·笔记;前沿论文 | ShowMeAI资讯日报
  • JavaScript常用数组元素搜索或过滤的四种方法
  • java计算机毕业设计无极服装出租管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  • 【算法题解】Codeforces Round #817 (Div. 4)题解
  • 【打工人摸鱼系列】python做皮卡丘桌宠,工作都有效率了呢
  • 手写模拟spring扫描底层实现
  • 照片拼图软件哪个好?快来看看这几个软件
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • ES6 ...操作符
  • es6(二):字符串的扩展
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Java方法详解
  • Rancher如何对接Ceph-RBD块存储
  • 当SetTimeout遇到了字符串
  • 入口文件开始,分析Vue源码实现
  • 深度学习入门:10门免费线上课程推荐
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #{} 和 ${}区别
  • #define
  • #include到底该写在哪
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #Ubuntu(修改root信息)
  • #每天一道面试题# 什么是MySQL的回表查询
  • (02)vite环境变量配置
  • (2015)JS ES6 必知的十个 特性
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (过滤器)Filter和(监听器)listener
  • (三)Honghu Cloud云架构一定时调度平台
  • (转)Google的Objective-C编码规范
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • ::
  • @基于大模型的旅游路线推荐方案
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [ 第一章] JavaScript 简史
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [Android]创建TabBar
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬
  • [BZOJ1178][Apio2009]CONVENTION会议中心