目录
数据分析(EDA):(为特征筛选准备)
数据分析这一步对整个模型建立有十分重要的意义,数据分析这一步囊括了对变量的分析,从它数据的频数分布、与y的相关联程度、与其他变量的相关性出发,我们可以得到一些结论,这这些结论均指向一点,这个变量如果被选入特征能提供多大的信息量。
对于一开始就可以看出不能提供信息量的,比如说数据全部是相同的值或者缺失值占比十分大的,我们要做好不把它选入特征的准备,因为根据熵的定义,这个变量提供不了信息增益。可以理解为如果按该变量的值进行分类,分类后数据被误分类的概率和分类前差不多。(我们以后在决策树那一章会用图画详细解释信息增益这个概念)
有信息增益的好处用白话解释,就是加入了特征后,预测数据时误判的概率是否会减小。
而对于那些可以提供信息增益的变量,我们需要研究怎么放大它的信息量,例如:有些变量的分布为偏态分布(如下图),这意味着在坐标轴的大部分区域(正偏态的峰值偏右的区域,同负偏态的峰值偏左的区域),值的变化都不大,而在小部分区域值(靠近峰值的区域)才会有比较大的波动。这会产生一个后果,机器对数据变化不那么明显的区域,要找到变量的变化对y的影响是比较困难的。因此,我们可以将数据转换为正态分布,单纯让数据频数的平均落差增大一些,从而利于机器计算。
对于一些提供相同信息的变量,或者信息被另一个变量覆盖的变量而言,我们在选择特征时可能就只选其中信息较大的变量。例如,在相关性分析中(线性相关和非线性相关),我得到两个变量的相关性十分大,如果特征太多我需要削减的话那可以从其中一个变量中选择。
一、数据概览:
1. 数据分布(四分位数、均值、方差、最大值、最小值等) describe:
- a)min max远超过平均值或者中位数,那么可能是有异常值,或者是偏态分布。
- b)train和test的均值、标准差等是否一致,如果不一致说明训练集和测试集的分布不同
分布不同可能需要对训练集进行采样,使其和测试集分布一样,从而达到更好的效果。
2. 数据类型与缺失值 info:
了解数据type,有助于理解除了nan以外的特殊符号异常(object)。
了解缺失值,isnull value_counts,如果出现有的数据特别少,那么它是不具有统计意义的
二、数据分析:(1.看单个变量分布、与y的规律;2.单个变量的统计分布;3.多个变量之间的相关性(不仅限于线性相关)和独立性;4.标签y值的分布)
0. 数据清洗
把所有的变量按照时间数据、类别数据、数值数据分开,单独处理。
- 时间数据:将字符型转换为日期格式数据
- 类别数据:查看缺失值,填补;或者在特征工程那一步做labelEncoder、onehotEncoder时再截断或填充缺失值。
1. 定性分析:(画图)
1.1 分布:
- 时序图:观察是否具有周期性、震荡幅度、
- 直方图、密度分布图:观察数据分布,是否为正态分布。如果不是正态分布,可以用对数变换将偏态分布转换为近似正态分布,但有时用无界约尔逊分布转换更近似于正态分布。
import scipy.stats as st
y = Train_data['price']
plt.figure(1); plt.title('Johnson SU')
sns.distplot(y, kde=False, fit=st.johnsonsu)
plt.figure(2); plt.title('Normal')
sns.distplot(y, kde=False, fit=st.norm)
plt.figure(3); plt.title('Log Normal')
sns.distplot(y, kde=False, fit=st.lognorm)
- 箱型图:便于查看异常情况。上限和下线分别为Q3+1.5(Q3-Q1),Q1-1.5(Q3-Q1),这个异常值的临界点到底距离四分位点多远是由我们决定的。(箱型图就是把一个字段的所有值都打在一个该字段的x值上,然后我们画一些辅助的线段来区分出这些值的中位数、上下四分位数,连起来就形成了箱型图)
- 小提琴图:进阶的箱型图,可以看到数据分布的频率。(就是对箱型图中的这些离散点估计出概率密度函数,是连续变量,通过有限个样本点去估计概率密度分布用核密度估计)
hue表示对数据再进行分类,观察分类后数据在每一类中的概率密度分布。
小提琴图的分支:
1.2 相关性
多变量互相回归关系可视化
fig, ((ax1, ax2), (ax3, ax4), (ax5, ax6), (ax7, ax8), (ax9, ax10)) = plt.subplots(nrows=5, ncols=2, figsize=(24, 20))
v_12_scatter_plot = pd.concat([Y_train,Train_data[‘v_12’]],axis = 1)
sns.regplot(x=‘v_12’,y = ‘price’, data = v_12_scatter_plot,scatter= True, fit_reg=True, ax=ax1)
seaborn的pairplot(数值特征):每个小图每一行共享y轴,每一列共享x轴。对角线默认的为某个变量的直方图(如果都为连续变量也可以换成概率密度函数),图上每个点都是x到y的散点图。
jointplot联合分布图:
heat热力图观察线性相关性:(用协方差公式可以度量两个变量大小和方向的不一致性)
2. 定量分析:
2.1 分布:
偏度、峰度 skew,kurt
方差
2.2 相关性:
定序变量的排序是有意义的,但是具体差值没有意义。
spearman相关系数:可以衡量级别的相关性,而pearson只能描述线性相关性。
eta系数:判断一个类别变量和一个连续变量的关联强度
pearson相关系数:用来衡量两个数据集合是否在一条线上面
独立性分析:MVTEST
最后用pandas_profiling生成数据报告
import pandas_profiling
pfr = pandas_profiling.ProfileReport(Train_data)
pfr.to_file("./example.html")
先码一个,稍后来补充