关于Pima数据集研究(3)--FE(特征工程)篇

关于Pima数据集研究共分为4个篇幅来进行研究:

《关于Pima数据集研究(1)--EDA(探索性数据分析)篇》

《关于Pima数据集研究(2)--DC(数据清洗)篇》

《关于Pima数据集研究(3)--FE(特征工程)篇》

《关于Pima数据集研究(4)--Model(模型搭建与预测)篇》

一、前情提要

    该数据集最初来自美国国立糖尿病与消化与肾脏疾病研究所。数据集的目的是基于数据集中包含的某些诊断指标,诊断性的预测患者是否患有糖尿病。从较大的数据库中选择这些实例受到一些限制。特别是,这里的所有患者均为皮马印第安人血统至少21岁的女性。


二、内容

    本次主要承接之前的《关于Pima数据集研究(2)--DC(数据清洗)篇》做后续探索研究,主要内容是关于Pima数据的EDA和DC结果进行针对性的数据清洗与深入探索。


三、研究方法

    本人是python系,本课题的研究方法与方案均是基于python进行扩展,研究工具包括Anaconda、panda、numpy、sklearn等第三方成熟开源框架。


四、FE(特征工程)

    根据之前的DC结果,我们已经获得较为干净,相对可用的数据集。我们先来观察一下DC之后的数据集,展示如下:

数据清洗后数据集抽样

    接下来我们开始对每个特征进行特征工程。

Pregnancies_fix,我们先来观察一下数据的分布情况,如下图所示:

数据分布统计图

    根据上图展示,修复后的数据范围在0~13,数据类型为整数离散型变量。其中数据主要集中在0~2之间,且呈现依次递减。由于样本分布不均衡,此时我们使用分箱的方法将数据进行不同归类,形成新的数据特征,先观察一下20%、40%、60%、80%分位数的数据统计情况,如下所示:

Pregnancies_fix分位数统计

    根据分位数统计,我们将各个分位数设置为分类阈值,最终将数据做成5个分箱,规则如下:

数据分箱规则

根据分箱规则,我们新生成一个特征为Pregnancies_fix_bin,且将数据进行不同分箱。下图为最终的分箱统计结果:

分箱后数据统计图

    根据分箱后的结果来看,相对比较均衡了,没有出现样本量差异性过大的情况,这样,我们就可以通过one-hot的方法将数据进行处理了,处理结果如下:

Pregnancies的one-hot结果

    最后我们将数据结果拼接到原有数据中。


Glucose_fix,我们先来观察一下数据分布,如下图所示:

Glucose_fix数据分布

    根据上图发现,数据几乎已是正态分布,暂时不用进行处理。我们来延用之前分箱操作的思想进行特征的外延,只不过这里用的方法为聚类算法,这里我们就是用最传统的Kmeans来进行计算。首先最为核心的问题是聚类个数k计算,这里没有先验知识能够告诉我们聚类个数k的选取,所以我们使用较为常用的“手肘”方法来计算相对较优的k值(这里不介绍该方法的原理)。

误差平方和
Glucose_fix手肘法SSE

    从上图发现,斜率转折较大点在3,因此我们的聚类数量用3即可,如下图所示。

Glucose_fix聚类后分布图

    根据上图发现,已通过聚类算法将原有的连续型变量转换为类别型变量,并新增到数据集中待后续使用。


BloodPressure_pre,我们来看一下数据的分布,如下图所示:

BloodPressure_pre分布图

    根据上图我们发现,经过之前的数据清洗工作后,已将数据处理为接近正太分布的数据。在此延用之前的聚类算法进行特征扩展,我们先用手肘方法对k进行选择,如下图:

BloodPressure_pre手肘法

    很不幸,从上图中实在很难发现最佳的拐点位置,我们不能够很好的对k进行选取。这里我们引入另一个选择方法“轮廓系数法”,该方法的核心公式如下(我们不会展开讨论原理):

轮廓系数定义

    根据核心公式我们来绘制每个K的轮廓系数值,如下图:

BloodPressure_pre轮廓系数

    根据上图我们发现,随着k的增加,轮廓系数增加。此时我们选择上图中增幅较大的点,也就是使用k=6(这里说明一下,首先,聚类算法属于无监督学习,我们只需要选择相对较优即可。聚类算法的还有一个目的是对变量进行降维,如果选择的聚类数量过多,则达不到降维的目的)进行聚类计算。

BloodPressure_pre聚类后分布

    根据上图显示,BloodPressure_pre根据聚类后将原有的连续变量进行了相对应的整合。


SkinThickness_insert_fix,我们来看一下数据的分布,如下图所示:

SkinThickness_insert_fix分布图

    从上图中我们能够看出,通过数据清洗后数据大部分数据呈现出正态分布,但仍然有一部分数据数值较大,将整体数据拉偏,此时我们采用对数的计算,对数据分布重新进行调整,对比如下:

SkinThickness_insert_fix对数变换对比图

    根据对数变换后我们发现,已经把原有的右偏数据拉回相对正态分布的位置。我们基于变换后的数据继续之前的聚类造特征。这里使用手肘方法仍然无法判断,因此使用的还是轮廓系数,如下图:

SkinThickness_insert_fix聚类中心点

    判断方法与之前相同,但这里与之前图差异较大,且其中k=4和k=8的轮廓系数来看值相似,我们优先采用k较小的值来进行聚类,因此我们选用k=4进行后续计算效果如下:

SkinThickness_insert_fix聚类后分布

    Insulin_fix,我们来看一下数据的分布,如下图所示:

Insulin_fix数据分布

    根据上图我们发现数据出现较强的右偏分布,且极值差异较大。这里我们采用之前的对数变换的方式来对数据进行处理,如下图:

Insulin_fix对数变换

    根据上图来看,对数变化效果较为有效。我们继续之前的套路方法,轮廓系数聚类中心点判断如下:

Insulin_fix轮廓系数

    根据上图发现,明显显示出来当聚类中心点k=4时为最大值,我们后续采用k=4来进行聚类,效果如下:

Insulin_fix聚类后分布

BMI_fix,我们来看一下数据的分布,如下图所示:

BMI_fix数据分布

    根据上图分布我们发现,整体仍然呈现右偏态分布,这里我们仍然使用对数变化,效果如下:

BMI_fix对数变化

    我们发现对数变化之后数据几乎呈现出正态分布,我们继续聚类研究,k图如下:

BMI_fix轮廓系数

    根据BMI_fix轮廓系数来看,k=6为最优点,我们来看一下聚类后分布:

BMI_fix聚类后分布

    DiabetesPedigreeFunction,我们来看一下数据的分布,如下图所示:

DiabetesPedigreeFunction数据分布

    我们继续对数变换看效果,分布如下:

DiabetesPedigreeFunction对数变换

    根据上图我们发现,对数变化竟然对数据分布无法产生影响,此时我们来看一下原始数据分位统计情况,如下表:

DiabetesPedigreeFunction数据统计

    根据统计数据发现,该特征的大部分数值<1,因此对其进行对数变换仍然得不到较大的变化;此时我们采用一种新思路,计算对数变化的倒数,公式如下:

倒数对数变换公式

    根据上述计算方法我们再来看一下数据变换后的分布情况:

DiabetesPedigreeFunction倒数对数变换分布

    现在我们的数据已被处理成近似正太分布,我们继续聚类研究,k图如下:

DiabetesPedigreeFunction轮廓系数

    根据上图我们发现,最大轮廓系数为k=5,我们则使用k=5来进行后续聚类,分布如下:

DiabetesPedigreeFunction聚类分布

 Age,我们来看一下数据的分布,如下图所示:

Age数据分布

    从上图我们发现,该数据主要集中在20~30岁的年轻女性。这里根据经验判断,可将年龄划分为不同的年龄段来对特征进行扩充,通过年龄段来对特征进行划分,划分规则如下:

Age年龄段划分

    分段后的数据分布如下:

年龄分段分布

    通过上图我们看出不同年龄段分布差异较大,由于20~30为主要分布范围,因此在年龄段划分时将此阶段进行了二次划分;


    到这里我们的特征基本已经处理完成了,以上我们仅对单因素进行了聚类操作。而聚类算法可以进行多因素之间的共同聚类,由于方法类似,在此不再进行介绍。但类别型变量我们不能就这样放着不处理,因为对于机器来说会有数值大小的概念,而我们知道不同的类别仅仅只是用来作区分,不具有可比较的意义,因此我们需要进行数据的最后一步处理,One-Hot编码(概念不展开)。我们需要将之前几个类别型变量都进行处理,样例如下:

One_hot之后特征样例

    根据one-hot之后的特征,我们开始处理最后目标(Outcome)。


    Outcome,我们来看一下数据的分布,如下图所示:

Outcome分布

    我们发现,目标仅有两类,最终我们采用分类算法来对目标进行预测。但目标量差距较大,若直接带入模型则会影响模型的准确性,因此我们需要对目标进行一定的均衡处理,我们常用的样本不均衡解决方法有:

1、过采样:即增加分类中少量样本的数量,简单方法就是复制少数类样本形成多条记录;

2、欠采样:即减少分类中多数样本的数量,简单方法就是随机去掉一些多数类样本减小规模;

3、惩罚权重:对不同样本数量的类别赋予不同的权重;

4、其他:自行查找

    综合考虑,这里我们使用正负样本的惩罚权重解决样本不均衡问题。

    这里我们使用的是SVM中的分类算法来对数据特征权重进行计算,计算结果如下:

SVM计算特征所得权重

        根据计算权重值我们重新对所有特征进行计算,结果如下:

赋值不同权重后特征情况

 到此,我们已经完成了所有特征工程的调整工作,下图为最终特征工程后的数据特征量对比:

特征工程前后对比表

五、总结

    该篇主要介绍特征工程在工作中的一些做法,在实际遇到项目时,需要根据项目时间与数据情况再来对数据进行判断该运用何种方式进行特征工程。例如,可以不通过聚类,再例如最后样本不均衡可以采用上下采样的形式。

    到目前为止,我们已经完成了完整数据挖掘的60%~70%工作了,接下来开始数据模型的搭建。


六、后续

《关于Pima数据集研究(4)--Model(模型搭建与预测)篇》

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356