做者:Benjamin Obi Tayo Ph.D.算法
翻译:老齐bash
与本文相关的图书:《数据准备和特征工程》微信
LASSO回归是对回归算法正则化的一个例子。正则化是一种方法,它经过增长额外参数来解决过拟合问题,从而减小模型的参数、限制复杂度。正则化线性回归最经常使用的三种方法是岭回归、最小绝对值收敛和选择算子(LASSO)以及弹性网络回归。markdown
在本文中,我将重点介绍LASSO,而且对岭回归和弹性网络回归作简单的扩展。网络
假设咱们想在一个数据集上创建一个正则化回归模型,这个数据集包含n个观察和m个特征。app
LASSO回归是一个L1惩罚模型,咱们只需将L1范数添加到最小二乘的代价函数中:dom
看这里函数
经过增大超参数α的值,咱们增强了模型的正则化强度,并下降了模型的权重。请注意,没有把截距项w0正则化,还要注意α=0对应于标准回归。oop
经过调整正则化的强度,某些权重能够变为零,这使得LASSO方法成为一种很是强大的降维技巧。测试
咱们将使用邮轮数据集cruise_ship_info.csv来演示LASSO技术
本案例已经发布在实验平台,请关注微信公众号:老齐教室。并回复:
#姓名+手机号+案例#
获取。注意:#
必需要有。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
复制代码
df = pd.read_csv("cruise_ship_info.csv") df.head() 复制代码
从《数据准备和特征工程》中的有关阐述可知,协方差矩阵图可用于特征选择和降维。从前述数据集中发现,在6个预测特征( [‘age’, ‘tonnage’, ‘passengers’, ‘length’, ‘cabins’, ‘passenger_density’]
)中,若是咱们假设重要特征与目标变量的相关系数为0.6或更大,那么目标变量“crew”与4个预测变量“tonnage”, “passengers”, “length, and “cabins”的相关性很强。所以,咱们可以将特征空间的维数从6减小到4。
cols_selected = ['Tonnage', 'passengers', 'length', 'cabins','crew'] df[cols_selected].head() 复制代码
X = df[cols_selected].iloc[:,0:4].values # features matrix y = df[cols_selected]['crew'].values # target variable 复制代码
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split( X, y,
test_size=0.4, random_state=0)
复制代码
from sklearn.preprocessing import StandardScaler
sc_y = StandardScaler()
sc_x = StandardScaler()
y_std = sc_y.fit_transform(y_train[:, np.newaxis]).flatten()
X_train_std = sc_x.fit_transform(X_train)
X_test_std = sc_x.transform(X_test)
y_train_std = sc_y.fit_transform(y_train[:, np.newaxis]).flatten()
复制代码
from sklearn.linear_model import Lasso from sklearn.metrics import r2_score alpha = np.linspace(0.01,0.4,10) r2_train =[] r2_test =[] norm = [] alpha = np.linspace(0.01,0.4,10) for i in range(10): lasso = Lasso(alpha = alpha[i]) lasso.fit(X_train_std,y_train_std) y_train_std = lasso.predict(X_train_std) y_test_std = lasso.predict(X_test_std) r2_train = np.append(r2_train, r2_score(y_train,sc_y.inverse_transform(y_train_std))) r2_test = np.append(r2_test, r2_score(y_test,sc_y.inverse_transform(y_test_std))) norm = np.append(norm,np.linalg.norm(lasso.coef_)) 复制代码
plt.figure(figsize=(8,6)) plt.scatter(alpha,r2_train,label='r2_train') plt.plot(alpha,r2_train) plt.scatter(alpha,r2_test,label='r2_test') plt.plot(alpha,r2_test) plt.scatter(alpha,norm,label = 'norm') plt.plot(alpha,norm) plt.ylim(-0.1,1) plt.xlim(0,.43) plt.xlabel('alpha', size = 14) plt.ylabel('R2_score',size = 14) plt.legend() plt.show() 复制代码
咱们观察到,随着正则化参数α的增长,回归系数的范数变得愈来愈小。这意味着更多的回归系数被强制为零,这会增长误差(模型过分简化)。α保持较低值时,好比α=0.1或更低时,是误差和方差的最佳平衡点。在决定使用哪一种降维方法以前,应将该方法与主成分分析法(PCA)进行比较。
原文连接:towardsdatascience.com/lasso-regre…
搜索技术问答的公众号:老齐教室
在公众号中回复:老齐,可查看全部文章、书籍、课程。