书本结构与框架:
第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代码下载: