《特征工程入门与实践》学习笔记

书本结构与框架:

第1章~第5章

    机器学习流水线:探索性数据分析→ 特征理解→ 特征增强→ 特征构建→ 特征选择

第6章~第7章

    特征提取:特征转换+ 特征学习

第8章为案例分析,包含面部识别和酒店评论两个实战案例。

1.特征工程简介

数据科学家花80%以上时间用来获取、清洗和组织数据,超过75%的人表示,准备数据是流程中最不愉快的部分。

- 特征工程是将数据转换为能更好地表示潜在问题的特征,从而提高机器学习性能的过程。

- 属性一般是表格数据的列,特征一般只指代对机器学习算法有益的属性。

- 特征工程的评估:以提高机器学习效果作为结果导向,来评估特征工程是否有效。

监督学习(预测分析):

    回归:预测定量数据,使用均方误差MSE;

    分类:使用准确率等指标。

无监督学习(将数据按特征行为进行分类):

    聚类:用轮廓系数silhousette_score;

    统计检验:用相关系数、t检验、卡方检验等评估转换后的效果。


2.特征理解:我的数据集里有什么

- 非结构化数据:没有组织结构,看起来只有一团数据,或只有一个特征,需要通过转换变为结构化。

- 结构化数据:以表格形式组织,行是观察值,列是特征。

    - 定性数据:类别,描述某样东西的性质。

            - 定类等级:按名称分类,使用条形图/饼图进行可视化。

            - 定序等级:有自然排序属性,可计算中位数和百分位数,可用条形图/饼图、茎叶图、箱线图进行可视化。

    - 定量数据:数值,衡量某样东西的数量。

            - 定距等级:对数值的加减计算,得到均值和标准差,可用条形图/饼图、茎叶图、箱线图、直方图。

            - 定比等级:对数值的乘除运算,得到倍数和比例,可用茎叶图、箱线图、直方图。


3.特征增强:清洗数据

- 识别数据中的缺失值:探索性数据分析:可视化+缺失值统计+描述性统计,常见缺失值填充:0、unknow、?

- 处理数据集中的缺失值:

        - 删除有害的行:删除脏数据并不完全是特征工程,清洗方便,快速探索;

        - 填充缺失值:均值、中位数

                - fillna/Imputer填充缺失值;

                - 在机器学习流水中填充值。

- 标准化和归一化:

        - z分数标准化:减去均值 / 标准差;

        - min-max标准化:减去最小值 / 减去最大值;

        - 行归一标准化:保证每行都为单位范数。(采用L2范数,保证每行所有值的平方和等于1)。


4.特征构建:我能生成新特征吗

- 填充分类特征:找出一列中最常见的值来填充。

- 编码分类特征

        1. 定类等级的编码:将数据转化为虚拟变量:0或1;

        2. 定序等级的编码:根据顺序,映射序号0、1、2...;

        3. 将连续特征分箱:将数值数据转换为分类变量。

- 扩展数值特征:将原有的列进行乘积,衍生多项式特征交互。

- 针对文本特征的构建:

            - 词袋法:通过单词的出现来描述文档,重复度高的单词更重要;

            - 词袋法的3个步骤:分词 → 计数 → 归一化(将词项在大多数文档中的重要性按逆序排列);

            - CountVectorizer:将文本列转换为矩阵,列为词项,单元值为每个文档中词项的次数;

            - TF-IDF向量化器:对单词给出权重,来表示其重要性;

                - TF:衡量词在文档中出现的频率,一般会对词频进行归一化;

                - IDF:衡量词的重要性,减少常见词的权重,加大稀有词的权重。


5.特征选择:对坏属性说不

- 在特征工程中实现更好的性能:

    1. 分类任务的性能指标:真阳性率和假阳性率、灵敏度和特异性等;

    2. 回归任务的性能指标:平均绝对误差、R平方等;

    3. 和预测性不相关的其它性能:训练时长、预测新实例的时长、需要持久化的数据大小。

- 特征选择的类型:

    - 基于统计的特征选择(单变量方法):

        1. 使用皮尔逊相关系数:与响应变量越相关,特征就越有用;

        2. 使用假设检验:p值越低,特征与响应变量有关联的概率越大。

    - 基于模型的特征选择:

        1. 基于树模型:拟合决策树并输出重要性;

        2. 线性模型和正则化:

            - L1正则化(lasso正则化):将不显著特征的系数降为0;

            - L2正则化(岭正则化):将不显著特征的系数变得非常小;

            - 线性模型:常用logistics模拟和线性SVC模型。

- 选用正确特征的选择方法:

    - 分类特征:SelectKBest,用卡方或者基于树的选择器;

    - 定量特征:用线性模型和基于相关性的选择器效果更好;

    - 二元分类问题:SelectFromModel和SVC效果更好。


6.特征转换:数学显神通

- 维度压缩的区别:特征转换、特征选择与特征构建

    - 特征选择:仅限于从原始列中选择特征,降维原理是隔离信号列和忽略噪声列;

    - 特征转换:改变数据内部结构的算法,构建数学上更优的超级列,用更少的的列解释数据点;

    - 特征构建:用几个列之间的简单操作(加减乘除等)构造新的列,从中捕获有效的交互特征。

- 主成分分析PCA:无监督任务,不需要响应变量进行投影/转换

    将多个相关特征的数据集投影到相关特征较少的坐标系上;

    新的、不相关的特征(超级列)叫做主成分,本质上所有主成分相互垂直,彼此线性无关;

    原理:利用协方差矩阵的特征值分解;

    过程:一般建议在缩放数据上使用协方差矩阵,如果特征的尺度类似,也可以使用相关矩阵。

        1. 创建数据集的协方差矩阵;

        2. 计算协方差矩阵的特征值;

        3. 保留前k个特征值(按特征值降序排列);

        4. 用保留的特征向量转换新的数据点。

        * scikit-learn的PCA会在预测阶段将数据中心化,所以和手动计算过程数据不一样。

- 线性判别分析LDA:有监督任务,一般用作分类流水线的预处理步骤;

    LDA不会专注于数据方差,而是优化低维空间,以获得最佳的类别可分性;

    基于类别可分性的分类有助于避免机器学习流水线的过拟合,LDA也会降低计算成本;

    原理:计算类内和类间散布矩阵的特征值和特征向量;

    过程:判别式与数据的方差基本垂直,符合类别分离的情况

        1. 计算每个类别的均值向量;

        2. 计算类内和类间的散布矩阵;

        3. 计算类内和类间矩阵的特征值和特征向量;

        4. 降序排列特征值,保留前k个特征向量;

        5. 使用前几个特征向量将数据投影到新空间。

PCA与LDA:在流水线中会一同使用,局限是都为线性转换,只能创建线性的边界


7.特征学习:以AI促AI

- 数据的参数假设:算法对数据形状的基本假设,特征学习算法能去除算法假设,依赖于随机学习。

- 特征提取

        - 特征转换:PCA、LDA,基于数据可以进行特征值分解,为线性变换;

        - 特征学习:绕过参数假设,使用复杂的算法,一般使用深度学习;

- 受限玻尔兹曼机(RBM)无监督的特征学习算法,使用概率模型学习新特征,RBM提取的特征在线性模型中效果最佳。

        浅层(2层:可见层+隐藏层)的神经网络;

        可以学习比初始输入更少或更多的特征,要学习的特征数量取决于要解决的问题;

        限制:不允许任何层内通信,每个节点可以独立地创造权重和偏差。

- 学习文本特征——词向量

        - CountVectorizer和TF-IDF中,文档只是单词的集合;而学习文本特征关注上下文的处理;

        - 词嵌入:帮助机器理解上下文的一种方法,单词n维特征空间中的向量化,n是单词潜在特征的数量;

            - 上下文随语料库的变化而不同,静态的词嵌入不一定是最有用的;

            - 词嵌入依赖于学习的语料库。

    - Word2vec:出自Google,通过深度学习进行学习;

    - GloVe:出自斯坦福大学,通过一系列矩阵统计进行学习。


书本中的案例和python代码下载:

特征工程入门与实践-图书-图灵社区

你可能感兴趣的:(《特征工程入门与实践》学习笔记)