百面机器学习读书笔记

1 特征工程

1.1 特征归一化
目的:为了消除数据特征之间的量纲影响。
对数值型数据进行归一化一般有两种方法:
(1)线性函数归一化(Min-Max Scaling)
对原始数据进行变换,结果映射到[0, 1]的范围,实现对原始数据的等比缩放。
在这里插入图片描述
(2)零均值归一化(Z-Score Normalization)
将原始数据映射到均值为0,标准差为1的分布上。
数值型数据归一化的好处:
可以使用较少的迭代次数寻到最优解。
在这里插入图片描述
一般使用梯度下降法的模型都需要归一化,包括:线性回归、逻辑回归、SVM、神经网络。

决策树不需要归一化,原因:
以C4.5为例,决策树进行节点分裂主要依靠数据集关于特征x的信息增益比,信息增益比跟是否归一化没有关系。
1.2 类别型特征
处理方法:
(1)序号编码
(2)独热编码
(3)二进制编码
1.7 图像数据不足时的处理方法
保持图像类别不变的前提下:
(1)一定程度的随机旋转、平移、缩放、裁剪等。
(2)添加噪声扰动。
(3)颜色变换。
(4)改变图像的亮度、清晰度、对比度等
对图像进行特征提取,然后在图像的特征空间进行变换。

2 模型评估

2.3 余弦距离的应用
余弦相似度定义:
在这里插入图片描述即两个向量的夹角,关注的是向量之间的角度关系,而不关注向量的绝对值大小。
2.5 模型评估的方法
(1)Holdout检验
将原始样本随机划分为训练集和验证集两个部分
缺点:因为是随机划分,在验证集上计算出来的最后评估指标与原始分组有很大关系。
(2)交叉验证
动机:为了消除Holdout检验随机性。
k-fold交叉验证:
将全部样本划分为k个大小相同的样本子集,依次遍历这k个子集,每次把当前子集作为验证集,其余子集作为训练集。k次评估指标的平均值作为最终的评估指标。
留一验证:
每次留下一个样本作为验证集,其余所有样本作为测试集。
(3)自助法
动机:考虑到样本规模比较小的时候,将样本即进行划分会让训练集进一步减小,可能会影响模型的训练效果。
对总数为n的样本,进行n次有放回的随机采样

2.6 超参数调优
(1)网格搜索
实际中,网络搜索一般会先使用较广的搜索范围的较大的步长,来寻找全局最优可能的位置,然后逐渐缩小搜索范围和步长,来寻找精确的最优质值
缺点:由于目标函数一般是非凸函数,很可能错过全局最优值
(2)随机搜索
在搜索范围内随机选取样本点。
理论依据:如果样本点足够大,那么通过随机采样也能大概率找到全局最优值
(3)贝叶斯优化算法

2.7过拟合与欠拟合
过拟合:模型对于训练数据拟合呈过当情况,反应在评估指标上就是训练集表现很好,测试集和新数据表现很差。
降低过拟合
(1)获取更多的训练数据,图像平移、旋转、缩放等
(2)降低模型复杂度,例如减少网络层数、神经元个数、降低树深度、进行剪枝
(3)正则化,加入正则约束。
(4)集成学习,比如bagging。

3 经典机器学习算法

3.3决策树
(1)ID3算法-最大信息增益
数据集D经验熵:
在这里插入图片描述
D - 样本集合
K - 类别数
H(D) - 数据集D的经验熵
Ck - 样本集合D中属于第k类的样本子集
|Ck| - 子集的元素个数
|D| - 样本集合的元素个数

(2)C4.5 - 最大信息增益比
(3)CART 最大基尼指数(Gini)

决策树容易产生过拟合,解决过拟合的方法如下:
预剪枝
在生成决策树的过程中提前停止树的增长。
核心思想:在树中结点进行扩展之前,先计算当前的划分是否能带来模型泛化能力的提升,如果不能,停止生长子树,按照多数投票的原则判断该结点所属类别。
(1)树达到一定的深度,停止生长
(2)当到达当前结点的样本数量小于某个阈值,停止生长。
(3)计算每次分裂对测试集的准确度提升,当小于某个阈值的时候,不在继续扩展。
风险:有欠拟合的风险

后剪枝
在已生成的过拟合决策树上进行剪枝,得到简化版的剪枝决策树。
加粗样式
4 降维

PCA
步骤:
(1)对样本数据进行中心化处理
(2)求样本协方差矩阵
(3)对协方差矩阵进行特征值分解,降序排列
(4)取特征值前d大对应的特征向量w1, w2,…, wd,通过以下映射将n维样本映射带d维:
在这里插入图片描述

5 非监督学习

非监督学习方法:
数据聚类和特征变量关联
数据聚类:通过多次迭代找到数据的最优分割
特征变量关联:利用各种相关性分析方法找到变量之间的关系。
(1)K均值聚类
思想:通过迭代方法寻找K个簇的一种划分犯法,使得聚类结果对应的单价函数最小。
代价函数:各个样本距离所属簇中心点的误差平方和
在这里插入图片描述
Xi - 第i个样本
ci - Xi所属于的簇
Uci - 簇对应的中心点
缺点:受初值和离群点的影响每次的结果不稳定,结果通常是局部最优解。
无法解决数据簇分布差别比较大的情况,不太适用于离散分类。
需要人工预先确定初始K值,且该值与真实的数据分布未必吻合。
样本点只能被划分到单一的类中。
优点:对于大数据集,K均值是可伸缩和高效的,计算复杂度是O(NKt)接近于线性,
N是样本对象的数目,K是聚类的簇数,t是迭代的轮数。

7 优化算法

凸优化问题:支持向量机、线性回归等线性模型
非凸优化问题:低秩模型(矩阵分解)、深度神经网络模型

经典优化算法:直接法、迭代法

直接法
需要满足条件:
(1)凸函数
(2)有闭式解
在这里插入图片描述
例子:岭回归(Ridge Regression)
目标函数为:
在这里插入图片描述
最优解:
在这里插入图片描述
迭代法

一阶法:一阶泰勒展开
二阶法:二阶泰勒展开
7.5 随机梯度下降法
经典的梯度下降法
BGD
采用所有的训练数据的平均损失近似目标函数,即:
在这里插入图片描述
在这里插入图片描述
模型参数的更新公式为:
在这里插入图片描述
其中a是学习速率。
缺点:每次对模型参数进行更新,需要遍历所有的训练数据,计算量大,耗费时间。

为了解决上述问题,随机梯度下降法(SGD)被提出,用单个训练样本的损失来近似平均损失。
随机梯度下降法
用单个训练数据对模型参数进行更新,大大加快了收敛速率。
在这里插入图片描述
在这里插入图片描述
缺点:由于是用一个个的训练数据分别取更新参数,梯度方向容易一次次被改变。
小批量梯度下降法
Mini-Batch Gradient Descent
为了降低随机梯度的方差,使得迭代算法更加稳定。
每次同时处理若干训练数据(m个)并更新参数。
在这里插入图片描述
在这里插入图片描述
7.7 L1正则化与稀疏性
L1正则化使得模型参数具有稀疏性。
原因:
解空间形状:
L2正则项约束后的解空间是圆形,而L1正则约束的解空间是多边形。多边形的解空间更容易在尖角处与等高线碰撞出稀疏解。
在这里插入图片描述
函数叠加:
在这里插入图片描述
由图可知,加上L1正则化约束后,最小值的点在红点处,对应的w是0,产生了稀疏性。

12 集成学习

12.2 集成学习的步骤和例子
集成学习步骤
(1)找到误差相互独立的基分类器
(2)训练基分类器
(3)合并基分类器的结果
合并方法
(1)voting
投票的方式,将获得最多选票的结果作为最终的结果。比如bagging。
(2)stacking
串行方式,把前一个基分类器的结果输出到下一个分类器,将所有基分类器的输出结果相加作为最终输出,比如 boosting。

12.3 基分类器
常用的基分类器是决策树,原因:
(1)较方便的将样本权重整合到训练过程中,不需要使用过采样的方法调整样本权重。
(2)可以通过调节树的层数折中树的表达能力和泛化能力。
(3)决策树很好的引入了随机性。
随机森林的基分类器是决策树,不可以替换为线性分类器或者K-近邻。
原因:
(1)Random Forest属于Bagging类集成学习,Bagging的好处是集成后的分类器的方差比基分类器的方差小,基分类器最好是不稳定的、本身对样本分布较为敏感的分类器,这样Bagging才有用武之地。
线性分类器或者K-近邻自身都是较为稳定的分类器,本身方差不大。
12.4 偏差和方差
偏差
指的是由所有采样得到的大小为m的训练数据集训练出的所有模型的输出的平均值和真是模型输出之间的偏差。
通常是由于我们对学习算法做了错误的假设导致的。

方差
指的是由所有采样得到的大小为m的训练数据集训练出的所有模型的输出的方差。
通常是由于模型的复杂度相对于训练样本数m过高导致的。
比如100个训练样本,假设函数却是不大于200阶的多项式函数。
二者的直观区别看下图:
在这里插入图片描述
Bagging关注的是方差,可以降低方差
Boosting关注的是偏差,降低了偏差。
方差和偏差是矛盾统一的,关系如下:
在这里插入图片描述
12.5 GBDT基本原理
基本思想:根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。
GBDT利用残差来迭代训练,在预测过程中,把所有的树的预测值加起来,得到最终的预测结果。
GBDT中梯度会等于残差
原因:因为GBDT的损失函数使用的是最小二乘损失函数,在梯度下降过程中,损失函数对预测函数求偏导后,就变成了 f(xi) - F(i),预测值 - 实际值

GBDT回归算法和GBDT分类算法的唯一区别就是损失函数不同。
GBDT关键也是求分割特征排序和特征分割值,和决策树一样。
预测过程将每个层的残差相加即可得到
在这里插入图片描述
12.6 XGBoost与GBDT的区别联系
(1)使用CART作为基分类器时,XGBoost加入了正则项来控制模型的复杂度,利于防止过拟合。
(2)GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数做二阶泰勒展开,同时使用了一阶和二阶导数。
(3)GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。
(4)GBDT在每次迭代时使用全部的数据,XGBoost采用了与随机森林相似的策略,支持对数据进行采样。
(5)GBDT没有涉及对缺失值进行处理,XGBoost能自动学习出缺失值的处理策略。

发布了29 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/c2250645962/article/details/98474245
今日推荐