当前位置: 首页 > news >正文

scikit-learn/sklearn学习|岭回归python代码解读

【1】引言

前序学习进程中,已经掌握了岭回归的基本定义,本次就更进一步,学习岭回归的一个实例。

【2】代码解读

今天的学习通过官网示例进行:
岭回归官网示例代码
首先给出完整代码:

# 引入必要模块
import numpy as np
import matplotlib.pyplot as plt
# 引入线性模型
from sklearn import linear_model# X is the 10x10 Hilbert matrix
# 这里包括两个步骤
# 第一步,生成[1,2,...,10]的一维数组,一共10个数,组成一个行向量
# 第二步,生成[0,1,...,9]的一维数组,一共十个数,然后增加一个轴,转化为10行1列的二维矩阵,实际上是一个列向量
# 第三步,加号"+"串联起两个数组,并且数组自动广播,都变成10行10列的二维矩阵
# 二维矩阵相加的结果是,位置为(i,j)的元素实际上是第(i+1,j+1)的元素,比如第一行第一列的元素位置被记录为(0,0)而非(1,1)
# 执行加法计算后,元素位置为(i,j)处的计算结果为(i+1+j)
# 最后获得的X则是对加法计算的矩阵在每个位置再计算倒数后的值
X = 1. / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis])
# y是一个纯1矩阵,一共10个数
y = np.ones(10)# #############################################################################
# Compute paths# 定义常数n_alphas = 200
n_alphas = 200
# 定义以10为底数的对数,真数从-10到-2均匀变化,一共输出n_alphas个/200个数
alphas = np.logspace(-10, -2, n_alphas)# 定义一个空列表
coefs = []
for a in alphas:# ridge定义了一个岭回归对象ridge = linear_model.Ridge(alpha=a, fit_intercept=False)# 执行岭回归计算ridge.fit(X, y)# ridge.coef_是岭回归计算出来的系数# 本例中,由于每一行的样本是10个特征,所以有10个系数# 每一行样本都会使用这10个系数coefs.append(ridge.coef_)# #############################################################################
# Display resultsax = plt.gca()ax.plot(alphas, coefs)
ax.set_xscale('log')
ax.set_xlim(ax.get_xlim()[::-1])  # reverse axis
plt.xlabel('alpha')
plt.ylabel('weights')
plt.title('Ridge coefficients as a function of the regularization')
plt.axis('tight')
plt.show()

【2.1】引入必要模块

# 引入必要模块
import numpy as np
import matplotlib.pyplot as plt
# 引入线性模型
from sklearn import linear_model

这里引入了必要模块,相对简单。

【2.2】岭回归计算

岭回归计算其实非常简单,首先定义了10X10的因变量样本矩阵和10个数字组成的自变量样本矩阵,然后直接进行岭回归计算,再把计算获得的岭回归系数都储存起来:

# X is the 10x10 Hilbert matrix
# 这里包括两个步骤
# 第一步,生成[1,2,...,10]的一维数组,一共10个数,组成一个行向量
# 第二步,生成[0,1,...,9]的一维数组,一共十个数,然后增加一个轴,转化为10行1列的二维矩阵,实际上是一个列向量
# 第三步,加号"+"串联起两个数组,并且数组自动广播,都变成10行10列的二维矩阵
# 二维矩阵相加的结果是,位置为(i,j)的元素实际上是第(i+1,j+1)的元素,比如第一行第一列的元素位置被记录为(0,0)而非(1,1)
# 执行加法计算后,元素位置为(i,j)处的计算结果为(i+1+j)
# 最后获得的X则是对加法计算的矩阵在每个位置再计算倒数后的值
X = 1. / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis])
# y是一个纯1矩阵,一共10个数
y = np.ones(10)# #############################################################################
# Compute paths# 定义常数n_alphas = 200
n_alphas = 200
# 定义以10为底数的对数,真数从-10到-2均匀变化,一共输出n_alphas个/200个数
alphas = np.logspace(-10, -2, n_alphas)# 定义一个空列表
coefs = []
for a in alphas:# ridge定义了一个岭回归对象ridge = linear_model.Ridge(alpha=a, fit_intercept=False)# 执行岭回归计算ridge.fit(X, y)# ridge.coef_是岭回归计算出来的系数# 本例中,由于每一行的样本是10个特征,所以有10个系数# 每一行样本都会使用这10个系数coefs.append(ridge.coef_)

【2.3】画图

最后一部非常简单,展示每一个系数随着惩罚系数的变化而变化的趋势:

# Display resultsax = plt.gca()ax.plot(alphas, coefs)
ax.set_xscale('log')
ax.set_xlim(ax.get_xlim()[::-1])  # reverse axis
plt.xlabel('alpha')
plt.ylabel('weights')
plt.title('Ridge coefficients as a function of the regularization')
plt.axis('tight')
plt.show()

在这里插入图片描述

【3】总结

通过一个python实例进一步了解了岭回归计算。

http://www.lryc.cn/news/619210.html

相关文章:

  • 鸿蒙开发资源导航与学习建议
  • 计算机网络2-2:物理层下面的传输媒体
  • 第23章,景深:技术综述
  • 【Python办公】Mermaid代码转图片工具 - Tkinter GUI版本
  • Apache虚拟主机三种配置实战
  • 运维学习Day22——Anisible自动化与基本使用
  • JavaEE 初阶第十八期:叩开网络世界的大门
  • 随身WIFI每个月需要交钱吗?流量卡还是随身WIFI哪个更好用?正规随身WIFI品牌有哪些?谁才是真性价比之王?
  • 当“超级高速“遇见“智能大脑“:5G-A×AI如何重塑万物智联时代
  • Linux文件系统:从虚拟接口到物理实现的架构解析
  • 存储过程作为系统逻辑核心的架构思考 —— 以 SaaS 系统为例
  • 【ROS2】ROS2 基础学习教程 以lerobot-so100为例
  • 【前端:Html】--3.进阶:图形
  • 基于RAII的智能指针原理和模拟实现智能指针
  • Python函数篇:从零到精通
  • 能刷java题的网站
  • C语言—数组和指针练习题合集(二)
  • [激光原理与应用-256]:理论 - 几何光学 - CMOS与CCD传感器成像原理比较
  • 安卓主题定制实践:17.45MB轻量级主题引擎技术解析
  • python --- 基础语法(1)
  • 为什么我换了项目管理软件?
  • 简单的双向循环链表实现与使用指南
  • Visual Studio中VC++目录、C/C++和链接器配置的区别与最佳实践
  • 无人机智能返航模块技术分析
  • 【前端Vue】如何在log-viewer组件中添加搜索定位功能
  • C语言中关于普通变量和指针变量、结构体包含子结构体或包含结构体指针的一些思考
  • 调整UOS在VMware中的分辨率
  • 广东省省考备考(第七十四天8.12)——资料分析、数量关系(40%-70%正确率的题目)
  • MySQL 数据库表操作与查询实战案例
  • 猫头虎AI分享|智谱直播开源其最新视觉模型:GLM-4.5V,多模态,支持图像、视频输入