【主成分分析(不可解释)】通过对原有变量进行线性组合(坐标旋转,即原有变量的线性组合),得到新变量,并计算新变量的方差,去除方差小的新变量、保留方差大的新变量。多重共线性在降维过程中,也会自动消除。
【因子分析(可解释)】《活用数据》的P102页提到,若维度间有相关性,则要做因子分析(而非主成分分析,因为追求可解释性??);若维度间量纲不同,则要做标准化处理。
《特征工程入门与实践》
1、如果不是要通过探索结构(有监督学习是一种利用数据结构的算法)进行预测,那就是想从数据中提取结构(对数据的数值矩阵或迭代过程应用数学变换,提取新的特征)。
2、【属性VS特征:属性在何种程度上才能成为真正的特征;属性=好属性(特征)+坏属性】属性一般是表格数据的列,特征则只指代对机器学习算法有益的属性(即某些属性对机器学习系统不一定有益,甚至有害)。
【如何决定删除数据集中的哪些属性】相关系数、识别并移除多重共线性、卡方检验、方差分析、理解p值、迭代特征选择、用机器学习测量熵和信息增益。
3、特征工程的应用领域:
- 有监督学习
- 无监督学习
- 统计检验:相关系数、t检验、卡方检验、及其他方法评估并量化原始数据和转换后的数据的效果。
4、L1和L2正则:将数据投影到不同的空间【归一化是用复杂的数学工具(单位球体)改变数据的缩放比例】。
5、空准确率(执行分类任务前的必选步骤:df[col].value_counts(normalize=True)):模型总是预测频率较高的类别时,达到的正确率。
6、机器学习流水线:EDA、理解、增强、构建、选择
一、特征理解:理解数据的4个等级
数据的4个等级:定类(nominal)、定序(ordinal);定距(interval)、定比(ration)。
数据的4个等级 逻辑可视化
- 数据有没有组织:结构化(表格形式存在、有不同的行列)还是以非结构化(文本形式存在);
- 识别每列数据是定量还是定性:单元格中的数代表的是数值?还是字符串?
- 每列属于哪个等级:定类、定序、定距、定比;
- 可用什么图表:条形图、饼图、茎叶图、箱型图、直方图。
二、特征增强:清洗数据(分类和数值数据的缺失值填充,及编码分类变量)
1、清洗:调整已有的列和行;增强:在数据集中删除和添加新的列。
2、缺失值(describe不包含有缺失值的列??):找到使用其他符号(如 0、unknown、- 、?)填充的缺失值,并用none??(还是np.nan)来代替(这样就可以使用 fillna 和 dropna 或者from sklearn.preprocessing import Imputer)
【定性数据列的众数填充】X[col].fillna(X[col].value_counts().index[0],inplace=True)
3、【标准化与归一化、行归一化(关注点从列转移至行,每行的向量长度相同,可选L2范数)】
标准化:将x轴更加紧密,而y轴则无变化。数据的形状无变化。(sharex=True会完整显示出来,而不需要sharey=True)
归一化:缺点——异常值存在则压缩在过小的范围 / 标准差都非常小(不利于某些模型,因为异常值的权重降低)
三、特征构建:生成新特征
4、【编码分类变量】虚拟变量编码(0-1编码)、标签编码(非LabelEncoder??)。
- 定类等级的编码(虚拟变量):方法是将分类数据转换为虚拟变量(dummy variable:取值1或0,代表某个类别的有无。虚拟变量是定性数据的代理,或者说是数值的替代;pd.get_dummies()方法)
虚拟变量陷阱:自变量有多重共线性或高度相关,即变量能依据彼此来预测。
- 定序等级的编码(标签编码器):在定序等级,由于数据的顺序有含义,使用虚拟变量无意义。为了保持顺序,可使用标签编码器。而LabelEncoder默认是一个排序方法,它和标签编码器不同???故不用。
- 连续特征分箱:pd.cut()
5、扩展数值特征(多项式特征:捕获特征交互)
pd.DataFrame(X_ploy,columns = poly.get_feature_names())
特征构建:在拥有可以得到的最好数据集之后,可考虑构建新的列,以便理解特征交互情况。
6、针对文本的特征构建:将语料库(corpus)转换为数值表示(即向量化)的常见方法是词袋(bag of words)。
词袋(bag of words)分3步:分词(tokenizing,变为词项token)、计数(counting)、归一化(normalizing)。
四、特征选择:对坏属性说不
1、特征选择(准确率和预测/拟合时间):提取最重要的特征、剔除数据中的噪声,最终提升模型性能、减少训练和预测时间。
2、特征选择的方法分2类(SelectKBest 和 SelectFromModel)
- 基于统计的特征选择(单变量方法:皮尔逊相关系数、假设检验);
【皮尔逊相关系数】因皮尔逊相关系数要求每列是正态分布,而数据集很大(超过500的阈值),可认为数据是近似正态分布的。也可以用相关系数确定特征交互和冗余变量,发现并删除这些冗余变量是减少机器学习过拟合问题的一个关键方法。
【假设检验】 假设检验的P值 - 基于模型的特征选择(都有特征排序的功能:基于树的模型、线性模型)
【SelectKBest 和 SelectFromModel的不同】
SelectFromModel 可以处理任何包括feature_importances_(基于树的模型)或coef_(线性模型)属性的机器学习模型。
SelectKBest 使用k(需要保留的特征数)和 SelectFromModel 使用阈值(代表重要性的最低限度;阈值可使用保留字如mean,median,具体用法如select_threshold:[0.01,0.1,mean,median,2*median]);
3、【正确的特征选择方法】
- 如果特征是分类的,则从SelectKBest 开始,用卡方(基于统计的特征选择)或基于树的选择器(基于模型的特征选择)。
- 如果特征基本是定量的,则用线性模型(基于模型的特征选择)和基于相关性的选择器效果更好。
- 如果是二元分类问题,使用SelectFromModel 和SVC,因为SVC会查找优化二元分类任务的系数。
五、特征转换:改变数据内部结构的算法,以产生数学上更优的超级列(super-column)
1、【特征转换】是一组矩阵算法,会在结构上改变数据,产生本质上全新的数据矩阵。
2、【特征选择、转换、构造的原理区别】
特征选择的降维原理:隔离信号列、忽略噪声列。
特征构造:几个列之间的简单操作(+和x)。
特征转换的原理:生成可以捕获数据本质的新特征。因特征转换算法涉及矩阵、线性代数,故不会创造出比原有列更多的列,而且仍能提取出原始列的结构。
3、主成分分析PCA:无监督(需要的特征少,捕捉的变化多);以原始特征的线性组合构建出全新的超级特征;PCA会在预测阶段(而非拟合阶段)将数据进行中心化centering(中心化和缩放不会改变数据的形状,但会影响特征工程和机器学习流水线的特征交互)????。
PCA优点:消除相关特征(主成分互相垂直,即彼此线性无关)。
4、线性判别分析LDA:有监督(防止维度诅咒:基于类别可分性的分类有助于避免机器学习流水线的过拟合;伪装成特征转换算法的分类器)
区别于PCA:LDA计算类内、类间的散布矩阵的特征值和特征向量;LDA不会专注于数据的方差,而是优化低维空间,以获得最佳的类别可分性。
5、【PCA 对比 LDA】
PCA是无监督,捕获整个数据的方差;LDA是有监督,通过响应变量来捕获类别可分性。
PCA 和 LDA两者都是线性转换(有参数假设???),只能创建线性的边界,表达数值型数据。
六、特征学习:使用非参数方法(不依赖数据的形状),以自动学习新的特征;最强大的特征工程算法
特征学习依赖于随机学习,希望去除 数据的参数假设。
两种特征学习工具:RBM和词嵌入(都用较浅的网络来优化训练时间,用拟合阶段学到的权重和偏差来提取数据的潜在结构)。
Feature-Engineering-Made-Easy
找书途径及下载方法
彩图地址
英文源代码及数据下载(提取码:hsp9)
划分训练集和测试集之后,填充值(训练集的均值填充训练集和测试集的缺失值)。
网友评论