1.数据可视化探索分析
2.数据处理
3.特征工程---特征处理
4.特征工程---特征选择
一.数据探索分析
(该部分主要使用可视化工具可视化数据集,便于观测各个特征之间以及特征与标签之间的关系,有助于初步了解数据,掌 握数据趋势走向,以及为后期的特征工程服务)
工具:对数据进行探索性分析的工具包:pandas,matplotlib/seaborn
1.读取训练数据,取少量样本进行观测,并查看数据的规模和数据的类型。
---
如使用data.head(),data.info(),data.describe()等,初步查看数据;
---查看标签,是回归问题还是分类问题;是多分类还是二分类;以便对于不同的类型
---特征的意义,特征的类型(有些特征是脱敏的,不能直观观测出意义),对于有些意义明确的特征,便于我们根据常识或者专业相关的知识去构建一些新的特征等。
2.分析每一维特征,分析每列特征的分布
----直方图(是否满足正态分布,噪声点是否多,统计各个标签的各特征上的样本数据量分布)
----包括标签列(对于分类问题,可以看出类别样本是否均衡)
----检测奇异点(噪声点)<通常使用
3-σ准则 ,箱线图法 等 链接如下:
https://blog.csdn.net/pandacsu/article/details/71159463
直观上,通过直方图,或者散点图发现离散点
>
---------例子-------
案例1如下图所示:
(1)对每一维特征进行分析
直方图:取某个特征在数据集上每个取值出现的次数,可视为概率函数(PDF)的估计(seaborn可视化工具比较简单)。如下,为对 price这一属性的可视化:
– import seaborn as sns
– %matplotlib inline #( seaborn 是基于matplotlib 的)
– sns.distplot(train.price.values, bins=50, kde=True)
# 核密度估计:kde,对直方图的加窗平滑,对连续性数值,bins=50,看每个桶里出现过多少次,次数对应着纵轴,取值对应着很横轴
![](https://i-blog.csdnimg.cn/blog_migrate/0c0a40f25d22990c2153ca689c1a5cab.png)
(
由图可知,价格在2000~4000,尤其3000左右的次数出现的最多)
(2)在分类任务中,我们关心不同类别的特征分布
– order = ['low', 'medium', 'high']
– sns.violinplot(x='interest_level', y='price', data=train, order = order)
![](https://i-blog.csdnimg.cn/blog_migrate/dae9acf4aeba40f8fb00007648347cb9.png)
(由上述,可以看出,红色的“小提琴”(感兴趣高的价格分布峰值在200左右),感兴趣低的(蓝色“小提琴”价格峰值分布在3000左右),由此可以大致得出,价格的高低会影响到感兴趣程度)
(3)奇异点
奇异点:或称离群点,指远离大多数样本的样本点。通常认为这些点是噪声,对模型有坏影响
• 可以通过
直方图或
散点图发现奇异点
– 直方图的尾巴
– 散点图上孤立的点
• 可以通过只保留某些分位数内的点去掉奇异点
– 如0.5%-99.5%,或>99%
-ulimit = np.percentile(train.price.values, 99)
– train['price'].ix[train['price']>ulimit] = ulimit
![](https://i-blog.csdnimg.cn/blog_migrate/ae5d1639f78b7876862806a800965285.png)
3.分析每两列特征之间的相关性
-----相关系数:两个随机变量x,y之间的线性相关程度(使用 corr()函数,只能分析数值型特征之间的关系)
-----相关性可以通过计算相关系数或打印散点图来发现 (使用pandas.corr()能够得出特征与标签之间相关系数,或皮尔逊系数等;通过xgboost,lightgbm的feature_importance查看特征重要性)
-----我们需要找到与标签相关性强的特征,分类直方图可以从某种程度上看出特征与标签的相关性:不同类别的直方图差异大
-----查看特征与特征之间信息是否冗余,特征与特征之间强相关的话意味着信息冗余,可以两个特征可以只保留一个特征, 或采用主成分分析(PCA)等降维
----特征与标签是否线性相关
-----
不线性相关并不代表不相关,可能高阶相关,如