机器学习原理
LaTex数学公式:
https://artofproblemsolving.com/wiki/index.php/LaTeX:Symbols
https://artofproblemsolving.com/wiki/index.php/LaTeX:Commands
数学在线绘图:
https://www.symbolab.com/
https://www.geogebra.org/
https://www.desmos.com/calculator?lang=zh-CN
https://hs.luomashu.com/
机器学习与回归类算法
机器学习分类:
监督学习:
有目标值
无监督学习:
无目标值
不同类型的问题:
01、聚类(无监督学习)
挖掘数据的关联模式,具体场景:用户购买完手机,推荐手机壳。用户喜欢看美女视频,推荐美女视频 。
02、分类(监督学习)
根据以往经验判定样本所属分类,具体场景:垃圾邮件识别、文本情感褒贬义分析、图像内容识别
03、回归(监督学习)
根据以往经验,预测连续值结果,具体场景:房价具体值(面积越大,房子越贵,这种线性关系)、票房值、颜值得分
04、强化学习
根据环境而行动,获得最大化的预期利益,具体场景:机器人如何更好的完成任务。
损失函数(loss function)
计算“估算出来的答案”与“标准答案”差异大小的一个函数。
$$
J(\theta_0,\theta_1,\theta_2…..\theta_t) = \frac{1}{2m}\sum\limits_{i=1}^m(h_0(x^{(i)})-y^{(i)})^2
$$
预估值$h_0(x^{(i)})$标准答案$y^{(i)}$
通过损失函数计算“估算出来的答案”与“标准答案”差异越小,说明该损失函数越好。
在线性回归中,损失函数通常采用均方差(Mean Squared Error, MSE)来衡量预测值与实际值之间的差异。公式中的$\frac{1}{2m}$ 是为了方便计算和梯度下降算法的推导而引入的。
具体解释如下:
$\frac{1}{2}$:这个系数是为了后续计算的方便而引入的。在损失函数中使用平方差时,对于每个样本,预测值与实际值之间的差异会被平方,因此在计算损失函数的梯度时,平方项会出现系数 2。为了简化计算,在定义损失函数时,引入 $\frac{1}{2}$ 系数,以便后续计算梯度时消除系数 2。
$m$:这是训练样本的数量。在计算均方差时,将每个样本的平方差累加起来后,通常会除以样本数量 $m$,以得到平均损失。因此,公式中的 $\frac{1}{2m}$ 项就是将累加的平方差除以 $2m$,以得到平均损失。
需要注意的是,引入 $\frac{1}{2m}$ 并不影响损失函数的最优解,因为最优解是通过最小化损失函数的梯度来获得的,而梯度的计算中会出现系数 2 和样本数量 $m$,两者相乘后会互相抵消。因此,引入 $\frac{1}{2m}$ 只是为了简化计算,不会改变最终的优化结果。
logLoss (对数损失函数,LR)
$$
J(\theta)=[-\frac{1}{m}\sum\limits_{i=1}^my^{(i)}log(h_\theta(x^{(i)})+(1-y^{(i)})log1-h_\theta(x^{(i)})]+\frac{\lambda}{2m}\sum\limits_{j=1}^n\theta^2_j
$$
这是一个二元分类交叉熵损失函数,其中 $θ$ 是模型参数,$m$ 是样本数量,$y^{(i)}$是第$i$ 个样本的真实标签,$h_\theta(x^{(i)})$是模型对第$i$个样本的预测值,${\lambda}$是正则化参数,$\theta^2_j$是参数 $θ$的第 $j$维平方。
这个正则化项是 L2 正则化项
损失函数的第一部分是二元分类交叉熵损失,计算模型对于每个样本的预测损失,第二部分是正则化项,用于防止过拟合。
梯度下降
逐步最小化损失函数的过程,如同下山,找准方向(斜率),每次迈进一小步,直至山底。
$$
\theta_1:=\theta_1-\alpha\frac{d}{d\theta_1}J(\theta_1)
$$
这个公式是梯度下降算法中用于更新模型参数的一步更新规则,用于最小化损失函数。
让我逐步解释这个公式的含义:
$\theta_1$:表示模型参数中的某个特定参数,这里以 $\theta_1$ 为例。
$\alpha$:表示学习率(learning rate),是一个常数,用于控制参数更新的步长。学习率决定了每次迭代中参数更新的幅度。
$J(\theta_1)$:表示损失函数,是关于参数 $\theta_1$ 的函数。损失函数衡量了模型预测值与实际值之间的差异。
这个公式的右侧是对损失函数关于参数 $\theta_1$ 的导数 $\frac{d}{d\theta_1}J(\theta_1)$,即损失函数对参数 $\theta_1$ 的斜率或梯度。这个导数告诉我们损失函数在当前参数值 $\theta_1$ 处的变化速率,用于指导参数的更新。
公式的左侧表示参数更新的操作。$\theta_1$ 的新值等于当前值减去学习率乘以损失函数关于 $\theta_1$ 的导数。这个操作使得参数向梯度的反方向移动,以便在损失函数下降的方向上更新参数,逐步接近最优解。
换句话说,这个公式代表了梯度下降算法中的一次参数更新步骤,通过不断迭代该步骤,参数 $\theta_1$ 会逐渐朝着能够最小化损失函数的值的方向进行更新,以获得更好的模型拟合效果。学习率 $\alpha$ 决定了每次参数更新的幅度,需要适当选择学习率以保证收敛效果和速度。
在这个公式中,$d$ 表示求导运算符,它代表对变量 $\theta_1$ 应用求导操作。$\frac{d}{d\theta_1}$ 表示对函数 $J(\theta_1)$ 求关于 $\theta_1$ 的导数。
具体来说,$\frac{d}{d\theta_1}J(\theta_1)$ 表示对损失函数 $J(\theta_1)$ 关于参数 $\theta_1$ 的导数。这个导数告诉我们在当前参数值 $\theta_1$ 处,损失函数 $J(\theta_1)$ 的变化率或斜率。在梯度下降算法中,我们使用这个导数来指导参数的更新,以朝着能够减小损失函数的方向进行调整。
所以,公式中的 $d$ 表示对 $\theta_1$ 求导的运算符。
什么是导数?
导数是微积分中的一个概念,用于描述函数在某一点处的变化率。具体而言,对于函数$f(x)$,它的导数$f’(x)$表示函数在给定点$x$处的瞬时变化率或斜率。
数学上,导数可以通过函数的极限定义来表示。对于函数$f(x)$,在点$x$处的导数可以通过以下极限来定义:
$$
f’(x)=\lim\limits_{h \to 0}\frac{f(x + h)-f(x)}{h}
$$
其中,$h$是一个趋近于 0 的数。这个极限表示当$h$ 趋近于 0 时,函数$f(x)$在点${x}$处的变化率。导数可以理解为函数在某一点处的瞬时斜率,也就是函数图像在该点处的切线斜率。
导数有几个重要的性质,例如:
- 导数表示函数在某点的斜率:导数的值表示了函数在某一点的瞬时变化率,可以用来描述函数图像的陡峭程度或曲线的弯曲程度。
- 导数可以判断函数的增减性:当导数为正时,函数在该点处递增;当导数为负时,函数在该点处递减。
- 导数可以求出函数的极值点:函数的极值点(最大值和最小值)出现在导数为零或不存在的点。
在梯度下降算法中,导数在每次迭代中起着重要的作用。通过计算损失函数对模型参数的导数,我们可以确定在当前参数值处,函数在参数空间中的变化方向和速率,并据此进行参数的更新以朝着损失函数减小的方向前进。
线性回归与正则化
在机器学习中,过拟合是一个很常见的问题,即模型在训练数据上表现良好,但在新数据上表现较差。正则化可以通过引入额外的信息来限制模型的复杂度,从而避免过拟合的问题。
例如,在线性回归模型中,正则化可以通过添加L1或L2正则化项来实现。**==L1正则化项会迫使一些系数变为0,从而消除不必要的特征,L2正则化项会惩罚系数的大小,从而防止过拟合。==**
L1正则化和L2正则化是两种常见的正则化方法:
L1正则化,又称Lasso Regression,是指权值向量中各个元素的绝对值之和。L1正则化可以让一部分特征的系数缩小到0,所以L1适用于特征之间有关联的情况,可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择。
L2正则化,又称Ridge Regression,是指权值向量中各个元素的平方和,然后再求平方根。L2正则化不会使特征系数缩小到0,但会使系数变小,它会使优化求解稳定快速。所以L2适用于特征之间没有关联的情况。L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合。
$$
J(\theta)=\frac{1}{2m}[\sum\limits_{i=1}^m(h_\theta(x^{(i)}-y^{(i)})^2+\lambda\sum\limits_{j=1}^n\theta^2_j]
$$
逻辑(斯蒂)回归
sigmoid函数称为斯蒂函数,是因为它的英文名字为sigmoid function,读起来与斯蒂相似。
sigmoid函数有一个非常好的性质,即当z趋于正无穷时,g(z)趋于1,而当z趋于负无穷时,g(z)趋于0,这非常适合于我们的分类概率模型。另外,它还有一个很好的导数性质:g′(z)=g(z)(1−g(z))。sigmoid函数是逻辑斯蒂回归模型中用于计算分类概率的函数。
sigmoid的数学公式是:
$$
\sigma(x) = \frac{1}{1 + e^{-x}}
$$
sigmoid函数又叫做logistic函数,机器学习中一个重要的预测模型逻辑回归(LR)就是基于Sigmoid函数实现的。
sigmoid函数的特点是:输入x的值越大,输出Sigmoid(x)的值越接近1;输入x的值越小,输出Sigmoid(x)的值越接近。
决策树与随机森林
决策树是一种用于分类、回归、决策等领域的统计学习方法。
决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。
由于这种决策分支画成图形很像一棵树的枝干,故称决策树。
最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBM)
比较著名的模型:LR模型(广义线性模型)
LR模型(对数几率回归模型),虽然叫回归,但是其本质为分类。对数几率函数是一种sigmoid函数。线性模型有可解释性强、易于并行的优点。但是其难以表示非线性关系,所以模型的准确性可能不好。为了增强原始特征与拟合目标之间的非线性关系,通常需要对原始特征做一些非线性转换。离散化相当于把连续函数变成分段函数来增加非线性。比如说将连续的工资数分为1000档、2000档等。特征交叉是算法工程师把领域知识融入模型的一种方式。比如说女性特征+双十一的时间特征组合(女性,双11)这一特征,可能就是一个极好的预测购买的特征。
决策树:分类
决策树:回归树
回归决策树主要指CART(classification and regression tree)算法,内部结点特征的取值为“是”和“否”, 为二叉树结构。所谓回归,就是根据特征向量来决定对应的输出值。回归树就是将特征空间划分成若干单元,每一个划分单元有一个特定的输出。
信息熵
$$
Ent(D)=-\sum\limits_{k=1}^{|y|}P_klog_2P_k
$$
$P_k$:样本集合D中的第k类样本所占的比例。(比如:100个西瓜,有40个是好瓜,则好瓜样本比例为$\frac{40}{100}$)
计算信息熵时约定:若p=0,则$plog_2p=0$
Ent(D)的最小值为0,最大值为$log_2|y|$
求信息熵公式中的log需要以2为底是因为:
- 采用2作为底数,能够使计算出来的值与二进制小数对应起来,方便计算和分析。
- 在信息熵的计算中,log函数的作用是将概率转化为信息量,以2为底的对数函数在转化为二进制的时候是等价于概率的转换的。同时,在信息论中,熵是用来表示信息量的,以2为底的对数函数对应的单位是比特(bit),这个单位是信息熵的基本单位。
- 受香农的论文的影响,在信息熵的计算中,log函数以2为底是受到广泛认可的。
==信息熵概念:Ent(D)的值越小,则D的纯度越高==
信息熵是信息论中用来度量信息纯度的,信息熵越小,信息纯度越高,越单一。
- 当信息熵为0时,表示信息完全纯,没有任何杂质。
- 当信息熵越大时,表示信息越不纯,其中包含的杂质越多。
信息增益
ID3算法
信息增益公式:==信息增益 = 父节点的信息熵 - 所有子节点的信息熵==
$$
Gain(D,a)=Ent(D)-\sum\limits_{v=1}^v\frac{|D^v|}{|D|}Ent(D^v)
$$
其中,父节点的信息熵是通过对父节点所属样本集合的属性取值进行概率统计,然后利用信息熵公式计算得出的;所有子节点的信息熵是通过对各个子节点所属样本集合的属性取值进行概率统计,然后利用信息熵公式计算得出的。
可以将$Gain(D,a)$作为决策树划分属性的依据,数值越大,越优先划分。
C4.5算法
信息增益率是用来度量特征对数据集的信息贡献度大小的度量值,其数学公式为:
信息增益率 = 信息增益 / 分裂熵
其中,信息增益是特征对数据集的信息贡献度大小的度量值,信息熵是数据集的纯度的度量值,代表了数据集的混乱程度。
信息增益率可以用来作为特征选择和特征剪枝的度量值,较小的信息增益率通常意味着这个特征对数据集的信息贡献较小,可以被舍弃。
信息增益率:
$$
Gain_ratio(D,a)=\frac{Gain(D,a)}{IV(a)}
$$
其中分裂熵:
$$
IV(a)=-\sum\limits_{v=1}^V\frac{|D^v|}{|D|}log_2\frac{D^v}{|D|}
$$
属性a的可能取值数目越多(即$V$越大),则$IV(a)$的值通常就越大。
IV(a)指的是某类别的信息熵,若信息分散越大,那么该值越大(例如ID对应一个同学)。即前两个公式的分母越大,分母越大,那么信息增益率就越小,越小的信息增益率,就越没意义了
启发式:先从候选划分属性中找出信息增益高于平均水平的,再从中选取增益率最高的。
CART
CART的全称为Classification and Regression Tree,是最佳的决策树模型,sklear中的决策树也是应用的CART树。CART是二叉树模型
基尼指数(gini index):CART中使用
分类树采用了基尼指数作为类别选择的依据。基尼纯度越小,代表数据集的纯度越高,分类效果越好。
$$
Gini(D)=\sum\limits_{k=1}^{|y|}\sum\limits_{k^{\prime}\neq{k}}P_kP_k\prime
$$
$$
=1-\sum\limits_{k=1}^{|y|}P_k^2
$$
反应了从D中随机抽取两个样例,其类别标记不一致的概率
Gini(D)越小,数据集D的纯度越高
属性a的基尼指数:
$$
Gini_index(D,a)=\sum\limits_{v=1}^V\frac{|D^v|}{|D|}Gini(D^v)
$$
在候选属性集合中,选取那个使划分后基尼指数最小的属性
例子:
工资 | 压力 | 平台 | 工作 |
---|---|---|---|
高 | 大 | 中等 | 好 |
低 | 大 | 小 | 好 |
高 | 小 | 小 | 好 |
低 | 大 | 小 | 好 |
低 | 大 | 大 | 不好 |
高 | 大 | 大 | 好 |
低 | 小 | 中等 | 不好 |
低 | 小 | 大 | 不好 |
第一层拆分:
工资信息增益:8个人中,3个人工资不错的,5个人工资一般的,那么工资这一列作为判断工作是否好坏的信息增益是0.3
$$
Gini(D,\text{工资}) = \frac{3}{8} \left(1 - \left(\frac{3}{3}\right)^2 - \left(\frac{0}{3}\right)^2\right) + \frac{5}{8} \left(1 - \left(\frac{3}{5}\right)^2 - \left(\frac{2}{5}\right)^2\right) = 0.3
$$
$$
\begin{align*}
Gini(D,\text{压力}) &= \frac{5}{8} \left(1 - \left(\frac{4}{5}\right)^2 - \left(\frac{1}{5}\right)^2\right) + \frac{3}{8} \left(1 - \left(\frac{1}{3}\right)^2 - \left(\frac{2}{3}\right)^2\right) \
&= 0.36667
\end{align*}
$$
$$
\begin{align*}
Gini(D,\text{平台}=0) &= \frac{3}{8} \left(1 - \left(\frac{3}{3}\right)^2 - \left(\frac{0}{3}\right)^2\right) + \frac{5}{8} \left(1 - \left(\frac{2}{5}\right)^2 - \left(\frac{3}{5}\right)^2\right) \
&= 0.3
\end{align*}
$$
$$
\begin{align*}
Gini(D,\text{平台}=1) &= \frac{3}{8} \left(1 - \left(\frac{1}{3}\right)^2 - \left(\frac{2}{3}\right)^2\right) + \frac{5}{8} \left(1 - \left(\frac{4}{5}\right)^2 - \left(\frac{1}{5}\right)^2\right) \
&= 0.36667
\end{align*}
$$
$$
\begin{align*}
Gini(D,\text{平台}=2) &= \frac{2}{8} \left(1 - \left(\frac{1}{2}\right)^2 - \left(\frac{1}{2}\right)^2\right) + \frac{6}{8} \left(1 - \left(\frac{4}{6}\right)^2 - \left(\frac{2}{6}\right)^2\right) \
&= 0.45833
\end{align*}
$$
由计算结果来看,可以看出工资的基尼指数最小,所以以工资为拆分依据。
第二层,我们还剩下压力、平台可以接着进行拆分,所以可以继续计算下一层的基尼指数:
左边节点
工资 | 压力 | 平台 | 工作 |
---|---|---|---|
0 | 1 | 0 | 好 |
0 | 1 | 0 | 好 |
0 | 1 | 1 | 不好 |
0 | 0 | 2 | 不好 |
0 | 0 | 1 | 不好 |
压力信息增益:第一层将8个人分成两拨,一拨是工资不错的,一拨是工资一般的。现再将工资一般的进行划分,因此,压力信息增益:5个工资一般的人,按压力分,压力大的3个,压力小的2个
$$
Gini(D_0, \text{压力}) = \frac{3}{5} \left(1 - \left(\frac{2}{3}\right)^2 - \left(\frac{1}{3}\right)^2\right) + \frac{2}{5} \left(1 - \left(\frac{0}{2}\right)^2 - \left(\frac{2}{2}\right)^2\right) = 0.26667
$$
$$
Gini(D_0, \text{平台}=0) = \frac{2}{5} \left(1 - \left(\frac{2}{2}\right)^2 - \left(\frac{0}{2}\right)^2\right) + \frac{3}{5} \left(1 - \left(\frac{0}{3}\right)^2 - \left(\frac{3}{3}\right)^2\right) = 0
$$
$$
Gini(D_0, \text{平台}=1) = \frac{2}{5} \left(1 - \left(\frac{0}{2}\right)^2 - \left(\frac{2}{2}\right)^2\right) + \frac{3}{5} \left(1 - \left(\frac{2}{3}\right)^2 - \left(\frac{1}{3}\right)^2\right) = 0.26667
$$
所以我们将平台为0的项作为第二层的分类依据。
那么基尼指数计算过程是:
$$
Gini(D)=1-((\frac{5}{8})^2+(\frac{3}{8})^2)=1-(0.625^2+0.375^2)=1-0.53125=0.46875
$$
表示数据纯度不高。
再假设 一半好、一半坏,则:
$$
Gini(D)=1-((\frac{4}{8})^2+(\frac{4}{8})^2)=1-(0.5^2+0.5^2)=1-0.5=0.5
$$
这样明显更不纯。
再假设全部都是好工作的时候:
$$
Gini(D)=1-((\frac{8}{8})^2+(\frac{0}{8})^2)=1-(1^2+0^2)=1-1=0
$$
由于Gini(D)越小,数据集D的纯度越高,所以这时候基尼指数是最小的,所以最纯。
回归树
残差平方和(RSS)是指在回归树模型中,将每个数据点的实际值与预测值之间的差异(即残差)的平方加起来得到的总和。回归树模型中的RSS是对分裂后所有区域拟合均方误差的加和,而分类树模型中的RSS表示的是分类误差。
$$
R_1(j, s) = {x , | , x_j < s}泰勒展开
$$
$$
R_2(j, s) = {x , | , x_j \ge s}
$$
$$
RSS = \sum_{x_i \in R_1(j, s)} (y_i - \tilde{y}_{R1})^2 + \sum_{x_i \in R_2(j, s)} (y_i - \tilde{y}_{R2})^2
$$
其中,$R1(j,s)$和$R2(j,s)$分别表示按照维度$xj$和切分点$s$划分后的两个子树,$\tilde{y}_{R1}$和$\tilde{y}_{R2}$分别表示划分前子树$R1$和$R2$的均值,$x_i$表示第i个样本,$y_i$表示第i个样本的实测值
当然具体怎么切割这些区域,需要先按范围进行分类,比如下图中的y轴范围是0~4,那么我可以0、01、012、0123、01234切割上下两侧区域,同理x轴也是这样。
那怎么切割比较合理呢?需要经过上方的RSS公式进行运算。RSS值越小则是最优的划分依据。
一个回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元上的输出值。假设已将输入空间划分为M个单元$R_1$,$R_2$,$R_3$…,$R_M$,并且在每个单元$R_m$s上有一个固定的输出值$C_m$,于是回归树模型可以表示为:
$$
f(x)=\begin{matrix}\sum_{m=1}^M\end{matrix}c_mI(x\in{R_m})
$$
当输入空间的划分确定时,可以用平方误差$\begin{matrix}\sum_{x_i\in{R_m}}(y_i-f(x_i))^2\end{matrix}$来表示回归树对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值。易知,单元${R_m}$上的$c_m$的最优值$\hat{c}_m$是$R_m$上的所有输入实例$x_i$对应的输出$y_i$的均值,即:
$$
\hat{c}_m=ave(y_i|x_i\in{R_m})
$$
回归树剪枝
解决办法:添加正则化项衡量
考虑剪枝后得到的子树${T_a}$,其中a是正则化项的系数,当我固定一个a后,最佳的${T_a}$就是得到下列式子值最小的子树。
$$
\sum\limits_{m=1}^{|T|}=\begin{matrix}\sum_{x_i\in{R_m}}\end{matrix}(y_i-\tilde{y}_{R_2})^2+\alpha|T|
$$
其中|T|是回归树叶子节点的个数
其中$\alpha$可以通过交叉验证去选择
回归树剪枝是一种优化方法,目的是减少模型的复杂度,防止过拟合。简单来说,剪枝就是将模型中不必要的部分去掉,使模型更加简洁、高效。具体方法有以下两种:
- 获得可选集合:从根节点开始构建最深的树,然后不断增加树的深度,直到只剩下一个树根为止。不断增大树的深度,节点也会增加,当节点达到一定数量时,会出现一个比较浅的树,它的误差平方和(RSS)会比之前小,此时记下该节点的误差平方和。将这些树的RSS求平均数,记为这n棵树的RSS平均值,将这个误差平方和与之前记下的误差平方和比较,如果前者较小,则用n棵树代替之前得到的所有树,然后将这n棵树分别用于训练和测试,得到交叉验证下的均方根误差(RMSE),将RMSE求平均数,记为这n棵树的RMSE平均值。
- 选择RMSE平均值最小的树作为最终的模型。
朴素贝叶斯
朴素贝叶斯是一种基于概率理论的分类算法,以贝叶斯理论为理论基础,通过计算样本归属于不同类别的概率来进行分类,是一种经典的分类算法。
朴素贝叶斯分类器是基于特征条件全部独立的假设,所谓特征条件全部独立,是指对于任意两个特征属性之间不存在条件依赖关系。
朴素贝叶斯分类器模型包括m个样本,每个样本有n个特征,输出为k个类别,通过样本学习得到先验概率(对于每个分类来讲有多少条记录),通过样本学习得到条件概率(在某一个分类里,存在样本x的概率是多少),通过上述学习结果,可以计算X、Y的联合概率分布。
朴素贝叶斯的数学形式:
$$
y=argmax_{c_k}P(y=c_k)\prod_j{P(x^j|y=c_k)}
$$
即:
$$
P(B)=\sum\limits_{i=1}^nP(B|A)\cdot{P(A_i)}
$$
将全概率公式带入贝叶斯公式中,得到:
$$
P(A|B)=\frac{P(B|A)\cdot{P(A)}}{\sum\limits_{i=1}^nP(B|A_i)\cdot{P(A_i)}}
$$
极大似然评估
TODO
拉普拉斯平滑
有一些关键词有可能为空,所以会导致计算出来的结果为0。所以需要在每个关键词上面人为增加一个出现的次数。
隐马尔科夫模型
CRF模型
随机森林
在机器学习中,bagging是指Bootstrap Aggregating缩写,即自助聚合。
输入为样本集合$D={(x_1,y_1),(x_2,y_1),…(x_m,y_m)}$
1)对于 t=1,2…,T。t次
a)对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集$D_m$
b)用采样集$D_m$训练第m个基学习器$G_m(x)$
2)分类场景,则T个学习器投出最多票数的类别为最终类别。回归场景,T个学习器得到的回归结果进行算术平均得到的值为最终的模型输出。
泰勒展开
$$
e^x\approx1+x+\frac{x^2}{2}
$$
当x的值越接近0的时候,等式左右两侧的误差就越小,$x\le0.1$
例子:
当x=0.1的时候,那么$e^{0.1}\approx1+0.1+\frac{0.1^2}{2}=1.1+\frac{0.01}{2}=1.105$。而$e^{0.1}$呢,用计算器计算得1.1051709180756476248117078264902。可以看出是非常接近的。
SVM支持向量机(Support Vector Machine)
函数间隔与几何间隔
函数间隔:对于在超平面上的点, $w\cdot{x}+b=0$恒成立。
几何间隔:空间中任一点到该平面的相对距离也会成比例增加或者减小。对于$y_i(w\cdot{x_i}+b)\ge\lambda\cdot||w|| $,相当于对于此超平面,空间中任一点到它的相对距离是$\lambda\cdot||w||$。
机器学习中的最优间隔分类器公式如下:
最优分类间隔是下述这样的优化问题:即选择γ,w,b使γ最大,同时满足条件:所选取的最大几何间隔必须保证每个样本的几何间隔至少为γ。即,找到一个超平面,在将正负样本分开的同时,使超平面到正负样本间的距离尽可能大。
拉格朗日函数
拉格朗日函数是在力学系上只有保守力的作用,是描述整个物理系统的动力状态的函数。
拉格朗日函数是在分析力学里,一个动力系统的拉格朗日函数,是描述整个物理系统的动力状态的函数,对于一般经典物理系统,通常定义为动能减去势能,以方程表示为 L=T-V1。
其中,T为动能,V为势能。拉格朗日函数对于研究自然现象、解决工程技术问题有重要的意义。
在机器学习中,引入拉格朗日函数的原因如下:
- 通过引入拉格朗日乘子,可以将原始问题转换为对偶问题,从而方便解决问题。
- 当x满足约束条件时,拉格朗日函数的最大化会等于原始问题中的函数。
- 当x不满足约束条件时,拉格朗日函数的最大化会等于无穷大。
- 拉格朗日函数用来描述自然现象、解决工程技术问题有重要意义。
为了实现对一个多变量的函数的极值进行求解,需要构造一个函数$J(x)$,使得函数$f(x)$在点$x$的某一邻域内的所有点均小于$J(x)$,且$J(x)$的变分为零,这个函数$J(x)$就称为$f(x)$在点$x$处的拉格朗日函数。
拉格朗日函数的公式为:$J(x)=f(x)+λg(x)$ 其中,$λ$是一个非负参数,$g(x)$是一个约束条件。
高斯核函数
$$
K(X,Y)=exp\begin{Bmatrix}-\frac{\begin{Vmatrix}X-Y\end{Vmatrix}^2}{2\sigma^2}\end{Bmatrix}
$$
数据与特征处理
什么是特征处理?通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程。
无量钢化
无量纲化使不同规格的数据转换到同一规格。常见的无量纲化方法有标准化和区间缩放法。标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。区间缩放法利用了边界值信息,将特征的取值区间缩放到某个特点的范围,例如[0, 1]等。
数据归一化
数据按最小值中心化后,再按极差(最大值-最小值)缩放,这个过程就叫数据归一化(Normalization,又称Min-Max Scaling),处理后的数据服从正态分布,计算公式如下:
$$
x^*=\frac{x-min(x)}{max(x)-min(x)}
$$
数据标准化
数据按均值中心化后,再按标准差缩放,数据就会服从均值为0,方差为1的正态分布,这就是数据标准化(又称Z-score normalization),公式如下:
$$
x^*=\frac{x-\mu}{\sigma}
$$
注:公式中的$\mu$为平均值,$\sigma$为标准差(考量数据的稳定性)。
在大多数机器学习算法中,会选择StandardScaler来进行特征缩放,因为MinMaxScaler对异常值很敏感。所以一般先试试StandardScaler,效果不好再考虑MinMaxScaler。
缺失值处理方法
缺失值的处理一般分为两种,其一为删除,其一为填补。当缺失数据达到一定比例时,采取删除法,当数据量较小,可填补每行或每列的平均值或中位数。
按不同类型的数据进行分类:
数值型:
统计值:max,min,mean,std(方差)
离散化:
比如将价格分成不同的段(可以等宽也可以不等宽),每一段表示一个向量,不同的价格可能会是同一个向量。
Hash分桶:
每个类别下对应的变量统计值histogram(分布状况)
可将数值型 => 类别型
幅度调整/归一化
分类类型: 在机器学习过程中,很多模型不能处理非数值型的数据,因此需要对非数值类型数据进行处理编码。
one-hot编码/哑变量
比如红、黄、蓝分别对应一个向量, one-hot编码每一个值对应一个向量。
hash与聚类处理
小技巧:统计每个类别变量下的各个target比例,转化成数值型。
时间型
既可以看做连续值,也可以看做离散值。
1.连续值
持续时间(单页浏览时长)
间隔时间(上次购买/点击距离现在的时间)
2.离散值
列一天中的哪个时间段
一周中星期几
一年中哪个星期
一年中哪个季度
工作日/周末
文本型
词袋
文本数据预处理后,去掉停用词,剩下的词组成list,在词库中映射成稀疏向量。
把词袋中的词扩充到n-gram。
TF-IDF:
TF(Term-Frequency),TF(t)=(词t在当前文中出现的次数)/(t在全部文档中出现的次数)
IDF(t)=ln(总文档数/含t的文档数)
TF-IDF权重=TF(t)*IDF(t)
词袋=>word2vec
统计型
加减平均
分位线
次序型:排在第几位
比例类:比如电商中好/中/差评的比例
组合型
简单组合特征:拼接型
模型特征组合
用GBDT产出组合特征,并将组合特征与原始特征一起放入LR训练。
数据降维之特征选择
Filter(过滤式):VarianceThreshold
Embedded(嵌入式):正则化、决策树
Wrapper(包裹式)
神经网络
XGBoost
XGBoost是分布式梯度增强库。
XGBoost在Gradient Boosting框架下实现机器学习算法。
XGBoost提供并行树提升(也称为GBDT,GBM),可以快速准确地解决许多数据科学问题。
XGBoost是以分类回归树(CART树)进行组合。
什么是残差?
有的,残差的数学公式是:残差=预测值-实际值。
残差图是用来判断拟合模型是否恰当、有无异常的图