凸优化——Lasso

LASSO是1996年Tibshirani提出的,是Least Absolute Shrinkage and Selection Operator,用于线性回归和逻辑回归,通过限制∑∥β∥1来实现变量选择。LASSO问题为凸优化问题,其解在样本数目大于特征数目且X满秩时是唯一的。相比之下,SVM虽然也是凸优化问题,但解不唯一。对于凸优化问题,局部最小值即是全局最小值,这是凸函数的特性。文章还探讨了凸优化的性质、技巧和分类。
摘要由CSDN通过智能技术生成

凸优化问题实例:LASSO

熟悉机器学习算法里面的线性回归或者逻辑回归的同学因该明白LASSO问题,其定义为:

minβRpsubjecttoyXβ22β1s minβ∈Rp∥y−Xβ∥22subjectto∥β∥1≤s

LASSO是Tibshirani(对就是Tibshirani)在1996年JRSSB上的一篇文章上《Regression shrinkage and selection via lasso》提出的。所谓lasso,其全称是least absolute shrinkage and selection operator,其含义是在限制了 β1s ∑∥β∥1≤s的情况下,求使得残差平和达到最小的参数的估值。Tibshirani指出,对于回归算法,当 s s足够小的时候,会使得某些回归系数的估值是0,可以起到变量选择的作用,是逐步回归的一种表现。

因此,对于LASSO算法,其是否是凸优化问题?它的解集合是否是唯一的点?

答案是,LASSO问题是凸优化问题,因为 f(x)=yXβ22 f(x)=∥y−Xβ∥22 g(x)=β1s g(x)=∥β∥1−s均是凸函数,因此该问题为凸优化问题;如果样本数目 n n大于特征数目 p p,且X满秩,那么 2f(β)=2XTX0 ∇2f(β)=2XTX⪰0,关于 β β二阶微分恒为半正定p.s.d.,因此,解是唯一的;但是,如果样本数目 n n小于特征数目 p p,那么会造成高维特征空间上的维数灾难问题,此时,X为奇异矩阵,则解不唯一。

另一个实例是SVM算法,SVM算法的理论部分我就不多介绍了,会在机器学习算法篇章中对SVM做着重介绍,如果我们记SVM为:

minβ,β0,ξsubjectto12β22+Cinξiξi0,i=1,,nyi(xTiβ+β0)1ξi,i=1,,n minβ,β0,ξ12∥β∥22+C∑inξisubjecttoξi≥0,i=1,…,nyi(xiTβ+β0)≥1−ξi,i=1,…,n

其中, 1β 1∥β∥为下图两个虚线边界的距离, ξ ξ为引入分类错误的代价,代表下图错分样本点距正确分类边界的距离。具体如下图:

那么,该问题是否为凸优化问题呢?它的解是否是唯一?

答案是,SVM目标函数是凸优化问题,但是,它的解并不唯一,因为它不是严格凸函数。有兴趣的同学可以留言来解释为什么SVM是凸优化问题!

4. 局部最小值就是全局最小值

局部最优解的定义为:如果 R>0 ∃R>0,使得 f(x)

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
贝叶斯优化是一种基于贝叶斯定理的优化方法,可以用于优化目标函数的参数。Lasso是一种线性回归模型的变种,它通过加入L1正则化项来避免过拟合。下面我来介绍一下如何使用贝叶斯优化来优化Lasso模型的参数。 首先,我们需要安装一些必要的库,包括`numpy`, `scikit-learn`, `scipy`, `matplotlib`, `bayesian-optimization`等。可以使用pip来安装它们: ``` pip install numpy scikit-learn scipy matplotlib bayesian-optimization ``` 然后,我们定义一个Lasso模型,并将它包装在一个函数中,以便可以使用贝叶斯优化进行优化。假设我们想要优化的参数是Lasso模型中的alpha值。我们的函数应该接受alpha作为输入,并返回Lasso模型的交叉验证得分作为输出。这里我使用的是10折交叉验证。 ```python from sklearn.datasets import load_diabetes from sklearn.linear_model import Lasso from sklearn.model_selection import cross_val_score import numpy as np # 加载糖尿病数据集 X, y = load_diabetes(return_X_y=True) # 定义Lasso模型 def lasso_model(alpha): model = Lasso(alpha=alpha) scores = cross_val_score(model, X, y, cv=10) return np.mean(scores) ``` 接下来,我们可以使用`bayesian-optimization`库来进行优化。该库需要我们定义一个目标函数,它接受我们想要优化的参数,并返回一个标量值,表示该参数的优劣程度。 ```python from bayes_opt import BayesianOptimization # 定义目标函数 def target_function(alpha): return lasso_model(alpha) # 定义搜索空间 pbounds = {'alpha': (0.001, 1)} # 创建Bayesian优化器 optimizer = BayesianOptimization( f=target_function, pbounds=pbounds, verbose=2, random_state=1, ) # 进行优化 optimizer.maximize(n_iter=10) ``` 在上述代码中,我们定义了搜索空间为[0.001, 1]之间的alpha值。然后,我们创建了一个Bayesian优化器,并使用`maximize`函数进行优化。在这里,我们指定了迭代次数为10次。 最后,我们可以打印出最优参数和对应的交叉验证得分。 ```python print(optimizer.max) ``` 运行结果类似于: ``` {'target': 0.4646188616207471, 'params': {'alpha': 0.02181818181818182}} ``` 这意味着在alpha=0.0218时,Lasso模型的交叉验证得分最高。所以我们可以使用这个alpha值来训练我们的Lasso模型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值