4.1特征变换
4.1.1离散化
parts = np.array([0,18.5,25,28,100])
types = ["silght","normal","overweight","fat"]
boys["wtype"] = [types[np.where(x<= parts)[0][0]-1] if not np.isnan(x) else "Nan" for x in boys.bmi]
其中parts是设置离散区间,types是区间内取值,最后通过列表生成器构建离散化数据。
列表生成器:步骤1:遍历该列中所有数据
步骤2:若不为空进入第三步
步骤3:找到x小于的离散区间的位置,对应到离散值。
# 按照规则离散化
bins = [0,18.5,25,28,100]
boys['Categories'] = pd.cut(boys['bmi'], bins,
labels=["silght","normal","overweight","fat"])
1)分箱(等比、等宽),分箱完之后,可以根据平均值、中位数、最大最小值等进行平滑处理。
ages = pd.Series([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32])
ages_cut = pd.cut(ages, 5 ,labels=[u"婴儿",u"青年",u"中年",u"壮年",u"老年"]) #等宽分箱
z =ages.groupby(ages_cut).mean() #求每个组的平均值
tmp_cmean = [z[x] for x in ages_cut] #用平均值代替
4.1.2标准化
scale=(boys.hgt-boys.hgt.min())/(boys.hgt.max()-boys.hgt.min())
dataframe进行标准化处理,其他标准化方法自定义公式即可。
4.2特征组合
特定领域知识的方法、二元组合、高阶多项式组合。
1)同性质组合:平均值、变异程度、比率、增长率、平均增长率、最大/最小增长率(门诊确证率、跳出率)
2)异性组合:不同量纲的组合(确诊人数/天数)
4.2.2二元组合
对于分类变量、数值变量进行逻辑变换得到新的特征。(插入代码)
4.2.3高阶多项式
也就生成x2,x3等,解决部分非线性的问题
4.3特征评价
特征初选、影响评价、模型法
1)离散变量,若特征占比比较大(90%以上)考虑剔除,而连续变量,一种离散化,按照离散处理,另外就是查看方差,若方差比较小,考虑剔除。
2)影响评价(pearson系数、距离相关系数、单因素方差分析、信息增益、卡方检验、Gini系数)