机器学习---线性回归

1、线性回归

例如:对于一个房子的价格,其影响因素有很多,例如房子的面积、房子的卧室数量、房子的卫生间数量等等都会影响房子的价格。这些影响因子不妨用 x i x_{i} xi表示,那么房价 y y y可以用如下公式表示:
y = w 1 x 1 + w 2 x 2 + w 3 x 3 + b y=w_1x_1+w_2x_2+w_3x_3+b y=w1x1+w2x2+w3x3+b
其中 w i w_{i} wi表示特征 i i i的权重, b b b表示偏置,也称作截距,当然在实际问题中, x i x_i xi 0 0 0 y y y肯定为 0 0 0而不可能为 b b b,但是加上偏置后可以是模型的拟合效果更好。

2、损失的衡量

在分类问题时,我们可以用准确率(预测正确的数量/测试集总样本数量),而在回归任务时,衡量误差的损失函数通常使用均方误差,设 y ′ y' y是预测值, y y y是真实值,则损失函数为:
l o s s = 1 n ∑ i = 1 n 1 2 ( y i ′ − y ) 2 loss = \frac{1}{n}∑_{i=1}^{n} \frac{1}{2}(y'_{i}-y)² loss=n1i=1n21(yiy)2
这个又称作均方误差,前面的系数 1 2 \frac{1}{2} 21是为了求导后与平方项的 2 2 2相乘时得到 1 1 1
可知,均方误差越小,拟合效果越好。反之拟合效果越差。
另外一个重要的衡量指标为 R 2 R^2 R2系数,当 R 2 < 0.3 R^2<0.3 R2<0.3时,拟合能力

3、优化损失

对于损失较大的时候,如何优化权重 w w w b b b使其让我们的均方误差尽可能的小。这里提供两种方法。
a)使用正规方程进行优化
b)使用梯度下降进行优化。
正规方程依次即可求得最优解,而梯度下降法需要逐次迭代,寻找出最优解。但是对于大规模的数据集,通常是采用梯度下降进行优化,而正规方程在小规模数据集的优化上表现略由于梯度下降。

4、线性回归API及其调用

在sklearn中提供了线性回归的API,根据优化方法不同,分为以下两种:

sklearn.linear_model.LinearRegression(fit_intercept=True)
通过正规方程进行优化
fit_intercept:是否计算偏置,默认为True,不计算偏置则模型一定过原点
LinearRegression.coef_:回归系数
LinearRegression。intercept_:偏置

sklearn.linear_model.SGDRegressor(loss='squared_loss', fit_intercept=True, learning_rate ='invscaling', eta0=0.01)
loss:损失类型,loss='squared_loss'  普通最小二乘法
fit_intercept:是否计算偏置
learning_rate:学习率

5、线性回归实例–波士顿房价预测(数据集点我)

RM: 每个住宅的平均房间数
LSTAT: 区域内房东的地位,表示低收入人群的百分比
PTRATIO: 区域内学生和教师的比例
MEDV: 自住房的中位数价值,以千美元为单位

import pandas as pd
data = pd.read_csv('housing.csv',sep=',')

在这里插入图片描述

# 检查是否具有缺失值,全部为False,说明没有缺失值
pd.isnull(data).any()

在这里插入图片描述

# 数据集的切分
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(data[['RM','LSTAT','PTRATIO']],data.MEDV,train_size=0.8)
# 数据归一化
from sklearn.preprocessing import StandardScaler
transfer = StandardScaler()
x_train=transfer.fit_transform(x_train)
x_test=transfer.transform(x_test)
import matplotlib.pyplot as plt
plt.rcParams['font.family']='STFangsong'
# 创建一个画布,分成三个绘图区,查看每个变量和目标值的关系
figure, axes = plt.subplots(nrows=1, ncols=3, figsize=(20, 8), dpi=80)
axes[0].scatter(data.RM,data.MEDV)
axes[1].scatter(data.LSTAT,data.MEDV)
axes[2].scatter(data.PTRATIO,data.MEDV)
# 加网格,透明度为0.5
axes[0].grid(linestyle='--',alpha=0.5)
axes[1].grid(linestyle='--',alpha=0.5)
axes[2].grid(linestyle='--',alpha=0.5)
plt.show()

在这里插入图片描述

# 采用回归算法进行预测
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error,r2_score
# 使用正则化进行优化
estimator = LinearRegression(fit_intercept=True)
estimator.fit(x_train, y_train)
y_predict1 = estimator.predict(x_test)
print(f"r方系数为{r2_score(y_predict1,y_test)}")
print(f"方差为:{mean_squared_error(y_predict1,y_test)}")
print(f'优化后的权重参数为:{estimator.coef_},偏置为:{estimator.intercept_}')

正则化优化的结果

from sklearn.linear_model import SGDRegressor
estimator = SGDRegressor(fit_intercept=True)
estimator.fit(x_train, y_train)
y_predict1 = estimator.predict(x_test)
print(f"r方系数为{r2_score(y_predict1,y_test)}")
print(f"方差为:{mean_squared_error(y_predict1,y_test)}")
print(f'优化后的权重参数为:{estimator.coef_},偏置为:{estimator.intercept_}')

在这里插入图片描述
观察可发现使用梯度下降优化的方差较小,可认为其预测的拟合效果更好。

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

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

相关文章

【贪心 堆 优先队列】502. IPO

本文涉及知识点 贪心 堆 优先队列 LeetCode502. IPO 假设 力扣&#xff08;LeetCode&#xff09;即将开始 IPO 。为了以更高的价格将股票卖给风险投资公司&#xff0c;力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限&#xff0c;它只能在 IPO 之前完成最多 k…

评价ChatGPT与强人工智能的未来

在人工智能领域&#xff0c;ChatGPT的出现无疑是一个里程碑事件。它不仅展示了自然语言处理技术的巨大进步&#xff0c;也引发了人们对于强人工智能&#xff08;AGI&#xff09;的无限遐想。本文将从多个角度评价ChatGPT&#xff0c;并探讨强人工智能距离我们还有多远。 ChatGP…

【Leetcode笔记】406.根据身高重建队列

文章目录 1. 题目要求2.解题思路 注意3.ACM模式代码 1. 题目要求 2.解题思路 首先&#xff0c;按照每个人的身高属性&#xff08;即people[i][0]&#xff09;来排队&#xff0c;顺序是从大到小降序排列&#xff0c;如果遇到同身高的&#xff0c;按照另一个属性&#xff08;即p…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥导入介绍及算法规格】

密钥导入介绍及算法规格 如果业务在HUKS外部生成密钥&#xff08;比如应用间协商生成、服务器端生成&#xff09;&#xff0c;业务可以将密钥导入到HUKS中由HUKS进行管理。密钥一旦导入到HUKS中&#xff0c;在密钥的生命周期内&#xff0c;其明文仅在安全环境中进行访问操作&a…

类继承-多继承虚继承

#include<iostream> using namespace std; class A1 { public:int a 10;}; class A2 { public:int b 20; }; class B :public A1, public A2 { public:int c 30; }; int main(){B b;cout << b.a << b.b << b.c << endl;return 0; } 如果基类…

十五、小型电脑没有数字键及insert,怎么解决IDEA快速插入getset构造这些方法

&#x1f33b;&#x1f33b;目录 一、小型电脑没有数字键及insert&#xff0c;怎么解决IDEA快速插入getset构造这些方法 一、小型电脑没有数字键及insert&#xff0c;怎么解决IDEA快速插入getset构造这些方法 解决&#xff1a; 1.winR打开搜索 2.osk回车 屏幕就出现了这样的一…

windows USB 设备驱动开发- 不同模型下的控制传输

在不同的模型下&#xff0c;USB控制传输会有不同的特点&#xff0c;但是任何控制传输的目标都始终是默认端点。 接收者是设备的实体&#xff0c;其信息&#xff08;描述符、状态等&#xff09;是主机感兴趣的。请求可进一步分为&#xff1a;配置请求、功能请求和状态请求。 发…

二刷力扣——单调栈

739. 每日温度 单调栈应该从栈底到栈顶 是递减的。 找下一个更大的 &#xff0c;用递减单调栈&#xff0c;就可以确定在栈里面的每个比当前元素i小的元素&#xff0c;下一个更大的就是这个i&#xff0c;然后弹出并记录&#xff1b;然后当前元素i入栈&#xff0c;仍然满足递减…

基于.NET开源游戏框架MonoGame实现的开源项目合集

前言 今天分享一些基于.NET开源游戏框架MonoGame实现的开源项目合集。 MonoGame项目介绍 MonoGame是一个简单而强大的.NET框架&#xff0c;使用C#编程语言可以创建桌面PC、视频游戏机和移动设备游戏。它已成功用于创建《怒之铁拳4》、《食肉者》、《超凡蜘蛛侠》、《星露谷物…

linux之管道重定向

管道与重定向 一、重定向 将原输出结果存储到其他位置的过程 标准输入、标准正确输出、标准错误输出 ​ 进程在运行的过程中根据需要会打开多个文件&#xff0c;每打开一个文件会有一个数字标识。这个标识叫文件描述符。 进程使用文件描述符来管理打开的文件&#xff08;FD--…

【Dell R730 折腾记录】风扇调速--在 Ubuntu 系统上开机自启动并每隔30分钟执行一次风扇定速脚本

前段时间升级了一下机柜里的服务器&#xff0c;替换掉了一台旧的 Dell 服务器&#xff0c;换上了这台 R730。但是无奈于噪音的袭扰&#xff0c;搁置了一段时间。我在这台机器上目前安装了一块 Intel Xeon E5-2630v3 芯片以及一张改过散热的 NVIDIA Tesla P4 计算卡。结果就是散…

电脑硬盘分区的基本步骤(2个实用的硬盘分区方法)

在现代计算机中&#xff0c;硬盘分区是非常重要的一步。无论是新硬盘的初始化&#xff0c;还是重新组织现有硬盘&#xff0c;分区都是必不可少的操作。本文将详细介绍电脑硬盘分区的基本步骤&#xff0c;帮助您更好地管理和利用硬盘空间。 文章开始&#xff0c;我们先简单说一…

【C++】类和对象3.0

浅浅介绍最近所学&#xff0c;希望有兴趣的读者老爷垂阅&#xff01; 目录 1.再谈构造函数 1.1.构造函数体赋值 1.2.初始化列表 1.3.构造函数的小知识 2. explicit关键字 3.static成员 3.1.static成员概念 3.2.static成员特性 4.友元 4.1.友元函数 4.2.友元类 5…

七、Linux二进制安装Redis集群

目录 七、Linux二进制安装Redis集群1 安装Redis所需依赖2 单机安装Redis&#xff08;7.2.4&#xff09;2.1 下载Redis2.2 安装Redis 3 分布式部署模式&#xff08;Redis Cluster&#xff09;3.1 分布式部署模式的配置文件3.2创建集群 4 主从复制模式&#xff08;Redis Sentinel…

jenkins搭建部署前端工程 ,从0到1

一.java环境配置 1 安装tomcatjdk17 这个也行 3 安装maven3.3.9 安装教程参考 4 安装Jenkins 下载地址 参考教程 二、相关配置 1 访问http://localhost:8080/jenkins&#xff0c;进入Jenkins初始化页面&#xff0c;第一次启动时间可能有点长&#xff0c;耐心等待。进入成功后会…

AndroidKille不能用?更新apktool插件-cnblog

AndroidKiller不更新插件容易报错 找到apktool管理器 填入apktool位置&#xff0c;并输入apktool名字 选择默认的apktool版本 x掉&#xff0c;退出重启 可以看到反编译完成了

《Windows API每日一练》8.3 scrollbar控件

在第三章SYSMETS2.C实例中&#xff0c;我们是通过CreateWindow函数创建窗口的参数窗口样式中添加垂直或水平滚动条。本节我们将讲述作为子窗口控件的滚动条。 本节必须掌握的知识点&#xff1a; 滚动条类 滚动条控件和着色 8.3.1 滚动条类 ■窗口滚动条与滚动条控件的异同 …

带你了解“Java新特性——模块化”

Java平台从Java 8向Java 9及更高版本的进化&#xff0c;其中引入了一个重要的新特性——模块系统&#xff08;Project Jigsaw&#xff09;。模块系统的目的是解决大型应用的依赖管理问题&#xff0c;提升性能&#xff0c;简化JRE&#xff0c;增强兼容性和安全性&#xff0c;并提…

一文了解常见DNS问题

当企业的DNS出现故障时&#xff0c;为不影响企业的正常运行&#xff0c;团队需要能够快速确定问题的性质和范围。那么有哪些常见的DNS问题呢&#xff1f; 域名解析失败&#xff1a; 当您输入一个域名&#xff0c;但无法获取到与之对应的IP地址&#xff0c;导致无法访问相应的网…

Blazor 逐键搜索并动态反馈到url

Blazor 逐键搜索并动态反馈到url 源码 前言: 今天打开了 spotify 网页版找歌, 突然发现这个功能很抓眼球,于是试试blazor能不能模仿一下. 1. 节省时间,直接用模板开搞 新建项目,使用 Bootstrap Blazor App 模板 , 命名为 b22dynamicURL BootstrapBlazor简介: BootstrapBlaz…