- 拉索回歸可以將一些權重壓縮到零,從而實現特征選擇。這意味著模型最終可能只包含一部分特征。
- 適用于特征數量遠大于樣本數量的情況,或者當特征間存在相關性時,可以從中選擇最相關的特征。
- 拉索回歸產生的模型可能更簡單,因為它會去除一些不重要的特征。
API
sklearn.linear_model.Lasso()
參數:
alpha (float, default=1.0):
控制正則化強度;必須是非負浮點數。較大的 alpha 增加了正則化強度。
fit_intercept (bool, default=True):
是否計算此模型的截距。如果設置為 False,則不會使用截距(即數據應該已經被居中)。
precompute (bool or array-like, default=False):
如果為 True,則使用預計算的 Gram 矩陣來加速計算。如果為數組,則使用提供的 Gram 矩陣。
copy_X (bool, default=True):
如果為 True,則復制數據 X,否則可能對其進行修改。
max_iter (int, default=1000):
最大迭代次數。
tol (float, default=1e-4):
精度閾值。如果更新后的系數向量減去之前的系數向量的無窮范數除以 1 加上更新后的系數向量的無窮范數小于 tol,則認為收斂。
warm_start (bool, default=False):
當設置為 True 時,再次調用 fit 方法會重新使用之前調用 fit 方法的結果作為初始估計值,而不是清零它們。
positive (bool, default=False):
當設置為 True 時,強制系數為非負。
random_state (int, RandomState instance, default=None):
隨機數生成器的狀態。用于隨機初始化坐標下降算法中的隨機選擇。
selection ({'cyclic', 'random'}, default='cyclic'):
如果設置為 'random',則隨機選擇坐標進行更新。如果設置為 'cyclic',則按照循環順序選擇坐標。
屬性:
coef_
系數向量或者矩陣,代表了每個特征的權重。
intercept_
截距項(如果 fit_intercept=True)。
n_iter_
實際使用的迭代次數。
n_features_in_ (int):
訓練樣本中特征的數量。
?
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_california_housing
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_errorx,y = fetch_california_housing(return_X_y=True,data_home = "./src")x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.2,random_state = 42)
scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)
x_train = scaler.fit_transform(x_train)model = Lasso(alpha =0.01,max_iter = 100,fit_intercept=True)
#調節alpha越大出現的零越多,因此拉索回歸自帶降維
model.fit(x_train,y_train)y_hat = model.predict(x_test)
print("loss:",mean_squared_error(y_test,y_hat))
print("w:",model.coef_)
print("b:",model.intercept_)