Skleran-线性模型-Lasso

Lasso

在这里插入图片描述

sklearn.linear_model.Lasso

class sklearn.linear_model.Lasso(alpha=1.0, fit_intercept=True, normalize=False, 
precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False, 
random_state=None, selection='cyclic')

参数:

alpha:float, optional
	乘以L1项的常数。默认为1.0。alpha=0相当于一个普通的最小二乘,由LinearRegression对象求解。
	出于数值原因,不建议使用alpha=0。
fit_intercept:boolean, optional, default True
	是否计算此模型的截距。如果设置为False,则计算中将不使用截距(即数据应居中)。
normalize:boolean, optional, default False
	当fit_intercept设置为False时,忽略此参数。如果为真,则回归前,通过减去平均值并除以l2范数,
	对回归数X进行归一化。
precompute:True | False | array-like, default=False
	是否使用预计算的程序矩阵加快计算速度。对于稀疏输入,此选项始终为True以保持稀疏性。
copy_X:boolean, optional, default True
	如果为True,将复制X;否则,可能会覆盖它。
max_iter:int, optional
	最大迭代次数
tol:float, optional
	优化公差:如果更新小于tol,则优化代码检查双间隙的最优性,并继续,直到它小于tol。
warm_start:bool, optional
	当设置为True时,重用上一个调用的解决方案以适应初始化,否则,只需删除上一个解决方案。
positive:bool, optional
	当设置为True时,强制系数为正。
random_state:int, RandomState instance or None, optional, default None
	选择要更新的随机特征的伪随机数生成器的种子。
selection:str, default ‘cyclic’
	如果设置为“随机”,则每次迭代都会更新一个随机系数,而不是默认情况下按顺序在特征上循环。
	(设置为“随机”)通常会导致显著更快的收敛,特别是当tol高于1e-4时。

属性:

coef_:array, shape (n_features,) | (n_targets, n_features)
	参数向量(成本函数公式中的w)
sparse_coef_:scipy.sparse matrix, shape (n_features, 1) | (n_targets, n_features)
	拟合系数的稀疏表示_
intercept_:float | array, shape (n_targets,)
	决策函数中的独立项。
n_iter_:int | array-like, shape (n_targets,)
	为达到指定公差而运行的迭代次数

另见:

lars_path
lasso_path
LassoLars
LassoCV
LassoLarsCV
sklearn.decomposition.sparse_encode

方法:

__init__(self, alpha=1.0, fit_intercept=True, normalize=False, precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False, random_state=None, selection='cyclic') 

初始化
fit(self, X, y, check_input=True)
用坐标下降拟合模型。
	参数:
		X:ndarray or scipy.sparse matrix, (n_samples, n_features)
		数据
		y:ndarray, shape (n_samples,) or (n_samples, n_targets)
		标签
		check_input:boolean, (default=True)
		允许绕过多个输入检查。
get_params(self, deep=True)
获取此估计器的参数。
	参数:
	deepbool, default=True
	如果为True,则返回此估计器的参数以及包含的子对象(即估计器)。
		返回:
			params:mapping of string to any
			映射到其值的参数名。
predict(self, X)
用线性模型预测。
	参数:
		X:array_like or sparse matrix, shape (n_samples, n_features)
			样本
	返回:
		C:array, shape (n_samples,)
			预测值
score(self, X, y, sample_weight=None)
	返回预测的决定系数R^2。

	系数R^2定义为(1-u/v),其中u是残差平方和((y_true-y_pred)**2).sum(),
	v是平方和的总和((y_true-y_true.mean())**2).sum()。最好的分数是1.0,
	它可以是负的(因为模型可以任意恶化)。一个常数模型总是预测y的期望值,
	而不考虑输入特性,则得到R^2分数为0.0。
	参数:
		X:array-like of shape (n_samples, n_features)
		测试样本。
		y:array-like of shape (n_samples,) or (n_samples, n_outputs)
		X的真值。
		sample_weight:array-like of shape (n_samples,), default=None
		样本权重。
	返回:
		scorefloat
		得分
set_params(self, **params)
设置此估计器的参数。
	参数:
		**params:dict
		估计参数
	返回:
		Self:object
		估计实例

示例
Lasso和Elastic Net(弹性网络)在稀疏信号上的表现

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/6/19 23:03
# @Author  : LaoChen

"""
对稀疏信号估计Lasso和弹性网回归模型进行比较。
"""

import numpy as np
import matplotlib.pyplot as plt

from sklearn.metrics import r2_score

# #############################################################################
# Generate some sparse data to play with
np.random.seed(42)

n_samples, n_features = 50, 100
X = np.random.randn(n_samples, n_features)

# Decreasing coef w. alternated signs for visualization
idx = np.arange(n_features)
coef = (-1) ** idx * np.exp(-idx / 10)
coef[10:] = 0  # sparsify coef
y = np.dot(X, coef)

# Add noise
y += 0.01 * np.random.normal(size=n_samples)

# Split data in train set and test set
n_samples = X.shape[0]
X_train, y_train = X[:n_samples // 2], y[:n_samples // 2]
X_test, y_test = X[n_samples // 2:], y[n_samples // 2:]

# #############################################################################
# Lasso
from sklearn.linear_model import Lasso

alpha = 0.1
lasso = Lasso(alpha=alpha)

y_pred_lasso = lasso.fit(X_train, y_train).predict(X_test)
r2_score_lasso = r2_score(y_test, y_pred_lasso)
print(lasso)
print("r^2 on test data : %f" % r2_score_lasso)

# #############################################################################
# ElasticNet
from sklearn.linear_model import ElasticNet

enet = ElasticNet(alpha=alpha, l1_ratio=0.7)

y_pred_enet = enet.fit(X_train, y_train).predict(X_test)
r2_score_enet = r2_score(y_test, y_pred_enet)
print(enet)
print("r^2 on test data : %f" % r2_score_enet)

m, s, _ = plt.stem(np.where(enet.coef_)[0], enet.coef_[enet.coef_ != 0],
                   markerfmt='x', label='Elastic net coefficients',
                   use_line_collection=True)
plt.setp([m, s], color="#2ca02c")
m, s, _ = plt.stem(np.where(lasso.coef_)[0], lasso.coef_[lasso.coef_ != 0],
                   markerfmt='x', label='Lasso coefficients',
                   use_line_collection=True)
plt.setp([m, s], color='#ff7f0e')
plt.stem(np.where(coef)[0], coef[coef != 0], label='true coefficients',
         markerfmt='bx', use_line_collection=True)

plt.legend(loc='best')
plt.title("Lasso $R^2$: %.3f, Elastic Net $R^2$: %.3f"
          % (r2_score_lasso, r2_score_enet))
plt.show()

sklearn.linear_model.MultiTaskLasso

在这里插入图片描述

class sklearn.linear_model.MultiTaskLasso(alpha=1.0, fit_intercept=True, normalize=False, 
copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, random_state=None, 
selection='cyclic')
>>> from sklearn import linear_model
>>> clf = linear_model.MultiTaskLasso(alpha=0.1)
>>> clf.fit([[0,0], [1, 1], [2, 2]], [[0, 0], [1, 1], [2, 2]])
MultiTaskLasso(alpha=0.1)
>>> print(clf.coef_)
[[0.89393398 0.        ]
 [0.89393398 0.        ]]
>>> print(clf.intercept_)
[0.10606602 0.10606602]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值