算法笔记(6)-线性模型及Python代码实现

67 篇文章 0 订阅
49 篇文章 3 订阅

线性模型不是特指某一个模型,而是一类模型,常用的线性模型包括线性回归、岭回归、套索回归、逻辑回归和线性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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程研究坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值