- 切比雪夫不等式
- 随机变量X的数学期望$E(X)=\mu$,方差$D(X)=\sigma^{2}$;对任意的$\varepsilon>0$,有
$$P(|X-\mu| >= \varepsilon) <= \frac{\sigma^{2}}{\varepsilon^{2}}$$ - 例:已知随机变量X的数学期望E(X)=100,方差D(X)=10,试估计X落在(80,120)内的概率
- 解:$$P(80<X<120)=P(|X-100|<20) >= 1-\frac{10}{20^{2}}=0.975$$
- 随机变量X的数学期望$E(X)=\mu$,方差$D(X)=\sigma^{2}$;对任意的$\varepsilon>0$,有
- 概率与似然
- 概率:给定参数$\theta$,随机变量X等于样本x的可能性
- 似然:给定样本,参数$\theta$是真实的可能性
- 频率学派与贝叶斯学派
- 频率学派认为:参数固定,模型不存在先验
- 贝叶斯学派认为:数据固定,参数不固定,模型存在先验
- 独立与不相关
- 不相关:两个随机变量之间不具有线性关系
- 独立:两个随机变量之间没有关联
- 归一化与标准化
- 归一化:将特定特征缩放到0-1之间
- 标准化:将特定特征缩放成均值为0,方差为1的状态
- L1和L2
- L1:各个参数绝对值之和
- L2:各个参数平方和的开方值
- 损失函数
- 平方损失(回归问题)
- 交叉熵(分类问题)
- hinge损失(SVM支持向量机)
- CART回归树的残差损失
- 偏差(Bias):模型预测的期望值与真实值之间的差距,模型的拟合能力
- 高偏差的解决方案:boosting,复杂化模型,更多特征
$$E_{D}\left[(\overline{f(x)}-y)^{2}\right]$$
- 高偏差的解决方案:boosting,复杂化模型,更多特征
- 方差(Variance):模型预测的期望值与预测值差的平方和,模型的稳定性
- 判别模型:直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型;不考虑样本的产生模型
- 优缺点:能够反映同类数据本身的相似度。但它不关心到底划分各类的那个分类边界在哪
- LR,SVM,CRF
- 生成模型:学习联合概率密度分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型;P(Y|X)= P(X,Y)/ P(X),其中P(x)是训练数据的概率分布
- 优缺点:不能反映训练数据本身的特性。但它寻找不同类别之间的最优分类面
- 朴素贝叶斯,HMM
- 由生成模型可以得到判别模型,由判别模型得不到生成模型
- 说明:生成算法尝试去找到底这个数据是怎么产生的,然后再对一个信号进行分类。基于你的生成假设,那么那个类别最有可能产生这个信号,这个信号就属于那个类别。判别模型不关心数据是怎么生成的,它只关心信号之间的差别,然后用差别来简单对给定的一个信号进行分类。
参考链接:特征工程
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已
- 包括数据与特征处理,特征选择,降维三个部分
- Filter:过滤法
- 按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征
- Wrapper:包装法
- 根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征
- Embedded:嵌入法
- 先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣
特征选择方法详细介绍
- 1、移除低方差的特征
- 当特征值都是离散型变量的时候这种方法才能用,如果是连续型变量,就需要将连续变量离散化之后才能用;假设某特征的特征值只有0和1,并且在所有输入样本中,95%的实例的该特征取值都是1,可以认为这个特征作用不大。当100%都是1,那这个特征就没意义
- 2、单变量特征选择(独立的衡量每个特征与响应变量之间的关系)
- 2.1、卡方(Chi2)检验
- 2.2、皮尔森相关系数
- 衡量的是变量之间的线性相关性 结果的取值区间为[-1,1]
- 缺陷:只对线性关系敏感。如果关系是非线性的,即便两个变量具有一一对应的关系,Pearson相关性也可能会接近0
- 2.3、互信息和最大信息系数
- 2.4、距离相关系数
- 为了克服Pearson相关系数的弱点
- 在x和x^2这个例子中,即便Pearson相关系数是0,我们也不能断定这两个变量是独立的(有可能是非线性相关);但如果距离相关系数是0,那么我们就可以说这两个变量是独立的。
- 2.5、基于模型的特征排序
- 这种方法的思路是直接使用你要用的机器学习算法,针对每个单独的特征和响应变量建立预测模型。假如特征和响应变量之间的关系是非线性的,可以用基于树的方法(决策树、随机森林)、或者扩展的线性模型等。基于树的方法比较易于使用,因为他们对非线性关系的建模比较好,并且不需要太多的调试。但要注意过拟合问题,因此树的深度最好不要太大,再就是运用交叉验证。
- 3、递归特征消除
- 使用一个基模型来进行多轮训练,每轮训练后,移除若干权值系数(绝对值权重小)的特征,再基于新的特征集进行下一轮训练
- 4、使用SelectFromModel选择特征
- 4.1、基于L1的特征选择
- 使用L1范数作为惩罚项的线性模型(Linear models)会得到稀疏解:大部分特征对应的系数为0。当你希望减少特征的维度以用于其它分类器时,可以通过 feature_selection.SelectFromModel 来选择不为0的系数。特别指出,常用于此目的的稀疏预测模型有 linear_model.Lasso(回归), linear_model.LogisticRegression 和 svm.LinearSVC(分类)
- 4.2、随机稀疏模型
- 基于L1的稀疏模型的局限在于,当面对一组互相关的特征时,它们只会选择其中一项特征。为了减轻该问题的影响可以使用随机化技术,通过_多次重新估计稀疏模型来扰乱设计矩阵_,或通过_多次下采样数据来统计一个给定的回归量被选中的次数
- 4.3、基于树的特征选择
- 基于树的预测模型(见 sklearn.tree 模块,森林见 sklearn.ensemble 模块)能够用来计算特征的重要程度,因此能用来去除不相关的特征(结合 sklearn.feature_selection.SelectFromModel)
- 4.1、基于L1的特征选择
- 5、将特征选择过程融入pipeline
- 在此代码片段中,将 sklearn.svm.LinearSVC 和 sklearn.feature_selection.SelectFromModel 结合来评估特征的重要性,并选择最相关的特征。之后 sklearn.ensemble.RandomForestClassifier 模型使用转换后的输出训练,即只使用被选出的相关特征
# sklearn.pipeline.Pipeline: clf = Pipeline([ ('feature_selection', SelectFromeModel(LinearSVC(penalty="l1"))), ('classification', RandomForestClassifier()) ]) clf.fit(X, y)
-
Label encoding:定序
- 优点:解决了分类编码的问题,可以自由定义量化数字
- 缺点:可解释性比较差。比如有[dog,cat,dog,mouse,cat],我们把其转换为[1,2,1,3,2],这里就产生了一个奇怪的现象:dog和mouse的平均值是cat。因此,Label encoding编码其实并没有很宽的应用场景。
- 适用于:
- 学历分小学,初中,高中,本科,研究生,存在逻辑关系
缺失值处理
- 缺失值较多
- 直接删除或者将特征分为两类
- 缺失值较少-缺失在10%以内
- 算法拟合填充(一般使用此方法)
- 把NaN直接用0替代
- 均值填充
- 用上下数据进行填充
- 决策树模型处理缺失值
- 数值型:对应类别中的中位数替换
- 描述型:类别中出现最多的数值替代
- (效果更好)引入权重,把需要替换的数据与其他数据做相似度测量,在补全的时候相似度高的数据有更高的权重
举例
1.欺诈预测(欺诈的数量远远小于真实交易的数量)
2.自然灾害预测(不好的事情远远小于好的事情)
3.在图像分类中识别恶性肿瘤(训练样本中含有肿瘤的图像远比没有肿瘤的图像少)
不平衡类别会造成问题有两个主要原因:
1.对于不平衡类别,我们不能得到实时的最优结果,因为模型/算法从来没有充分地考察隐含类。
2.它对验证和测试样本的获取造成了一个问题,因为在一些类观测极少的情况下,很难在类中有代表性
- 解决方法
- 欠采样
- 去除一些多数类中的样本使得正例、反例数目接近。虽然这种方法使用起来非常简单,但很有可能被我们删除了的数据包含着预测类的重要信息。
- 过采样
- 增加一些少数类样本使得正、反例数目接近。理想情况下这种方法给了我们足够的样本数,但过采样可能导致过拟合训练数据。
- 合成采样(SMOTE)
- 解决的问题:一个类别的观测数量极度稀少时该怎么做
- 算法:对每个少数类样本x_i,从它的最近邻中随机选择一个样本x ̂_i(x ̂_i是少数类中的一个样本),然后在x_i和 x ̂_i之间的连线上随机选择一点作为新合成的少数类样本
- 缺点:生成的少数类样本容易与周围的多数类样本产生重叠难以分类
- 欠采样
下采样:
对于一个不均衡的数据,让目标值(如0和1分类)中的样本数据量相同,且以数据量少的一方的样本数量为准。
上采样:
以数据量多的一方的样本数量为标准,把样本数量较少的类的样本数量生成和样本数量多的一方相同,称为上采样。
- 欠拟合:模型不能在训练集上获得足够低的训练误差
- 过拟合:模型的训练误差与测试误差之间的差距较大,即泛化能力差
- 增加训练数据,可以采用数据增强的方法
- 图像:平移、旋转、缩放
- NLP:利用机器翻译生成新数据
- 正则化
- (L1,L2正则化)
- 交叉验证
- 特征选择/特征降维
- 早停early stopping
- (比如交叉验证中,错误率最小泛化性能最好,此时如果训练集错误率还在继续下降,但也得提前终止训练)
- 决策树的剪枝
- SVM的松弛变量
- 集成学习方法Bagging
- 权重衰减(Weight Decay)
- 神经网络的Dropout
- (让神经元以超参数P的概率被激活)
- batch normalization
- (对该层的输出做批标准化,使下层的输入接近高斯分布)
- 降低模型复杂度
- 神经网络:减少网络层,神经元个数
- 决策树:降低树的深度,进行剪枝
- 特征工程,添加更多的特征项
- 增加模型复杂度,减小正则化系数
- 集成学习方法Boosting
目的:使训练出来的模型对新的数据也具有很好的性能
- 训练数据平均切成k份
- 每次用其中的一份进行测试效果,剩下的k-1份进行训练
- 进行k次
- 超参数:手动可调的参数,比如knn中的k; 不同的超参数会导致模型具有不同的效果
- 交叉验证得到模型超参数,在全量数据上使用该超参数进行训练,解决过拟合
- 解释:假设有[1, 10, 100, 1000]4个超参数,进行10折交叉验证,每次使用一个超参数训练,可以训练得到10个模型,这10个模型的平均效果就是这个超参数的效果。比较了这4个超参数的效果后,我们可以找到一个更加好的超参数在整个全量数据上进行训练,这个模型相对更优,在一定程度上可以避免过拟合
- 欧式距离
$\sqrt{(x_{1}-x_{2})^{2}+(y_{1}-y_{2})^{2}}$
- 曼哈顿距离
$|x_{1}-x_{2}|+|y_{1}-y_{2}|$
- 余弦距离
$\frac{x_{1} * x_{2}+y_{1} * y_{2}}{\sqrt{x_{1}^{2}+y_{1}^{2}} \times \sqrt{x_{2}^{2}+y_{2}^{2}}}$
- 切比雪夫距离
$\max \left(\left|x_{1}-x_{2}\right|,\left|y_{1}-y_{2}\right|\right)$
- 将数据从原始基(x,y,z)映射到新的特征空间(a,b,c)
- 零均值化
- 协方差矩阵
- 求解协方差矩阵,特征向量(实际新的特征空间),特征值(用于保留方差百分比的计算)
- 在新的特征空间中,数据可能在c维上投影的值接近0,所以就只需要考虑(a,b)
- PCA选择维数的依据:方差百分比,这里选用0.99
- 有监督降维
- 将数据集在低维度的空间进行投影,使得投影后
- 同类别数据点间的距离尽可能的靠近
- 不同类别数据点间的距离尽可能的远
- 两者均可以对数据进行降维
- 两者在降维时均使用了矩阵特征分解的思想
- 两者都假设数据符合高斯分布
- LDA是有监督的降维方法,而PCA是无监督的降维方法
- LDA降维最多降到类别数k-1的维数,而PCA没有这个限制。
- LDA除了可以用于降维,还可以用于分类。
- LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向。
样本数量:n
均方误差(MSE)
均方根误差(RMSE)
平均绝对误差(MAE)
交叉熵误差(Cross Entropy)
准确率和错误率
$$acc(y,\hat{y})=\frac{1}{n}\sum_{i=1}^{n}I(y_i=\hat{y_i})$$
$$error(y,\hat{y})=1-acc(y,\hat{y})$$
-
$TSS$ :样本总平方和
$$T S S=\sum_{i}^{n}\left(y_{i}-\overline{y}\right)^{2}$$ -
$RSS$ :残差平方和
$$R S S=\sum_{i}^{n}\left(\hat{y}_ {i}-y_{i}\right)^{2}$$ -
$ESS$
$$E S S=\sum_{i}^{n}\left(\hat{y}_ {i}-\overline{y}\right)^{2}$$ -
$R^2$
$$R^{2}=1-\frac{R S S}{T S S}$$
$R^2$ 越大,拟合效果越好;若预测值恒为样本期望,则$R^2$为0;
只有在无偏估计时,$T S S=E S S+R S S$,否则,$T S S \geq E S S+R S S$
T/F:预测正确/预测错误;P/N:预测是正样本/预测是负样本
- True Positives,TP:预测为正样本,实际也为正样本的特征数
- False Positives,FP:预测为正样本,实际为负样本的特征数
- True Negatives,TN:预测为负样本,实际也为负样本的特征数
- False Negatives,FN:预测为负样本,实际为正样本的特征数
precision(P) | ||
---|---|---|
recall(R) | ||
F1 | ||
TPR | 预测的正类中实际是正实例占所有正实例的比例 | |
FPR | 预测的正类中实际是负实例占所有负实例的比例 |
- (0,0):所有的预测都是负样本
- (1,1):所有的预测都是正样本
- (0,1):所有的预测都对了
- (1,0):所有的预测都错了
- 熵
- 基尼系数
- 联合熵:$H(X,Y)$
- 条件熵:$H(Y|X)=H(X,Y)-H(X)$
- 互信息:I(X;Y)
- 相对熵与交叉熵:
- X中取值的两个概率分布$p(x)$,$q(x)$
- p对q的相对熵是:
$$D(p || q)=\sum_{x} p(x) \log \frac{p(x)}{q(x)}=E_{p(x)} \log \frac{p(x)}{q(x)}$$ - 在一定程度上,相对熵可以度量两个随机变量的“距离”
$\mathrm{D}(\mathrm{p} || \mathrm{q}) \neq \mathrm{D}(\mathrm{q} || \mathrm{p})$ $D(p \vert \vert q)>=0$
- 交叉熵:衡量两个分布相似性的一种度量方式
$$CEH(p, q)=E_{p}[-\log q]=-\sum_{x \in \mathcal{X}} p(x) \log q(x)=H(p)+D_{K L}(p || q)$$ - 相对熵:$D_{K L}(p || q)$
- 当$p$已知时,可以把$H(p)$看作一个常数
- 参考链接:相对熵与交叉熵
- 模型初始化:简单来说,就是把一个任务训练好的参数,拿到另一个任务,作为神经网络的初始参数值
- 举例:先需要训练一个CNN,用于人脸的年龄识别;当有新任务,人脸识别性别,此时就可以利用已经训练好的年龄CNN模型,去掉最后一层,然后其他层的网络参数直接复制过来,继续进行训练,输出性别即可