数据分析与挖掘3——特征工程
特征工程
- 1.数据预处理
- 2. 特征处理
- 3.特征降维
-
- 3.1. 特征选择
- 3.2 线性降维
数据和特征决定了机器学习得上限,而模型和算法只是逼近这个上线
1.数据预处理
- 数据收集工作是整个流程的重要环节。
- 在数据分析前进行严格的清理工作以去除不规范或无效的数据。
- 当遇到类别分布不平衡的情况时,则可采取相应的处理措施。
- 当正类数量多于负类且总体规模较大时选择下采样策略。
- 当正类数量相对较多但整体规模适中时则可采用过采样方法。
- 或者调整损失函数以赋予不同类别不同的权重以平衡学习过程。
2. 特征处理
- 标准化:使得经过处理后的数据符合标准的正态分布。
#标准化
from sklearn.preprocessing import StandardScaler
ss=StandardScaler()
data=ss.fit_transform(data)
归一化:通过将样本特征值统一至相同的尺度范围来消除不同量纲的影响,在数据预处理中常采用区间缩放作为一种标准化方法
from sklearn.preprocessing import Normalizer
sn=Normalizer()
data_normalizer=sn.fit_transform(data)
#比较适用于数据较集中的情况
两者区别:
-
归一化受到极端最大值和最小值较大的影响程度, 主要应用于数据分布较为集中的场景;
- 当数据中存在明显异常值并伴有较多噪声时, 建议采用标准化处理;
- 在机器学习算法中,SVM,KNN以及PCA等模型通常建议进行数据缩放处理;
- 不论选择哪种特征缩放方法, 都能在一定程度上都能消除变量间量纲差异的影响;
- 对于优化过程而言, 特征缩放有助于提高梯度下降法求解最优解的速度
- 定量数据二值化:将数值型数据通过设置阈值的方式进行二值化
from sklearn.preprocessing import Binarizer
b=Binarizer(threshold=3)#设置阈值,大于阈值的设为1,小于阈值的设为0
b.fit_transform(data)
运行结果:

- 定性数据哑编码:将类别型数据转换为数值型数据,如:OneHotEncoder
from sklearn.preprocessing import OneHotEncoder
oh=OneHotEncoder()
oh.fit_transform(target.reshape((-1,1)))
运行结果:

7. 缺失值处理或填补
3.特征降维
3.1. 特征选择

方差选择特征 :计算各个特征的方差,通过设置方差的阈值训责特征
data_train_columns=[col for col in data_train.columns if col not in ['target']]
# 方差筛选特征,设置方差阈值为1
from sklearn.feature_selection import VarianceThreshold
vt=VarianceThreshold(threshold=1)
data_vt=vt.fit_transform(data_train[data_train_columns])
data_vt=pd.DataFrame(data_vt)
相关系数: 计算各个特征对目标值的相关系数(皮尔逊相关系数)
#相关系数法筛选特征,选择特征个数
from sklearn.feature_selection import SelectKBest
from scipy.stats import pearsonr
skb=SelectKBest(lambda X,Y:np.array(list(map(lambda x:pearsonr(x,Y),X.T))).T[0],k=10)
data_skb=skb.fit_transform(data_train[data_train_columns],data_train['target'])
卡方检验 用于评估类别型特征与类别型目标之间的关联程度,并基于观察频数与期望频数的差异来判断变量间的独立性。卡方检验
from sklearn.feature_selection import chi2
SelectKBest(chi2,k=2).fit_transform(x,y)
最大信息系数法 :计算类别型特征和类别型target之间的相关性
from minepy import MINE
def mic(x,y):
m=MINE()
m.compute_score(x,y)
return (m.mic(),0.5)
SelectKBest(lambda X,Y:np.array(list(map(lambda x:mic(x,Y),X.T))).T[0],k=10).fit_transform(train_data,train_target)
递归消除特征法 :RFE 算法基于逐步筛选机制选择能够使模型性能达到最佳水平的特征组合
#RFE递归消除法
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
rfe=RFE(estimator=LogisticRegression(multi_class='auto',
solver='lbfgs',
max_iter=500),n_features_to_select=10)
#estimator为基模型,为逻辑回归模型,用于分类
#solver:几种优化方法。小数据集中,liblinear是一个好选择,sag和saga对大数据集更快;多类别问题中,除了liblinear其它四种算法都可以使用;newton-cg,lbfgs和sag仅能使用L2惩罚项,liblinear和saga使用L1惩罚项。
#max_iter:int类型,默认为‘100’,仅适用于newton-cg, sag和lbfgs算法;表示算法收敛的最大次数。
#n_features_to_select=10为选择的特征的个数
data_rfe=rfe.fit_transform(data_train[data_train_columns],data_train['target'])#data_train['target']为类别型标签
基于模型的特征选择
- 基于惩罚项的特征选择
#基于惩罚项的特征选择算法
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
sfm=SelectFromModel(LogisticRegression(penalty='l2',C=0.1,solver='lbfgs',multi_class='auto'))
#solver为优化算法,lbfgs优化算法仅支持l2;penalty为惩罚项,惩罚项是用来添加参数避免过拟合,可以理解为对当前训练样本的惩罚,用以提高函数的泛化能力;C为正则化系数的倒数,值越小,表示越强的正则化
data_sfm=sfm.fit_transform(data,target)
data_sfm=pd.DataFrame(data_sfm)
data_sfm
- 基于树模型的特征选择算法
#基于树模型的特征选择
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import GradientBoostingClassifier
sfmGBDT=SelectFromModel(GradientBoostingClassifier())
data_sfmGBDT=sfmGBDT.fit_transform(data,target)
data_sfm=pd.DataFrame(data_sfm)
data_sfm
3.2 线性降维
基于一种线性变换将原始高维数据通过线性变换映射至低维空间,并假设在这些投影方向上能够最大化数据的方差;从而使得仅用较少的数据维度即可尽可能多地保留原始信息

#PCA进行特征降维
from sklearn.decomposition import PCA
pca=PCA(n_components=10)#n_components为主成分数目
data_pca=pca.fit_transform(data_train[data_train_columns])
data_pca=pd.DataFrame(data_pca)
data_pca
- 线性判别式分析方法(LDA):LDA的核心思想是利用类别标签信息,在经过线性变换降维后使同类数据点尽量紧密聚集在一起,并且不同类别的数据点之间拉开距离。由此可知,LDA作为一种有监督学习算法,其主要优势在于能够有效利用类别信息提升分类性能。

#LDA线性降维选择特征(应用于分类)
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
lda=LDA(n_components=2)#特征降维后的维数
data_lda=lda.fit_transform(data,target)
data_lda=pd.DataFrame(data_lda)
data_lda
该文深入探讨了主题建模的技术基础,并通过实际案例展示了其在文本处理中的应用价值。
详细阐述了主成分分析的方法论框架及其在降维过程中的作用机理。
分享了解决过拟合的有效策略与实践方法,并提供了相应的评估指标。
深入解析了过拟合现象的本质特征及其影响因素,并提出了相应的缓解方案。
补充说明:
LASSO回归、RIGDE回归是在线性回归的基础上添加L1、L2正则化项;
从线性回归模型的角度出发分析了损失函数的设计与优化目标

平方误差项等值线为在(w_1,w_2)空间中,第一项取值相同的点的连线。
在识别两个参数(如 w_1, w_2)之间的交汇点时,在坐标系中更容易实现这一目标(即 L1 正则化)。因此,在坐标轴上更容易实现这一目标(即 L1 正则化)。这通常导致某一特定特征的系数变为零(即 LASSO 回归),从而仅利用少数几个关键特征进行建模(即 LASSO 回归)。这正是为何 LASSO 能够产生稀疏解决方案的根本原因。
