欢迎光临散文网 会员登陆 & 注册

机器学习入门到精通!不愧是公认的讲的最好的【机器学习全套教程】同济大佬12小时带

2023-08-26 22:57 作者:风离亭  | 我要投稿

岭回归与Lasso算法:

alpha的作用:调整正则化权重

岭回归:ridge模块

from sklearn.linear_model import Ridge

np.random.seed(42)

m=20

X = 3*np.random.rand(m,1)

y = 0.5 *X +np.random.randn(m,1)/1.5 +1

X_new = np.linspace(0,3,100).reshape(100,1)

def plot_model(model_calss,polynomial,alphas,**model kargs):

for alpha,style in zip(alphas,('b-''g--,'r:')):

model = model calss(alpha,**model kargs)

if polynomial:

model = Pipeline([('poly_features',PolynomialFeatures

(degree =10,include bias = False)).('StandardScaler',

StandardScaler()),(’lin_reg', model)])

model.fit(X,y)

y_new_regul = model.predict(X_new)

lw = 2 if alpha > 0 else 1

plt.plot(X new,y new regul,style, linewidth = lw, label = 'alpha = ['.format(alpha))

plt.plot(X,y,'b.,linewidth =3)

plt.lenged0

plt.figure(figsize=(10,5))

plt.subplot(121)

plot model(Ridge,polynomial=False,alphas = (0,10,100))

plt.subplot(122)

plot_model(Ridge,polynomial=True,alphas = (0,10**-5.1))

 


正则化公式:


 

 

 

逻辑回归优化与调参7:

初始化:将线性回归__init__拿过来

修改labels=np.unique(labels)

 

num_features = self.data.shape[1]

num_unique_labels = np.unique(labels).shape[0]

self.theta = np.zeros((num_unique_labels,num_features))

 

L1正则与L2正则8:

对原始损失函数引入额外信息,以便防止过拟合和提高模型泛化性能的一类方法的统称

中文称作L1正则化和L2正则化,或者L1范数和L2范数(L1实际是L2范数的平方)。

使用L1正则化的模型叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)。

L1正则损失函数:

L2正则损失函数:

 

L1正则化是指权值向量w中各个元素的绝对值之和,通常表示为||w||1。

L2正则化是指权值向量w中各个元素的平方和然后再求平方根(可以看到Ridge回归的L2正则化项有平方符号),通常表示为∥w∥22

 

一般都会在正则化项之前添加一个系数λ。Python中用α表示,这个系数需要用户指定(也就是我们要调的超参)。

 

L1正则化可以使得参数稀疏化,即得到的参数是一个稀疏矩阵,可以用于特征选择。

稀疏性,说白了就是模型的很多参数是0。通常机器学习中特征数量很多,例如文本处理时,如果将一个词组(term)作为一个特征,那么特征数量会达到上万个(bigram)。在预测或分类时,那么多特征显然难以选择,但是如果代入这些特征得到的模型是一个稀疏模型,很多参数是0,表示只有少数特征对这个模型有贡献,绝大部分特征是没有贡献的,即使去掉对模型也没有什么影响,此时我们就可以只关注系数是非零值的特征。这相当于对模型进行了一次特征选择,只留下一些比较重要的特征,提高模型的泛化能力,降低过拟合的可能。

 

“带正则项”和”带约束条件”是等价的

 

s.t.:subject to受限于

 

问题转化成了带约束条件的凸优化问题,写出拉格朗日函数(易知Loss函数是凸优化问题):

设W∗和λ∗是原问题的最优解,则根据KKT条件得:

λ∗>=0就是在曲图式的上方极值点

 

L1正则化是权值的绝对值之和,J是带有绝对值符号的函数,因此J是不完全可微的。机器学习的任务就是要通过一些方法(比如梯度下降)求出损失函数的最小值。

此时我们的任务变成在L约束下求出J0取最小值的解。

 

考虑二维的情况,即只有两个权值w1和w2,此时L=|w1|+|w2|对于梯度下降法,求解J0的过程可以画出等值线,同时L1正则化的函数L也可以在w1、w2的二维平面上画出来。

 


越往里相交的点越最优

上图中等值线是J0的等值线,黑色方形是L函数的图形。在图中,当J0等值线与L图形首次相交的地方就是最优解。上图中J0与L在L的一个顶点处相交,这个顶点就是最优解。注意到这个顶点的值是(w1,w2)=(0,w2)

。可以直观想象,因为L函数有很多突出的角(二维情况下四个,多维情况下更多),J0与这些角接触的机率会远大于与L其它部位接触的机率,而在这些角上,会有很多权值等于0,这就是为什么L1正则化可以产生稀疏模型,进而可以用于特征选择。

 

而正则化前面的系数λ,可以控制L图形的大小。λ越小,L的图形越大(上图中的黑色方框);λ 越大,L的图形就越小,可以小到黑色方框只超出原点范围一点点,这是最优点的值(w1,w2)=(0,w2)中的w2可以取到很小的值。

因为训练集的不规则,L2函数仍具有一定的稀疏性.

 

正则化底层原理9:

拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是抗扰动能力强。

 

而正则化可以获得值很小的参数:λ 越大,L2圆的半径越小,最后求得代价函数最值时各参数也会变得很小

 

 

 

拉格朗日乘数法9:

是一种寻找变量受一个或多个条件所限制的多元函数的极值的方法(梯度极值) 这种方法将一个有n 个变量与k 个约束条件的最优化问题转换为一个有n + k个变量的方程组的极值问题,n+k变量不受任何约束

这种方法引入了一种新的标量未知数,即拉格朗日乘数,就是约束方程的梯度(gradient)的线性组合里每个向量的系数

此方法的证明牵涉到偏微分,全微分或链法,从而找到能让设出的隐函数的微分为零的未知数的值。                                                  

 

隐函数: 如果方程F(x,y)=0能确定y是x的函数,那么称这种方式表示的函数是隐函数

 

例子:

设给定二元函数z=ƒ(x,y)和附加条件φ(x,y)=0,为寻找z=ƒ(x,y)在附加条件下的极值点,先做拉格朗日函数

其中, λ为参数

令F(x,y,λ)对x和y和λ的一阶偏导数等于零,用λ来凑,即

 

F'x=ƒ'x(x,y)+λφ'x(x,y)=0

 

F'y=ƒ'y(x,y)+λφ'y(x,y)=0

 

F'λ=φ(x,y)=0


曲线L为约束条件φ(x,y);f(x,y)=C为目标线族

极值点从几何上看,必是目标函数等值线曲线族中与约束条件曲线能相切的那个切点。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

最优参数-凸优化基础Convex Optimization basics 8:

步长可以考虑衰减步长来优化

 

SciPy's truncated newton(TNC)9:

fmin_tnc ( func , x0 , fprime = None , args = () , approx_grad = 0 , bounds = None , epsilon = 1e-08 , scale = None , offset = None , messages = 15 , maxCGit = -1 , maxfun = None , eta = -1 ,步长x= 0、精度= 0、 fmin = 0、 ftol = -1、 xtol = -1、 pgtol = -1、重新缩放= -1、 disp = None、回调= None)[来源]

 

该函数用于流式的在线学习大数据问题(无法将所有数据装入内存)

截断梯度法(Truncated Gradient)即此:与梯度下降是一种东西的

 

L1正则能够产生稀疏的解。为了能够在利用在线学习的同时产生稀疏解,最直接的想法是采用截断的方法,截断,即通过某个阈值来控制系数的大小,若系数小于某个阈值便将该系数设置为0,这便是简单截断的含义。

 

 

1.简单截断:

简单截断的含义是给定某个阈值,在在线学习的过程中,每隔K步进行一次截断,截断是指将小于阈值theta的系数直接赋值为0,具体的形式如下:

该方法的主要缺点是对于K值得选择是很难解决的问题,其次是通过简单截断,有点太暴力。简单截断可以应用于每一次学习,但它可能会导致模型在生成时不完整或不连贯。缺少上下文.

 

2.次梯度:

对于可导的凸函数,我们通常使用常规的梯度下降法处理,但当目标函数不可导(在某些点上导数不存在)时,我们就没法使用常规的梯度下降法处理。于是引入次梯度(Subgradient)用于解决此类目标函数并不总是处处可导的问题。

不足之处就是算法收敛速度慢。

 

对于凸函数f,如果它可导,那么对∀x,y∈domf ,都有:

标量的转置还是它本身

g为次梯度

凸函数总有次梯度,非凸函数即使可微也不一定有次梯度。凸函数的次微分总是非空,凹函数的次微分是空集。

将f在x处所有次梯度构成的集合称为f在x处的次微分(Subdifferential)

例如y=|x|,则g={sgn(x) ,x≠0  

 {any∈[-1,1] ,x=0

其中sgn为符号函数,any表示任意一个元素。

Sgn 函数返回一个整型变量,指出参数的正负号

 

用次梯度对原函数做出的一阶展开估计总是比真实值要小

 

 

 

 

 

 

 

 

 

 

 


若lasso问题训练时本身没有权重权重项:

可化简为:

 

lamda>0

可以得到软阈值算子soft_threshold:


 

 

次梯度法有O(1/ϵ2)的收敛率,其慢于梯度下降的O(1/ϵ)收敛率。

 

 

 

3.截断梯度法:

在截断梯度法中,将截断的步骤适当放缓,其具体的更新公式如下:

 

gi称为重力参数(gravity parameter),截断函数Ti的具体形式如下:

与简单截断类似,每隔K次对参数gi进行更新,其更新公式如下:


其中,gi可以通过调节参数g和参数theta控制稀疏度,参数g和参数theta越大,解越稀疏。

 

 

[亮张1] 4.投影次梯度法projected subgradient method:

在可微函数中,负梯度方向是函数的下降方向,而在不可微函数中,负次梯度方向将不一定是下降方向,函数的光滑将不再满足

考虑约束条件的情况下,投影次梯度法在每一次迭代中计算目标函数的次梯度(subgradient),然后将次梯度的负方向作为搜索方向。这样可以朝着目标函数的下降方向更新变量值,以减小目标函数的值。同时,为了满足约束条件,投影次梯度法还会对更新后的变量值进行投影操作,将其限制在可行解空间内

若不考虑约束条件,直接沿次梯度的反方向更新变量值有可能会导致超出约束域的范围,得到非可行解。

为了避免这种情况,投影次梯度法引入了投影运算。投影运算将迭代更新得到的变量值限制在可行解空间内,确保每次迭代都满足约束条件。通过将变量投影回可行解空间,投影次梯度法可以保证求解的解是可行解,从而有效地控制优化过程。

凸集(Convex set)是一个点集合,其中每两点之间的线段点都落在该点集合中。

区间是实数的凸集。

依据定义,中空的圆形称为圆(circle),它不是凸集;实心的圆形称为圆盘(disk),它是凸集。

凸多边形是欧几理得平面上的凸集,它们的每只角都小于180度。

单纯形是凸集,对于单纯形的顶点集合来说,单纯形是它们的最小凸集,所以单纯形也是一个凸包。

定宽曲线是凸集。

在可微函数中,负梯度方向是函数的下降方向,而在不可微函数中,负次梯度方向将不一定是下降方向,函数的光滑将不再满足,之前多次采用的由光滑性导出的Descent lemma 将不再成立。

 

公式:

   P(G(x))

P()是投影算子,G(x)计算梯度

 

 

 

5.近端梯度法Proximal Gradient Descent:

有没有既可求不可导,又收敛快的梯度下降方法?

 

前提条件: 可分解的目标函数

考虑一个目标函数可以分解为如下形式的两个函数

                            

g(x)是凸函数且是可微分的,h(x)也是凸函数但可能不可微

 

三级收敛速率中近端梯度下降最快

 

如果f不可微,但可以分解为上述的两个函数g和h,则我们仍然可以使用平滑部分g的二次近似来定义向最小值走的一步:


 

近端映射(proximal mapping)

对于这样的凸优化问题,需定义近端映射算子

arg 是变元(即自变量argument)的英文缩写。arg min 就是使后面这个式子达到最小值时的变量的取值

 

这里的prox(x)=>赋给z

不可微函数h(x)分别为0,Ic(x)和||x||1时

分别是常规梯度下降,投影梯度下降,和软阈值算法.

 

例:近端梯度下降法求解lasso问题

 

scipy:minimize(method=’TNC’)

https://blog.csdn.net/qq_38048756/article/details/103208834

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

对偶duality 1:

线性规划对偶:

 

假设我们想要寻找一个凸优化问题的下界(lower bound),即寻找B ≤ min[f(x)],以线性规划(LP)问题为例,考虑一个简单的LP问题:

   min p*x+q*y

   s.t. x+y=2

   x,y>=0

那么对于任意a,b,c≥0,都有p*x + q*y = (a + b)*x + (a + c)*y = (a*x + a*y) + b*x + b*y ≥ 2*a

 

更一般的形式:

min px+qy

subject to  x+y≥2

x,y≥0

一步转化⇒

∀a,b,c>=0 , px+qy=(a+b)x+(a+c)y=(ax+ay)+bx+cy≥2a。

再转化⇒

max 2a

subject to  a+b=p

a+c=q

a,b,c≥0

我们把上面的形式称为原问题(primal LP)的对偶(dual LP)。注意到对偶变量的数量等于该问题的约束条件数目(这里都为3)。

 

min cx

subject toAx=b

Gx≤h

其对偶:

max −bTu−hTv

解释:∀u,v>0,

 

所以如果令c = − ATu − GTv , 那么我们就可以得到原问题的一个下界

 

例子:最大流最小割(max flow and min cut)

给定一个图G = ( V,E ),定义流(flow)fij , ( i,j )∈E满足:

(所有流都是正的)

(所有流都是有限的)

(除了始末节点外,流入某个节点的所有流等于流出该节点的所有流)

最大流问题:找到从s流向t的所有流的最大值。这是一个LP问题:

 

 

机器学习入门到精通!不愧是公认的讲的最好的【机器学习全套教程】同济大佬12小时带的评论 (共 条)

分享到微博请遵守国家法律