scikit-learn中的Lasson回归和Elastic Net回归
来源:互联网 发布:linux jira破解版下载 编辑:程序博客网 时间:2024/06/06 15:53
原理:
我们知道岭回归是使用二范数(平方项)来对代价函数进行有偏分析。Lasson回归则是使用一范数(绝对值项)对代价函数进行有偏分析。而Elastic net是将二者结合,即使用平方项又使用绝对值项。
用法:
>>> from sklearn import linear_model>>> reg = linear_model.Lasso(alpha = 0.1)>>> reg.fit([[0, 0], [1, 1]], [0, 1])Lasso(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=1000, normalize=False, positive=False, precompute=False, random_state=None, selection='cyclic', tol=0.0001, warm_start=False)>>> reg.predict([[1, 1]])array([ 0.8])
源码分析:
在scikit-learn中,class Lasso 继承自class ElasticNet,ElasticNet继承于LinearModel和RegressorMixin,而 fit 方法实现于ElasticNet下。可以看出在scikit中,lasso和elastic net是共用了代码。
代码实现了如下代价公式:
1 / (2 * n_samples) * ||y - Xw||^2_2
+ alpha * l1_ratio * ||w||_1
+ 0.5 * alpha * (1 - l1_ratio) * ||w||^2_2
如果说是lasso调用时,则l1_ratio=1.
PS:其实让l1_ratio=0就是岭回归,为什么岭回归要单独实现一套。。。
fit方法里面调用了enet_path方法:
def enet_path(X, y, l1_ratio=0.5, eps=1e-3, n_alphas=100, alphas=None, precompute='auto', Xy=None, copy_X=True, coef_init=None, verbose=False, return_n_iter=False, positive=False, check_input=True, **params):......for i, alpha in enumerate(alphas): l1_reg = alpha * l1_ratio * n_samples l2_reg = alpha * (1.0 - l1_ratio) * n_samples if not multi_output and sparse.isspmatrix(X): model = cd_fast.sparse_enet_coordinate_descent( coef_, l1_reg, l2_reg, X.data, X.indices, X.indptr, y, X_sparse_scaling, max_iter, tol, rng, random, positive)......
可以看出enet_path方法下调用了cd_fast模块下的sparse_enet_coordinate_descent方法。cd_fast是pyx格式,是使用cython写成的,以提高坐标下降的计算速度。
阅读全文
0 0
- scikit-learn中的Lasson回归和Elastic Net回归
- scikit-learn : 线性回归
- scikit-learn : 岭回归
- scikit-learn 回归基础
- scikit-learn学习:elastic net
- 线性回归-scikit-learn
- 线性回归之scikit-learn
- scikit-learn线性回归源码
- scikit-learn : 线性回归,多元回归,多项式回归
- 用scikit-learn和pandas学习线性回归
- 用scikit-learn和pandas学习线性回归
- 用 Scikit-Learn 和 Pandas 学习线性回归
- 用scikit-learn和pandas学习线性回归
- 【scikit-learn】scikit-learn的线性回归模型
- 【scikit-learn】scikit-learn的线性回归模型
- 【scikit-learn】scikit-learn的线性回归模型
- 使用scikit-learn做线性回归
- scikit-learn学习之回归分析
- SyntaxError: Missing parentheses in call to 'print'
- 1127. ZigZagging on a Tree (30)
- JavaScript 创建对象---原型模式
- Android 你应该知道的的应用冷启动过程分析和优化方案
- bzoj3876 [Ahoi2014&Jsoi2014]支线剧情
- scikit-learn中的Lasson回归和Elastic Net回归
- c++模板类Queue
- 查看Office2016激活情况
- Unity UGUI点击不同Button执行不同的方法(无参方法)
- mysql5.7子查询order by失效问题
- Android应用中的动画详细使用教程
- 设置android的布局文件的背景颜色为黑色
- Python装饰器入门学习(转载)
- SpringMVC 的 Controller 返回各种视图的处理方式(ViewResolver)