【机器学习】岭回归和LASSO回归详解以及相关计算实例-加利福尼亚的房价数据集、红酒数据集

news2025/7/19 6:23:12

文章目录

  • 一,岭回归和LASSO回归
    • 1.1 多重共线性
    • 1.2 岭回归接手
    • 1.3 线性回归的漏洞(线性系数的矛盾解释)
    • 1.4 Ridge Regression
    • 1.5 岭回归实例(加利福尼亚的房价数据集)
    • 1.6 MSE
    • 1.7 LASSO
    • 1.8 Ridge岭回归和Lasso套索回归的比较
    • 1.9 Lasso套索回归实例(红酒数据集)

一,岭回归和LASSO回归

1.1 多重共线性

处理多重共线性最直接的方法是手动移除共线性的变量:即先对数据进行相关分析,若两个特征的相关系数大于某特定值(一般为0.7),则手动移除其中一个特征,再继续做回归分析。

这种做法会导致估计结果产生偏差,会引起遗漏变量问题。而且有时数据特征本来就很少,或并不想直接删除特征,此时可考虑其他更加有效的方法。

岭回归(Ridge Regression)是一种改良的最小二乘法,其通过放弃最小二乘法的无偏性,以损失部分信息为代价来寻找效果稍差但回归系数更符合实际情况的模型方程该模型求解的回归模型的损失函数为线性最小二乘函数,正则化采用L2-范数。称为岭回归

岭索法合回归(Ridge Regression)与套家回归3((Lasso Regression) 两个算不是为了提升模型表现,而是为了修复漏洞而设计的。

1.2 岭回归接手

从数据发现,自变量身长、自变量头围的VIF值均大于200,VIF指标是非常不错的共线性的指针,一般上,当VIF>10,即可怀疑存在共线性问题了。

也就是说,身长和头围这两个属性/特征存在较为严重的共线性问题。如果强行拟合线性回归的话,模型不可用。但是医师就是要研究身长、头围、体重和周龄的关系,我们还不能直接剔除。
显然普通线性回归已经不合适了,需要使用岭回归。

image-20221118085319829

1.3 线性回归的漏洞(线性系数的矛盾解释)

某医师希望通过B超影像里胎儿的身长、头围、体重来预测胎儿周龄,这些观测值均是连续性数值变量,所以很容易想到建立一个多重线性回归方程来解决问题。

image-20221118085353726

周龄为因变量,体重、身长、头围为自变量的回归方程,调整后R2=0.971,说明模型拟合的不错。

1.4 Ridge Regression

正则化项是参数的L2范数时,回归方法就叫做岭回归。因为权重系数随lambda变化呈山脊状,等于零时为最小二乘。相应损失函数:

image-20221116092211338

image-20221118085647827

选择lambda的范围意味着要进行最优参数的选择。一般使用岭迹图来判断正则项参数的最佳取值。传统的岭迹图如上图,形似一个开口的喇叭图(根据横坐标的正负,喇叭有可能朝右或者朝左)。正则化参数为横坐标,线性模型求解的权重系数w为纵坐标,每一条彩色的线都是一个系数w,以此来观察正则化参数的变化如何影响了系数w的拟合。岭迹图认为,线条交叉越多,则说明特征之间的多重共线性越高。我们应该选择系数较为平稳的喇叭口所对应的alpha取值作为最佳的正则化参数的取值。

1.5 岭回归实例(加利福尼亚的房价数据集)

1.采用加利福尼亚的房价数据集(事前准备)

from sklearn.datasets import fetch_california_housing
import pandas as pd
housing = fetch_california_housing()
X = housing.data
y = housing.target
df=pd.DataFrame()
  1. 循环获取到数据集的特征值:
for i in range(8):
    df[housing["feature_names"][i]]=X[:,i]
df["target"]=y

3.以csv形式存储,然后再拿出来。

df.to_csv("fetch_california_housing.csv",index=None)
df2=pd.read_csv("fetch_california_housing.csv")
pd.set_option('display.max_column', None)

4.输出查看一下:

df.describe()
print(df2)
print(df2.info)
print(df.describe())

image-20221118093337449

5.盒图

import  matplotlib.pyplot as plt
plt.boxplot(X[:,0],showmeans=True,meanline=True)
plt.show()

image-20221118093418710

6.线性回归

import matplotlib.pyplot as plt
import numpy as np
plt.scatter(df.iloc[:,:1].values,y,color="red")
plt.scatter(df.iloc[:,:1].values,y)
plt.scatter(df.iloc[:,:1].values,np.dot(df.iloc[:,:1].values,linear.coef_)+linear.intercept_)
plt.show()

image-20221118093608599

7.岭迹图,使用 sklearn 函数计算:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

plt.figure(figsize=(18, 18))

from sklearn import linear_model
linear = linear_model.Ridge(fit_intercept=False)

def ridgeCalc(dataSet):
    numTestPts = 30
    wMat = np.zeros((numTestPts, dataSet.shape[1]-1))
    for i in range(numTestPts):
        linear.set_params(alpha = np.exp(i-10))
        linear.fit(dataSet.iloc[:, :-1].values, dataSet.iloc[:, -1].values)
        wMat[i,:] = linear.coef_
    return wMat

ridgeWeights = ridgeCalc(df)
plt.plot(ridgeWeights)
plt.xlabel('log(lambda)')
plt.ylabel('weights')
plt.show()

结果如下:

image-20221118093656967

1.6 MSE

image-20221118085518929是有偏估计,但是image-20221118085542168

image-20221118085548575

image-20221118085600809

1.7 LASSO

Lasso从根本上来说不是解决多重共线性问题,而是限制多重共线性带来的影响及特征选择工具。

image-20221118090042353

虽然Lasso是为了限制多重共线性,然而我们其实并不使用它来抑制多重共线性,而是发挥其在其他方面的优势。L1和L2正则化一个核心差异就是他们对系数w的影响:
两个正则化都会压缩系数w的大小,对标签贡献更少的特征的系数会更小,也会更容易被压缩。不过,L2正则化只会将系数压缩到尽量接近0,但L1正则化主导稀疏性,因此会将系数压缩到0。这个性质,让Lasso成为了线性模型中的特征选择工具的首选。

左为Lasso 回归,右为岭回归。β1,β2是要优化的模型参数。红色椭圆为目标函数,蓝色区域是解空间

image-20221118095250100

1.8 Ridge岭回归和Lasso套索回归的比较

无论岭回归还是Lasso回归, 本质都是通过调节入来实现模型误差和方差的平衡调整。红色的椭圆和蓝色的区域的切点就是目标函数的最优解。
可划二个泰相的稳定,.5回比以看出Lasso的最优解更容易切到坐标轴上, 形成稀疏结果(某在机器学习中,面对海量的数据,首先需要降维,争取用尽可能一少些>的数据解决问题, Lasso方法可以将特征的系数进行压缩并使某系数变为0.进而达到特征选择的目的,尔可以广泛地应用三模型改进与选择。

1.9 Lasso套索回归实例(红酒数据集)

1.采用load_wine红酒数据集:

from sklearn.datasets import load_wine
import pandas as pd
wine = load_wine()
X=wine.data
y=wine.target
df=pd.DataFrame()
  1. 十三组数据集:
for i in range(13):
    df[wine["feature_names"][i]]=X[:,i]
df["target"]=y
pd.set_option('display.max_column', None)
df.describe()

3.岭迹图,使用 sklearn 函数计算

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

plt.figure(figsize=(18, 18))

from sklearn import linear_model
linear = linear_model.Ridge(fit_intercept=False)

def ridgeCalc(dataSet):
    numTestPts = 30
    wMat = np.zeros((numTestPts, dataSet.shape[1]-1))
    for i in range(numTestPts):
        linear.set_params(alpha = np.exp(i-10))
        linear.fit(dataSet.iloc[:, :-1].values, dataSet.iloc[:, -1].values)
        wMat[i,:] = linear.coef_
    return wMat

ridgeWeights = ridgeCalc(df)
plt.plot(ridgeWeights)
plt.xlabel('log(lambda)')
plt.ylabel('weights')
plt.show()

运行结果如下:

image-20221118103257192

  1. Lasso 特征选择
    • 按列归一化,使用 zero-score 零均值归一化算法
wine_X = X.copy()
for i in range(X.shape[1]):
    column_X = X[:, i]
    wine_X[:, i] = (column_X - column_X.mean())/column_X.std()

5.Lasso 回归

from sklearn import linear_model
model = linear_model.Lasso(alpha=np.exp(7-10), fit_intercept=False)
model.fit(wine_X, y)
print(model.coef_)

coef = pd.Series(model.coef_, index=df.drop('target', axis=1, inplace=False).columns)
print(coef[coef != 0].abs().sort_values(ascending = False))

image-20221118103409482

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H5基本开发2——(HTML常见标签)

常见标签说明 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <meta http-equiv"X-UA-Compatible&q…

Elasticsearch安装

1.Linux下使用Elasticsearch 本教程所有操作均在CentOS 7.x环境下进行。 elasticsearch基于java进行开发&#xff0c;所以在运行elasticsearch之前需要安装jdk yum -y install java-1.8.0-openjdk 1.1.安装和配置 即将开始在centos 7 下安装Elasticsearch 1.1.1.新建一个用…

(四)QCustomPlot柱形图动态显示实例开发

系列文章目录 提示&#xff1a;这里是该系列文章的所有文章的目录 第一章&#xff1a; &#xff08;一&#xff09;QCustomPlot常见属性设置、多曲线绘制、动态曲线绘制、生成游标、矩形放大等功能实现 第二章&#xff1a; &#xff08;二&#xff09;QCustomPlot生成热力图/矩…

【数据结构与算法】递归全流程详细剖析 | 详解图的深度优先遍历

&#x1f680; 作者 &#xff1a;“大数据小禅” &#x1f680;文章简介&#xff1a;本篇文章属于数据结构与算法系列文章&#xff0c;这篇文章会对算法中的递归进行一个详细的介绍&#xff0c;不仅是概念&#xff0c;而是从运行过程中的每一步进行详细分析。并使用递归的方式来…

Vue3 - 使用 mitt.js 进行组件通信(兄弟关系)

前言 在 Vue2 中&#xff0c;两个同级&#xff08;兄弟关系&#xff09;的组件传递数据&#xff0c;都是利用一个叫 EventBus 事件总线&#xff0c;利用这根总线&#xff0c;可以让两个毫无关系的组件进行通信。 其实这个问题的本质核心解决方案&#xff0c;就一句话。通过第三…

开传奇需要什么技术要什么条件

开传奇需要什么技术要什么条件 对于这个问题&#xff0c;近期问的人比较多。这也是热爱传奇这个游戏的朋友会问到的一个问题&#xff0c;因为喜欢玩这个游戏&#xff0c;也想要自己去开一个经营一个 不管是电脑端还是手机端。但是对于一些新手确实不知道该如何开始操作从哪些方…

基于PHP+MySQL的校园二手旧书回收捐赠系统

校园内因为所教授的课程比较多,人数基数也比较大,所以每年都会产生大量的二手废旧图书,很多时候这些图书还可以进行二次利用,如果直接当废品进行回收很暴殄天物的,所以为了能够让这些校园内的二手图书得到更多的利用,我们开发了PHP校园二手旧书回收捐赠系统 本系统分为前台和后…

「Redis数据结构」压缩列表(ZipList)

「Redis数据结构」压缩列表&#xff08;ZipList&#xff09; 文章目录「Redis数据结构」压缩列表&#xff08;ZipList&#xff09;一、概述二、结构三、连锁更新问题四、压缩列表的缺陷五、小结参考ZipList 是一种特殊的“双端链表” &#xff0c;由一系列特殊编码的连续内存块…

基于协同过滤进行金融产品个性化推荐 代码+数据

1.案例简介 (1)方法概述: 本教程包含如下内容: 从原始的数据文件中加载数据,进行训练集和测试集的切分。 对数据分batch, 利用用户侧信息,和商品侧信息,进行双塔模型的训练 结果展示 (2)宏观流程图 (3)案例知识点 pytorch 视频CTR预估指标 博客point wise 以及 pair wise …

从0到1图文教你如何将spring boot项目部署到minikube中去

这里是weihubeats,觉得文章不错可以关注公众号小奏技术&#xff0c;文章首发。拒绝营销号&#xff0c;拒绝标题党 源码 本项目博文的源码已上传github&#xff0c;有需要自取 github: https://github.com/weihubeats/weihubeats_demos/tree/master/spring-boot-demos/spring-…

C#界面里Control.Enabled 属性的使用

C#界面里Control.Enabled 属性的使用 在开发中即使一个细节也可以决定成败。 前段时间刚好是毕业季,公司招聘了很多应界毕业生, 由于项目非常多,许多老手都已经分配到各个项目上去,还有一些小项目不得不让这些新生力军来接手。 这些初生牛犊不怕虎,天天加班,夜夜苦战…

idea打开之前的项目不能正常编译/idea中项目Compile output丢失问题

报错笔记 文章目录错误一&#xff1a;Cannot resolve class or package java错误二&#xff1a;Compile output丢失问题下面的报错发生情况都是打开之前写的JavaWeb文件时&#xff0c;各个文件中的代码爆红错误一&#xff1a;Cannot resolve class or package ‘java’ 在idea…

【安卓应用渗透】第一篇:安卓逆向回顾和梳理-2211

文章目录安卓开发课程回顾第一课&#xff1a;安卓项目文件结构&#xff08;逻辑视图&#xff09;第五课&#xff1a;文件读取和数据库存取文件存取SQLite数据库存取安卓开发&#xff1a;案前资料库安卓逆向课程回顾第一课&#xff1a;基础逆向工具&#xff08;Apktool, Keytool…

【分享】订阅金蝶云进销存集简云连接器同步销货数据至金蝶云进销存系统

方案场景 在企业规模不断壮大的过程中&#xff0c;企业都是在钉钉内提交OA审批&#xff0c;并通过人工的方式统计多种审批数据&#xff0c;然后手动导入到某系统内&#xff0c;如果中间有调整又需要从头再进行核对&#xff0c;繁琐的流程严重影响了业务拓展。基于该方式企业希…

[附源码]SSM计算机毕业设计重庆工程学院教师宿舍管理系统论文JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Eolink征文活动--推荐国产神器Eolink!API优先,Eolink领先!

前言&#xff1a; 在我们后端开发者做项目的时候&#xff0c;避免不了与前端界面的交互&#xff0c;对于我来讲&#xff0c;在做项目的时候用到过postman&#xff0c;swagger做接口测试工作&#xff0c;在公司的时候公司主要用YApi可视化接口平台&#xff0c;最近使用了一个爆款…

负担过重何以轻装前行

随波逐流并不一定过得容易。 猜测负担过重原因&#xff1a; 所作的事情和预期差异大自己并不擅长目前所从事的专业恐惧失败试错成本过高基础薄弱无法持续成长简单问题复杂化复杂问题简单化…… 如何改变这种情况&#xff1f; 自我认知和外部感知都存在分析错位和信息不对称的…

解决ggplot绘制散点图形状超过6个的警告

正常画图&#xff1a; library(ggplot2) ggplot(mpg,aes(displ,hwy))geom_point(aes(shapeclass,colorclass))可以看出形状少了一个&#xff0c;SUV没有形状 并且还会弹出这样的警告&#xff1a; Warning message: “The shape palette can deal with a maximum of 6 discrete…

【附源码】Python计算机毕业设计网络求职招聘系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

更灵活定位内存地址的方法

更灵活定位内存地址的方法 文章目录更灵活定位内存地址的方法1.and和or2.以字符形式给出的数据3.[bxidata]4.SI、DI与寻址方式的灵活应用1.and和or and指令&#xff1a;逻辑与指令&#xff0c;按位进行与运算(同真为真) 比如&#xff1a; mov al, 01100011B and al, 00111011B …