Lasso回归与岭回归

正则化

正则化是指在损失函数后面添加一个范数,以此防止模型过拟合的方式。

  • 范数定义:
    ∣ ∣ x ∣ ∣ p = ( ∑ i = 1 n ∣ x ∣ p ) 1 p ||x||_p = (\sum_{i=1}^{n}|x|^p)^\frac{1}{p} xp=(i=1nxp)p1
    1)p = 1时,即L1范数:
    ∣ ∣ x ∣ ∣ p = ( ∑ i = 1 n ∣ x ∣ ) ||x||_p = (\sum_{i=1}^{n}|x|) xp=(i=1nx)
    2)p = 2时,即L2范数:
    ∣ ∣ x ∣ ∣ p = ( ∑ i = 1 n ∣ x ∣ 2 ) 1 2 ||x||_p = (\sum_{i=1}^{n}|x|^2)^\frac{1}{2} xp=(i=1nx2)21
    通过对损失函数添加正则项,整体上压缩了参数的大小,从而防止过拟合。

Lasso回归

Lasso回归(Least absolute shrinkage and selection operator / 最小绝对值收敛和选择算子,又称套索算法),损失函数如下:
E = 1 n ∑ i = 1 n ( y − y i ′ ) + λ ∣ ∣ w ∣ ∣ 1 E = \frac{1}{n}\sum_{i=1}^{n}(y-y_i') + \lambda ||w||_1 E=n1i=1n(yyi)+λw1
其中, ∣ ∣ w ∣ ∣ 1 ||w||_1 w1为参数的一范数, λ \lambda λ为权重

岭回归

岭回归的损失函数如下:
E = 1 n ∑ i = 1 n ( y − y i ′ ) + λ ∣ ∣ w ∣ ∣ 2 E = \frac{1}{n}\sum_{i=1}^{n}(y-y_i') + \lambda ||w||_2 E=n1i=1n(yyi)+λw2
其中, ∣ ∣ w ∣ ∣ 2 ||w||_2 w2为参数的二范数, λ \lambda λ为权重

sklearn实现Lasso回归与岭回归

import numpy as np
import sklearn.linear_model as lm
import sklearn.metrics as sm
import matplotlib.pyplot as plt

x, y = [], []
with open('D:\\python\\data\\abnormal.txt', 'r') as f:
    for line in f.readlines():
        data = [float(substr) for substr in line.split(',')]
        x.append(data[:-1])
        y.append(data[-1])
x = np.array(x)
y = np.array(y)

# 1)
# 创建线性回归器
model = lm.LinearRegression()
# 训练线性回归器
model.fit(x, y)
# 预测
pred_y = model.predict(x)

# 2)
# 创建Lasso回归器
model_lasso = lm.Lasso(alpha=0.5, # 损失函数中L1范数的权重
         max_iter=1000 # 最大迭代次数
        )
# 训练Lasso回归器
model_lasso.fit(x, y)
# 预测
pred_y_lasso = model_lasso.predict(x)

# 3)
# 创建岭回归器
model_ridge = lm.Ridge(alpha=200, # 正则强度,改值越大,异常样本权重越小
                       max_iter=1000 # 最大迭代次数
                      )
# 训练岭回归器
model_ridge.fit(x, y)
# 预测
pred_y_ridge = model_ridge.predict(x)

print('--------可视化--------')
plt.figure('Linear & Ridge & Lasso', facecolor='lightgray')
plt.title('Linear & Ridge & Lasso', fontsize=18)
plt.xlabel('x', fontsize=18)
plt.ylabel('y', fontsize=18)
plt.tick_params(labelsize=12)
plt.grid(':')

plt.scatter(x, y, c='red', alpha=0.8, s=60, label='Sample')

plt.plot(x, pred_y, c='yellow', label='Linear')
plt.plot(x, pred_y_lasso, c='blue', label='Lasso')
plt.plot(x, pred_y_ridge, c='green', label='Ridge')

plt.legend()
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
92讲视频课+16大项目实战+课件源码  为什么学习数据分析?       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。      从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。   本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。  二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。  四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。  五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值