线性模型不是特指某一个模型,而是一类模型,常用的线性模型包括线性回归、岭回归、套索回归、逻辑回归和线性SVC等。
线性回归和岭回归对比图如下:
线性回归和岭回归对比图
套索回归和岭回归对比图如下:
套索回归和岭回归对比图
最小二乘法
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差(真实目标对象与拟合目标对象的差)的平方和寻找数据的最佳函数匹配。
最基本的模型----线性回归
线性回归也称为普通最小二乘法(OLS),线性回归的原理是找到训练数据集中y的预测值和其真实值的平方差最小的时候,所对应的w值和b值。线性回归没有可供用户调节的参数。
python代码实现
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
X, y = make_regression(n_samples=100,n_features=2,n_informative=2,random_state=38)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8)
lr = LinearRegression().fit(X_train, y_train)
print("lr.coef_: {}".format(lr.coef_[:]))
print("lr.intercept_: {}".format(lr.intercept_))
输出结果:
lr.coef_: [70.38592453 7.43213621]
lr.intercept_: -1.4210854715202004e-14
线性回归模型方程可以表示为:y=70.38592453X1+ 7.43213621X2-1.4210854715202004e-14
使用L2正则化的线性模型-岭回归
是一种改良的最小二乘法,模型会保留所有的特征变量,但是会减少特征变量的系数值,让特征变量对预测结果的影响变小。如果我们更在意模型在泛化方面的表现,那么我们就应该选择岭回归模型,而不是线性回归模型。
python代码实现
#%%
from sklearn.datasets import load_diabetes
#X, y = make_regression(n_samples=500,n_features=50,n_informative=25,noise=500,
#random_state=8)
X, y = load_diabetes().data, load_diabetes().target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 8)
ridge01 = Ridge(alpha=0.1).fit(X_train, y_train)
print("训练数据得分:{:.2f}".format(ridge01.score(X_train, y_train)))
print("测试数据的分:{:.2f}".format(ridge01.score(X_test, y_test)))
#%%
输出结果:
训练数据得分:0.52
测试数据得分:0.47
使用L1正则化的线性模型-套索回归
套索回归有一部分特征的系数会正好等于0
python代码实现
#%%
lasso00001 = Lasso(alpha=0.0001, max_iter=100000).fit(X_train, y_train)
print("alpha=0.0001时套索回归在训练数据集的得分:{:.2f}".format(lasso00001.score(X_train, y_train)))
print("alpha=0.0001时套索回归在测试数据集的得分:{:.2f}".format(lasso00001.score(X_test, y_test)))
print("alpha=0.0001时套索回归使用的特征数:{}".format(np.sum(lasso00001.coef_ != 0)))
#%%
输出结果:
alpha=0.0001时套索回归在训练数据集的得分:0.53
alpha=0.0001时套索回归在测试数据集的得分:0.46
alpha=0.0001时套索回归使用的特征数:10
网友评论