【吴恩达机器学习-week2】可选实验:使用 Scikit-Learn 进行线性回归

支持我的工作 🎉

📃亲爱的朋友们,感谢你们一直以来对我的关注和支持!
💪🏻 为了提供更优质的内容和更有趣的创作,我付出了大量的时间和精力。如果你觉得我的内容对你有帮助或带来了欢乐,欢迎你通过打赏支持我的工作!

🫰🏻你的一份打赏不仅是对我工作的认可,更是对我持续创作的巨大动力。无论金额多少,每一份支持都让我倍感鼓舞和感激。

📝有关此篇文章的更多详情请见:2022吴恩达机器学习Deeplearning.ai课程作业,给我一杯咖啡的支持吧!☕️

🔥再次感谢你们的支持和陪伴!
在这里插入图片描述

可选实验:使用 Scikit-Learn 进行线性回归

目标

在本实验中,您将:

  • 利用 scikit-learn 通过梯度下降实现线性回归
import numpy as np
np.set_printoptions(precision=2) # 使其输出的浮点数精度为小数点后两位
# 这两个类分别用于实现**普通线性回归**和**使用随机梯度下降法的线性回归**
from sklearn.linear_model import LinearRegression, SGDRegressor
# 这个类用于**标准化数据**,使其均值为0,标准差为1。
from sklearn.preprocessing import StandardScaler
from lab_utils_multi import  load_house_data
import matplotlib.pyplot as plt
dlblue = '#0096ff'; dlorange = '#FF9300'; dldarkred='#C00000'; dlmagenta='#FF40FF'; dlpurple='#7030A0'; 
plt.style.use('./deeplearning.mplstyle')

梯度下降

Scikit-learn 有一个梯度下降回归模型 sklearn.linear_model.SGDRegressor。与您之前的梯度下降实现类似,该模型在标准化输入下表现最佳。sklearn.preprocessing.StandardScaler 将执行 z-score 标准化,如之前的实验中所示。在这里,它被称为“标准分数”。


加载数据集

X_train, y_train = load_house_data()
X_features = ['size(sqft)','bedrooms','floors','age']

标准化/归一化训练数据

scaler = StandardScaler()
X_norm = scaler.fit_transform(X_train)
print(f"Peak to Peak range by column in Raw        X:{np.ptp(X_train,axis=0)}")   
print(f"Peak to Peak range by column in Normalized X:{np.ptp(X_norm,axis=0)}")

## print
Peak to Peak range by column in Raw        X:[2.41e+03 4.00e+00 1.00e+00 9.50e+01]
Peak to Peak range by column in Normalized X:[5.85 6.14 2.06 3.69]
  • scaler = StandardScaler()
    • 创建一个 StandardScaler 实例
    • StandardScalerscikit-learn 提供的一个类,用于数据标准化。标准化的目的是使数据具有零均值和单位方差
  • X_norm = scaler.fit_transform(X_train)
    • 使用 StandardScaler 实例对 X_train 数据进行标准化
    • fit_transform 方法首先计算数据的均值和标准差然后对数据进行标准化。
    • 返回的 X_norm 是标准化后的数据。
  • print(f"Peak to Peak range by column in Raw X:{np.ptp(X_train,axis=0)}")
    • 计算并打印原始数据 X_train 每一列的峰值范围(最大值减去最小值)。
    • np.ptp 函数用于计算沿指定轴的峰值范围,这里使用 axis=0 表示按列计算。
  • print(f"Peak to Peak range by column in Normalized X:{np.ptp(X_norm,axis=0)}")
    • 计算并打印标准化后数据 X_norm 每一列的峰值范围
    • 标准化后的数据通常会有较小且相似的范围,因为它们被缩放到相同的尺度。

创建并拟合回归模型

## 创建 SGDRegressor 实例
sgdr = SGDRegressor(max_iter=1000)

## 训练模型
sgdr.fit(X_norm, y_train)

print(sgdr). # 打印 SGDRegressor 模型的**概述信息**,显示**模型的主要参数和设置**

## 打印迭代次数和权重更新次数
print(f"number of iterations completed: {sgdr.n_iter_}, number of weight updates: {sgdr.t_}")

## print
SGDRegressor()
number of iterations completed: 117, number of weight updates: 11584.0
  • sgdr = SGDRegressor(max_iter=1000)

    创建一个 SGDRegressor 实例,并将最大迭代次数设置为 1000。SGDRegressorscikit-learn 提供的一种使用随机梯度下降法训练线性模型的回归器

  • sgdr.fit(X_norm, y_train)

    • 使用标准化后的训练数据 X_norm 和目标变量 y_train 来训练 SGDRegressor 模型。
    • fit 方法用于拟合模型。

查看参数

请注意,这些参数与标准化输入数据相关。拟合参数与之前实验中使用该数据找到的参数非常接近。

# 获取 SGDRegressor 模型的截距(偏置项)。intercept_ 属性包含模型的截距
b_norm = sgdr.intercept_ 

# 获取 SGDRegressor 模型的系数(权重)。coef_ 属性包含模型的系数
w_norm = sgdr.coef_
print(f"model parameters:                   w: {w_norm}, b:{b_norm}")
print(f"model parameters from previous lab: w: [110.56 -21.27 -32.71 -37.97], b: 363.16")

## print
model parameters:                   w: [110.08 -21.05 -32.46 -38.04], b:[363.15]
model parameters from previous lab: w: [110.56 -21.27 -32.71 -37.97], b: 363.16

进行预测

预测训练数据的目标值。使用 predict 例程,并使用 w w w b b b 进行计算。

# 使用 sgdr.predict() 进行预测
y_pred_sgd = sgdr.predict(X_norm)
# 使用权重和截距进行预测 
y_pred = np.dot(X_norm, w_norm) + b_norm  
# 检查所有预测值是否都相同,如果相同则返回 True,否则返回 False。
print(f"prediction using np.dot() and sgdr.predict match: {(y_pred == y_pred_sgd).all()}")

# 打印前四个样本的预测值和目标值进行对比
print(f"Prediction on training set:\n{y_pred[:4]}" )
print(f"Target values \n{y_train[:4]}")

## print
prediction using np.dot() and sgdr.predict match: True
Prediction on training set:[295.2  485.82 389.56 491.98]
Target values [300.  509.8 394.  540. ]
  • y_pred_sgd = sgdr.predict(X_norm)
    • 使用训练好的 SGDRegressor 模型对标准化后的数据 X_norm 进行预测。
    • predict 方法会根据模型的系数和截距计算预测值。
  • y_pred = np.dot(X_norm, w_norm) + b_norm
    • 直接使用之前获取的权重 w_norm 和截距 b_norm 对标- 准化后的数据 X_norm 进行预测。
    • np.dot(X_norm, w_norm) 计算每个样本的线性组合,加上截距 b_norm 得到预测值。

绘制结果

让我们绘制预测值与目标值的对比图。

# plot predictions and targets vs original features    
fig,ax=plt.subplots(1,4,figsize=(12,3),sharey=True)
for i in range(len(ax)):
    ax[i].scatter(X_train[:,i],y_train, label = 'target') # 绘制实际值的散点图
    ax[i].set_xlabel(X_features[i])
    ax[i].scatter(X_train[:,i],y_pred,color=dlorange, label = 'predict') # 绘制预测值的散点图
ax[0].set_ylabel("Price"); 
ax[0].legend();
fig.suptitle("target versus prediction using z-score normalized model")
plt.show()

在这里插入图片描述

小结

  1. 使用开源机器学习工具包 scikit-learn
    • scikit-learn 是一个使用的机器学习库,提供了各种算法和工具,用于数据预处理、模型训练和评估。
  2. 实现了线性回归模型
    • 通过使用梯度下降算法(SGDRegressor),我们训练了一个线性回归模型来预测房价。
    • 我们还使用了**标准化技术(StandardScaler)**对特征数据进行了归一化处理,从而加快了模型的收敛速度并提高了模型的性能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot项目jar包修改数据库配置运行时异常

一、背景 我将软件成功打好jar包了,到部署的时候发现jar包中数据库配置写的有问题,不想再重新打包了,打算直接修改配置文件,结果修改配置后,再通过java -jar运行时就报错了。 二、问题描述 本地项目是springBoot项目…

Git使用——首次创建本地仓库、配置、初始化、关联远程仓库

1、安装 Git软件 官网:git-scm.com 有时候官网打不开,这里留存个之前下载过的安装包: https://download.csdn.net/download/weixin_43908355/89502977 2、配置本地仓库 在准备建仓库的文件夹里,右键点击:Git Bash …

Cybervadis认证是什么?

Cybervadis认证是一种全面且深入的网络安全评估和认证服务,旨在帮助组织提高其网络安全实践的成熟度,并有效应对不断变化的网络威胁和攻击。以下是关于Cybervadis认证的一些关键信息: 认证目的: 评估和验证组织在网络安全方面的能…

HMI 的 UI 风格成就经典

HMI 的 UI 风格成就经典

SAR目标检测

Multi-Stage with Filter Augmentation 多阶段滤波器增强(MSFA) 对SAR合成孔径雷达目标检测性能的改善 MSFA ON SAR 传统方法: 预训练:传统方法开始于在通用数据集上预训练一个基础模型。 微调:这个预训练的模型会被微调以适应特定的SAR图像,试图缩小域间的差距 …

git命令含有中文,终端输出中文乱码的问题

目录 1、[当前代码页] 的936 (ANSI/OEM - 简体中文 GBK) 是导致中文乱码的原因 2、这样会导致什么问题呢? (1) 问题一: 【属性】选项的【字体】无法识别自定义文字样式,【默认值】选项可选自定义字体样式,却无法覆盖【属性】选项 (2) 问题…

AutoCAD Mechanical下载安装;Mechanical针对机械设计领域开发的CAD软件下载安装!

在AutoCAD Mechanical的助力下,用户能够轻松应对二维绘图与三维建模两大核心任务。二维绘图方面,软件提供了精准且灵活的绘图工具,使得工程师能够迅速勾勒出机械部件的轮廓与细节,大大提高了工作效率。 而在三维建模方面&#xff…

继承QAbstractListModel,结合QListView

这里想要写一个QAbstractListModel的子类&#xff0c;学习一下如何实例化QAbstractListModel。 QAbstractListModel子类化-CSDN博客 QVariant与自定义类型互转之奇巧淫技_qt 类型转 qvariant-CSDN博客 #pragma once#include <QStyledItemDelegate> #include <qmeta…

React+TS 从零开始教程(4):useEffect

上一节传送门&#xff1a;ReactTS 从零开始教程&#xff08;3&#xff09;&#xff1a;useState 源码链接&#xff1a;https://pan.quark.cn/s/c6fbc31dcb02 上一节&#xff0c;我们已经学会了React的第一个Hook&#xff1a;useState。 这一节&#xff0c;我们要学习的是另一…

聊聊etsy平台,一个年入百万的项目

聊聊etsy平台&#xff0c;一个年入百万的项目 什么是etsy,这是怎样一个平台&#xff0c;怎样盈利的&#xff1f;相信现在大家满脑子都是这些疑问。 这个平台也是无意间一个学员提到的&#xff0c;据说他朋友靠这个平台年赚好几百万。苦于门槛太高&#xff0c;他也做不了。今天…

乐鑫Wi-Fi单火线开关方案,传统开关智能升级,启明云端乐鑫一级代理商

随着智能家居技术的飞速发展&#xff0c;我们的日常生活正在变得越来越便捷。今天&#xff0c;我们要探讨的是一种创新的智能家居方案——Wi-Fi单火线智能开关。 传统的机械单火线开关虽然简单可靠&#xff0c;但在现代智能家居系统中显得力不从心。它们无法远程控制&#xff…

python实现简单的三维建模学习记录

课程来源与蓝桥云课Python 实现三维建模工具_Python - 蓝桥云课和500 Lines or LessA 3D Modeller 说明 个人估计这是一个值得花一个礼拜左右时间去琢磨的一个小项目。上述网址中的代码直接拿来不一定能跑&#xff0c;需要后期自己去修改甚至在上面继续优化&#xff0c;会在其…

Java 汉诺塔问题 详细分析

汉诺塔 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小…

华为手机怎么打印文件?

关于华为手机打印的问题&#xff0c;如果您有打印机&#xff0c;并且已经成功和华为手机相连&#xff0c;在解决上就要容易很多。 具体操作如下&#xff1a; 选择文件 文件来源&#xff1a;华为手机上的文件可以来自多个应用&#xff0c;如图库、备忘录、文件管理等&#xf…

Python入门 2024/7/2 While

目录 while循环的基础应用 循环输出十次&#xff1a;键盘敲烂&#xff0c;月入过万 计算1~100的和 用while循环练习猜数字 while循环的嵌套应用 打印九九乘法表 输出不换行的功能 while循环的基础应用 格式&#xff1a; while 条件&#xff1a; 条件满足时&#xff0c…

leetcode刷题:vector刷题

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;leetcode刷题 1.只出现一次的数字 这道题很简单&#xff0c;我们只需要遍历一次数组即可通过异或运算实现。(一个数与自身异或结果为0&#xff0c;任何数与0异或还是它本身) class Solut…

Nuxt3 的生命周期和钩子函数(八)

title: Nuxt3 的生命周期和钩子函数&#xff08;八&#xff09; date: 2024/6/30 updated: 2024/6/30 author: cmdragon excerpt: 摘要&#xff1a;本文介绍了Nuxt3框架中的一些重要生命周期钩子&#xff0c;如prepare:types用于自定义TypeScript配置和类型声明&#xff0c;…

ubuntu apt命令 出现红色弹框 Daemons using outdated libraries

1. 弹框没截图&#xff0c;是因为ubuntu22.04一个新特性导致的&#xff0c;由 needrestart 命令触发&#xff0c;默认情况是交互性质的&#xff0c;也就是会中断在这里需要手动要处理提示。 2. 修改/etc/needrestart/needrestart.conf 文件&#xff0c;将 #$nrconf{restart} …

解决obsidian加粗字体显示不突出的问题

加粗字体显示不突出的原因&#xff1a;默认字体的加粗版本本来就不突出 解决方法&#xff1a;改成显示突出的类型Microsoft YaHei UI 【效果】 修改前&#xff1a;修改后&#xff1a; 其他方法&#xff1a; 修改css&#xff08;很麻烦&#xff0c;改半天也不一定奏效&#…

mac上使用finder时候,显示隐藏的文件或者文件夹

默认在finder中是不显示隐藏的文件和文件夹的&#xff0c;但是想创建.gitignore文件&#xff0c;并向里面写入内容&#xff0c;即便是打开xcode也是不显示这几个隐藏文件的&#xff0c;那有什么办法呢&#xff1f; 使用快捷键&#xff1a; 使用finder打开包含隐藏文件的文件夹…