数据分析和处理,其实就是你计算模型前的预处理步骤。一个不合理的错误数据如果不在预处理的时候剔除,可能会对最终结果造成非常大的影响

在很多时候,如果你换了能换的所有模型和参数,最后计算得到的模型的交叉验证误差一直不令人满意,非常可能是你的数据预处理没做好。

数据分析与处理是紧密相关的,这像是句废话,因为你既然分析到了数据不合理的地方自然是要进行相关处理的。

但可能是我还太菜,有时候比如你分析到了数据分布非正态化(即数值的count不是理想化的分布的时候),即使采用log/sin/cos/reciprocal transformation,也不一定就可以直接得到理想的高斯分布,例如我做课程设计的时候会遇到log transformation之后数据还是出现偏态分布的情况。

至于是否可以将transformation复合使用得到最理想的分布情况,就有待大神解答,我个人猜想太纠结这个也可能会引起过拟合(overfitting)

本文假设你现在在kaggle上面对一个数据集,想通过train set得到模型。

首先要对数据集的总体有个了解,就是summary:

import pandas as pd
import numpy as npdf=pd.read_csv('./train.csv')df.shape#看看数据集有几行几列df.dtypes#看看每列的数据类型是什么df.head()#看看前几列数据,对数据具体长啥球样有个概念

那么预处理目前我总结的有:

1. 缺失值

df_train.isnull().sum(axis=0)

这个就俗称靠常识吧我觉得,首先是了解数据集的场景,可能看kaggle里面的说明description。

有些null值可能是二元分类的变量值,比方说,加入Boston数据集(一个公开的Boston房价的数据集)有一列是这个房子有没有花园,那可能’yes‘他就填了个1,’no‘他就干脆不写了,这个时候null值就要填充0,之后或许还对这一列做encoding。

还有可能某一列是连续的值(非离散的),只是0的时候他没写,那这时候对null填充0就非常必要。

不过有时候一些数据就是缺少信息,这时候就考虑要不要把这一个object删掉了

2. 独热编码(One hot encoding)

这个东西感觉还是很有东西的,而且我也还在学习中,可能说的不对。

主要的思想其实是把某列不可用数值表示的列做成数列二元变量(yes or not)。

比如,我做过一个共享单车实时出租量的kaggle,其中有一列是当前的季节,他分别用1、2、3、4表示春夏秋冬。

但我们实际上可以想到,春夏秋冬是四个相对独立的情况,是不宜使用1、2、3、4来表示的,这样数值化之后模型可能会认为 " 冬>春 ”, " 冬=2*夏 ”等等很不合理的情况。

这时候我们可以把季节这一列分为四列,分别为“是否为春/夏/秋/冬” ,数值就可以用1表示是,0表示不是,进行二元分类。

不过这个在树模型里面好像不是很敏感,(我也还没完全理解)或许是随机森林、Boost类的模型在各结点分到child node的时候,看到这列都是1、2、3、4会自动识别为4个元的分类??希望大神解答一下。但我感觉逻辑回归的时候还是有影响的。

3. Outliers,干扰项

非常直观地重要,换句话说,其实就是鉴别哪些object应该被剔除。

你想想如果有个object其实是个不合理的数据,你的模型还想方设法去fit这个对象,可想而知这个模型可能就会因为这几颗老鼠屎而毁掉了。

我理解,剔除outliers分为两种:一种是预处理期间的剔除;一种是得到模型后,根据残差的分布模型去检验outliers。

这篇先说预处理的剔除outliers吧。

我接触过两种方式:

一种是高斯分布图(histogram)

我们生活其实正态分布非常常见,比如你掷10000次硬币,重复1000次“掷10000次硬币”这个行为(当然没人这么闲,是个假设)。

根据结果建立一个“横坐标是正面的次数,纵坐标是1000次循环中出现的次数”。

简单想象一下,最符合理想模型的其实是个正态分布,在这个分布图中,横坐标是5000的对应值应该是最高的,因为概率55开。

这时候如果你发现画出来后,分布图前半段好好的,但是出现了好几次“10000次都是正面的”的情况,就是横坐标为10000的样本出现了好几个。

于是你怀疑是你自己在那几个循环里面数晕了,看什么都是正面,因为这几个情况非常的不合情理,所以应该把他们剔除掉。

在实际项目中,对预测值做高斯分布图,如果横坐标的高位值拉的很远,明明前面的分布到了100左右就接近尾声了,结果横坐标拉到了一万甚至十万,这时候就要考虑这个值是不是不合理了。

一种是箱线图(box plot)

这个我也很好奇为什么可以用来剔除outliers,先留点白,以后来详细解释。

贴学习链接:谷歌前置的box plot技术贴

4. 数据分布(distribution of data)

理想的数据分布常常是正态分布(不过也有一些情况的理想模型泊松分布之类的,比如高速ETC的车流量,这个我印象大一美赛的时候是这么说的)

那如果不是正态分布怎么办呢,那就想办法把他整成正态分布。

方法有:log变化、正反弦变化、倒数变化、平方或平方根变化等等。

整容前:

log变化,整容后:

右边的那幅图是QQ图(quantile-quantile plot),wiki:https://en.wikipedia.org/wiki/Q%E2%80%93Q_plot

调用代码是

from scipy import stats
stats.probplot(df['count'],dist='norm', fit=True)

大体意思就是用来形容分布拟合正态分布的程度的,我还没深入学,我也标记一下,等最近考试完继续,嘻嘻!

5. 变量的共线性(correlation)

Pandas.corr()可以直接计算。

背后算法:

也就是这个这两个系数存在关联的可能性是多大,越接近1或-1,就说明越相关。

例子1:比如还是kaggle共享单车的proj。里头用来预测的变量,已经有了室温,还搞个体感温度,两个变量的corr高达0.98,实属没必要,而且还可能会影响最终结果,所以可以选择剔除体感温度。

例子2:有的时候是一些泄露数据,leakage data,这个也不能被忽视,就是跟预测结果直接相关的数据,这些变量的训练模型的大忌,会使得你的模型完全无意义。比如你预测某商场的客流量,但变量里有个”商场的厕所用水量“,虽然是搞笑,但是你细想就知道这两者是铁钉钉的有联系。我的本意是通过今天的天气,今天是不是工作日,今天的温度等等因素来预测商场的客流量,你都拿厕所用水量预测了,这个预测还有意义吗?这个厕所用水量是跟客流量一起出现的结果,是我们预测事先所不可能知道的。

差不多先到这把,嘻嘻!

学习笔记:数据分析和处理(ML计算模型前的预处理)——持续更新相关推荐

  1. OPENMP学习笔记(1)——简介,模型,运行

    OPENMP学习笔记(1)--简介,模型,运行 简介: OpenMP的英文全称是Open Multiprocessing,一种应用程序接口(API,即Application Program Inter ...

  2. 算法学习笔记:对指定金额计算最少钞票数

    算法学习笔记:对指定金额计算最少钞票数 一.引出问题 财务人员给员工发工资时经常遇到这样一个问题,即根据每个人的工资额(以元作为单位)计算出各种面值的钞票的张数,且要求总张数最少.例如,某职工工资为3 ...

  3. 算法【二叉树】学习笔记 - 已知结点数计算可构建出多少种二叉树

    算法[二叉树]学习笔记 - 已知结点数计算可构建出多少种二叉树 卡特兰数 相关知识点 排列组合公式 排列 Arrangement 组合 Combination 分步计算 简化 参考资料 题目:已知3个 ...

  4. ArcGIS案例学习笔记4_2_城乡规划容积率计算和建筑景观三维动画

    ArcGIS案例学习笔记4_2_城乡规划容积率计算和建筑景观三维动画 概述 计划时间:第4天下午 目的:城市规划容积率计算和建筑三维景观动画 教程: pdf page578 数据:实验数据\Chp13 ...

  5. 学习笔记【Java 虚拟机④】内存模型

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 总目录 学习笔记[Java 虚拟机①]内存结构 学习笔记[Java 虚拟机②]垃圾回收 学习笔记[Java ...

  6. uniapp 学习笔记二十七 购物车总价计算及弹窗交互逻辑完善

    uniapp 学习笔记二十七 购物车总价计算及弹窗交互逻辑完善 uniapp 学习笔记二十七 购物车总价计算及弹窗交互逻辑完善 cart.vue <template><view> ...

  7. Eigen库学习笔记(五)张量计算

    Eigen库学习笔记(五)张量计算 1.规约操作 2.最值与索引 3.按索引取值 Array of indices 4.类似 where的功能,生成mask 5.reshape 改变形状元素个数不变 ...

  8. ITK学习笔记(五) ITK计算质心

    ITK学习笔记(五) ITK计算质心 通过LabelGeometryImageFilter可以求Label Image各个区域的质心和BoundingBox.然而,如果图像的spacing不是1,它并 ...

  9. MATLAB学习笔记3:MATLAB编程基础(前半)

    阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...

最新文章

  1. 2016 大数据版图
  2. Linux 命令:pwd、touch、ll、wget
  3. mybatis delete返回值_面试:谈谈你对MyBatis执行过程之SQL执行过程理解
  4. JavaEE Tutorials (25) - 使用Java EE拦截器
  5. 图:试图播放的文件扩展名与文件格式不匹配。播放该文件可能会导致意外行为...的解决办法
  6. 练习:将从表读出来的时间戳除以1000(java读时间戳会多出3个000)用jackson包 实现...
  7. word里画的流程图怎么全选_word画流程图 Word中绘制流程图的正确姿势,这招大多数人不知道...
  8. Python学习_基础_29_面向对象编程之多态、鸭子类型
  9. 出行即服务(MAAS)框架
  10. 详解Nginx Rewrite标记last和break的区别
  11. html5桌面打开网页是有问号,点击HTML页面问号出现提示框
  12. 沧海的孤塔-chimera
  13. 如何借助大数据技术找到精准客户?
  14. 概率图模型概率模型 及其应用
  15. java计算机毕业设计追星网站源码+数据库+系统+lw文档
  16. 华为ensp,wireshark3.0.0,virtualbox 5.2.22 安装包
  17. 雅诗兰黛将在华投建世界级创新研发中心;霍尼韦尔特性材料和技术集团与七家企业在进博会签约 | 美通企业日报...
  18. 自动记账解析之基本概念
  19. AD18输出BOM表
  20. [全网首发]新东方智慧学习机N1刷入类原生

热门文章

  1. 利用合成图像对热图像进行鲁棒行人检测
  2. 招聘|腾讯机器人实验室语义视觉方向(实习+社招)
  3. 计算机网络——知识结构体系
  4. 如何访问webService接口
  5. 检测单选按钮的值发生变化的事件
  6. cocos2d-js中Hello World代码分析
  7. pl/sql块的基本语法
  8. 网页制作插入新的元素,并且为插入的元素添加事件
  9. 用户权限_SAP 用户权限
  10. map集合遍历_集合框架的部分内容