文章目录
1 特征工程
维基百科中给特征工程做出了简单定义:特征工程是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程
Feature Engineering is the process of transforming raw data into features that better represent the underlying problem to the predictive models,resulting in improved model accuracy on unseen data.
简而言之,特征工程就是一个把原始数据转变成特征的过程,这些特征可以很好的描述这些数据,并且利用它们建立的模型在未知数据上的表现性能可以达到最优(或者接近最佳性能)
特征工程包括数据采集、数据清洗、特征提取、缺失值处理、数据变换、数据编码、无量纲处理、特征选择、降维等一系列步骤
2 特征选择
传统的特征工程进行到特征选择这一步骤,基本上需要对已有业务相关数据进行目标因变量相关性分析;
我们可以在训练模型前对自变量和因变量进行相关性分析,也可以对较多的模型进行降维处理;
或者在训练模型后利用模型的可解释性对变量的贡献程度进行论证
在本文中,我们重点介绍两个相关性分析方法和模型解释算法
关于降维的方法,在这篇博文中已有较为详细的解释和代码示例:KNN及降维预处理方法LDA|PCA|MDS
3 相关性分析
3.1 皮尔逊相关系数
在使用皮尔逊相关系数时我们需要注意他的基本假设,该系数只能判断自变量和因变量之间是否存在线性关系:
ρ X , Y = E [ ( X − μ X ) ( Y − μ Y ) ) ] σ X σ Y \rho_{X,Y} = \frac{E\big[(X-\mu_{X})(Y-\mu_{Y}))\big]}{\sigma_{X} \sigma_{Y}} ρX,Y=σXσYE[(X−μX)(Y−μY))]
皮尔逊相关系数 ρ X , Y \rho_{X,Y} ρX,Y的取值范围在 ( − 1 , 1 ) (-1,1) (−1,1)之间,0代表二者没有线性关系,越接近于0表示线性关系越弱;
+1或越接近+1代表二者呈现越强的正向线性关系,反之则是负向线性关系
3.2 皮尔逊相关系数 - python实现
scipy.stats 包的 pearsonr函数能够提供计算相关系数的功能
该函数同时会对皮尔逊相关系数做 H 0 H_0 H0为:二者为随机分布的假设检验,
当p值极小时,我们选择拒绝原假设,进而认同二者具有线性关系
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from scipy.stats import pearsonr
X, y = load_iris(return_X_y=True)
coef, p_value = pearsonr(X[:,0], y)
print(f"1st attribute's \npearson correlation: {
coef}, p: {
p_value}")
coef, p_value = pearsonr(X[:,1], y)
print(f"2nd attribute's \npearson correlation: {
coef}, p: {
p_value}")
coef, p_value = pearsonr(X[:,2], y)
print(f"3rd attribute's \npearson correlation: {
coef}, p: {
p_value}")
$ 1st attribute's
$ pearson correlation: 0.7825612318100811, p: 2.890478352614215e-32
$ 2nd attribute's
$ pearson correlation: -0.4266575607811239, p: 5.201563255177591e-08
$ 3rd attribute's
$ pearson correlation: 0.949034699008389, p: 4.201873152959405e-76
3.3 JS散度
JS散度来源于KL散度,后者是判断两个分布距离的一个数学公式
KL散度的计算公式如下:
K L [ P ( x ) ∣ ∣ Q ( x ) ] = ∑ x ∈ X [ P ( x ) l o g P ( x ) Q ( x ) ] KL[P(x)||Q(x)] = \displaystyle{\sum_{x \in X}[P(x)log\frac{P(x)}{Q(x)}]} KL[P(x)∣∣Q(x)]=x∈X∑[P(x)logQ(x)P(x)]
由于KL散度不具备对称性,因此后续提出JS散度,其公式即为KL散度的叠加:
J S [ P 1 ( x ) ∣ ∣ P 2 ( x ) ] = 1 2 K L [ P 1 ( x ) ∣ ∣ P 1 ( x ) + P 2 ( x ) 2 ] + K L [ P 2 ( x ) ∣ ∣ P 1 ( x ) + P 2 ( x ) 2 ] JS[P_1(x)||P_2(x)] = \frac{1}{2}KL[P_1(x)||\frac{P_1(x)+P_2(x)}{2}] + KL[P_2(x)||\frac{P_1(x)+P_2(x)}{2}] JS[P1(x)∣∣P2(x)]=21KL[P1(x)∣∣2P1(x)+P2(x)]+KL[P2