day09——线性回归

news2024/12/23 1:45:32

线性回归

  • 一、什么是线性回归
    • 1,定义与公式
    • 2,线性回归的特征与目标的关系
  • 二、线性回归的损失和优化原理
    • 1,损失函数
    • 2,优化算法
  • 三、API
  • 四、实操:波士顿房价预测
    • 1,数据来源:scikit-learn
    • 2,数据特征:
    • 3,回归性能评估
    • 4,代码

一、什么是线性回归

1,定义与公式

定义:线性回归是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。应用场景有房价预测、销售额度预测等
在这里插入图片描述
例:

期末成绩:0.7 × 考试成绩 + 0.3 × 平时成绩
房子价格 = 0.02 × 中心区域的距离 + 0.04 × 城市一氧化氮浓度 + (-0.12 × 自住房平均房价) + 0.254 × 城镇犯罪率

2,线性回归的特征与目标的关系

线性回归当中的关系有两种,一种是线性关系,另一种是非线性关系。

  • 线性关系
    在这里插入图片描述
    在这里插入图片描述
    注:两个特征与目标值呈现平面的关系也是属于线性关系
  • 非线性关系
    在这里插入图片描述

二、线性回归的损失和优化原理

以预测房子价格的例子

真实关系:
真实房子价格 = 0.02 × 中心区域的距离 + 0.04 × 城市一氧化氮浓度 + (-0.12 × 自住房平均房价) + 0.254 × 城镇犯罪率
随机指定关系(猜测):
预测房子价格 = 0.25 × 中心区域的距离 + 0.14 × 城市一氧化氮浓度 + 0.42 × 自住房平均房价 + 0.34 × 城镇犯罪率

从上面可以看出,真实结果与预测的结果之间存在一定的误差,如下图所示
在这里插入图片描述
那么就可以用损失函数将这个误差衡量出来

1,损失函数

总损失定义为:
在这里插入图片描述

  • yi为第 i 个训练样本的真实值
  • h(xi)为第i个训练样本特征值组合预测函数

2,优化算法

如何去求模型当中的W,使得损失最小?线性回归经常使用的两种优化算法

  • 正规方程
    在这里插入图片描述
    X为特征值矩阵,y为目标值矩阵。直接求到最好的结果,缺点是当特征过多过复杂时,求解速度太慢并且得不到结果
    在这里插入图片描述

  • 梯度下降
    在这里插入图片描述
    α为学习速率,需要手动指定(超参数),α旁边的整体表示方向沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后更新W值使用,面对训练数据规模十分庞大的任务 ,能够找到较好的结果
    在这里插入图片描述

梯度下降正规方程
需要选择学习率不需要
需要迭代求解一次运算得出
特征数量较大可以使用需要计算方程,时间复杂度高O(n3)

三、API

# 正规方程优化
# fit_intercept:是否计算偏置
# LinearRegression.coef_:回归系数
# LinearRegression.intercept_:偏置
sklearn.linear_model.LinearRegression(fit_intercept=True)
# 随机梯度下降优化
# loss:损失类型,”squared_loss”为普通最小二乘法
# fit_intercept:是否计算偏置
"""
learning_rate:学习率
'constant': eta = eta0
'optimal': eta = 1.0 / (alpha * (t + t0)) [default]
'invscaling': eta = eta0 / pow(t, power_t),power_t = 0.25 存在父类当中
对于一个常数值的学习率来说,可以使用learning_rate=’constant’ ,并使用eta0来指定学习率。
"""
sklearn.linear_model.SGDRegressor(loss="squared_loss", fit_intercept=True, learning_rate ='invscaling', eta0=0.01)

四、实操:波士顿房价预测

1,数据来源:scikit-learn

注:自 1.2 版本起,load_boston 已经从 scikit-learn 中删除,解决方法如下

# 卸载已有的 scikit-learn
pip uninstall scikit-learn
# 安装指定版本 1.1.1 的 scikit-learn
pip install scikit-learn==1.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

也可以自行从 boston 房价数据集的网站下载 boston_housing_prices.csv 数据集,再用 pandas 导入

2,数据特征:

在这里插入图片描述
注:回归当中数据大小不一致,导致结果影响较大。所以需要做标准化处理。同时对目标值也需要做标准化处理。

3,回归性能评估

均方误差(Mean Squared Error)MSE)评价机制:
在这里插入图片描述
y^i为预测值,y¯为真实值

# 均方误差回归损失 API
# y_true:真实值
# y_pred:预测值
sklearn.metrics.mean_squared_error(y_true, y_pred)

4,代码

import sklearn.datasets
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import SGDRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 获取数据
lb = sklearn.datasets.load_boston()

# 对数据集进行划分
x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.3, random_state=24)
      
# 对于特征值标准化处理
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)

# 使用线性模型进行预测

# 1,使用正规方程求解
lr = LinearRegression()
lr.fit(x_train, y_train)
y_lr_predict = lr.predict(x_test)
print("正规方程预测的权重参数为" , lr.coef_)
print("正规方程预测的结果为:", y_lr_predict)
print("正规方程的均方误差为:", mean_squared_error(y_test, y_lr_predict))

# 2,使用梯度下降进行预测
sgd = SGDRegressor()
sgd.fit(x_train, y_train)
print("SGD的权重参数为:", sgd.coef_)
# predict 方法用于根据已有的模型预测新的数据
y_sgd_predict = sgd.predict(x_test)
print("SGD的预测的结果为:", y_sgd_predict)
print("SGD的均方误差为:", mean_squared_error(y_test, y_sgd_predict))

在预测过程可以尝试去修改学习率,如下所示,通过调参数,找到学习率效果更好的值。

sgd = SGDRegressor(learning_rate='constant', eta0=0.001)

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

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

相关文章

Acgis中实现栅格经纬度和行政区关联

写在前面 我是一个Acgis小白,写这篇博客是为了记录完成过程,如果有更高效的办法欢迎分享~ 我用的是Arcgis10.2。 需求描述 目前已有意大利的shp文件,希望将意大利划分成0.1*0.1经纬度的栅格,并且关联每个栅格中心点所属的省份信…

DBeaver复制数据库(数据库表结构以及内容)

一、 首先先建立一个数据库 (已有请忽略此步骤) (名字 字符集等按需要自己填写) 二、选择要复制的数据库 2.1右键选择 工具->转储数据库 2.2选择要导出的数据 2.3 选择要导出的路径 2.4 点击开始,等待导出完…

Revit中绘制弯曲的靠背栏杆和生成过梁

一、Revit中怎么绘制弯曲的靠背栏杆 栏杆通常我们见过位于在阳台处,但是在我们的古建筑中很常见到一种靠背栏杆,例如凉亭里面就很常见这种栏杆。那么如何绘制呢? 利用公制栏杆——支柱进行绘制 要运用放样工具进行绘制,设置一个工作平面&…

中国电子学会2023年05月份青少年软件编程Scratch图形化等级考试试卷四级真题(含答案)

2023-05 Scratch四级真题 分数:100 题数:24 测试时长:90min 一、单选题(共10题,共30分) 1. 下列积木运行后的结果是?(B)(说明:逗号后面无空格)&#xff…

mysql join 与 拆分成单表查询如何选择

参考以下文章,不错 数据库联表查询时,是直接使用join好还是分别查询到数据后自己处理较好? - 知乎 一,声明 1,数据量 首先场景是多个表数据量比较大,可能达到百万级 2,结论:最…

springboot项目启动指定对应环境的方法

1. 多环境准备 今天教大家一种多环境profile的写法,当然也可创建多个yml文件。如下所示: spring:application:name: cms-discovery-eureka-ha --- # 区分多环境 spring:profiles: peer1 server:port: 9092 eureka:in…

十、ELK安装ElastAlert 2插件飞书机器人告警(docker)

实现效果 1.创建相应挂载目录和文件 可任意位置,挂载对上就行,方便直接在宿主机修改配置。 /data/feishu-alert/config.yaml /data/feishu-alert/rules 2.编写config.yaml配置文件(/data/feishu-alert/config.yaml) #指定告警文件存放目录 rules_fo…

从C语言到C++_16(list的介绍和常用接口函数)

目录 1. list 介绍和简单使用 1.1 list介绍 1.2 list简单接口函数 1.3 push_back 和遍历 1.4 list常规接口函数使用 2. list 的其它接口函数 2.1 splice 接合 2.2 remove 删完一个值 2.3 sort和reverse 本章完。 list是个双向带头循环链表。 带头双向循环链表我们在…

21份软件测试全流程文档模板(标准版)

1、需求说明书 2、功能测试计划 3、功能测试用例 4、业务流程测试用例 5、系统安装配置说明书 6、阶段功能测试报告 7、性能测试计划 8、性能测试用例 9、性能测试报告 10、系统功能测试报告 11、需求变更说明书 12、用户建议说明书 13、验收测试报告 14、产品发布说明书 15、系…

redis下载安装

本文主要介绍如果在Centos7下安装Redis。 1.安装依赖 redis是由C语言开发&#xff0c;因此安装之前必须要确保服务器已经安装了gcc&#xff0c;可以通过如下命令查看机器是否安装&#xff1a; <span style"color:#000000"><span style"background-c…

Matlab论文插图绘制模板第101期—人口金字塔图

在之前的文章中&#xff0c;分享了Matlab双向柱状图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一种特殊的双向柱状图&#xff1a;人口金字塔图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自…

Lecture 17 Machine Translation

目录 Statistical MTNeural MTAttention MechanismEvaluationConclusion Machine translation (MT) is the task of translating text from one source language to another target language why? Removes language barrierMakes information in any languages accessible t…

Polarion工作流插件(自定义)

创建插件命名插件配置插件Condition&Function package com.polarion.capital.example.conditions;import com.polarion.alm.tracker.model.IWorkItem; import com.polarion.alm.tracker.workflow.IArguments; import com.polarion.alm.tracker.workflow.ICallContext; impo…

TIME_WAIT的处理方式

TIME_WAIT 是什么 TIME_WAIT 是指在 TCP 连接关闭时&#xff0c;等待所有分组确认被接收的状态&#xff0c;这个状态会持续 2MSL&#xff08;Maximum Segment Lifetime&#xff09;的时间&#xff0c;以确保所有分组都被接收。在这段时间内&#xff0c;该连接不能被重用。MSL …

Jmeter 实现 grpc服务 压测

一、Jmeter安装与配置 网上有很多安装与配置文章&#xff0c;在此不做赘述 二、Jmeter gRPC Request 插件安装 插件下载地址&#xff1a;JMeter Plugins :: JMeter-Plugins.org 将下载文件解压后放到Jmeter安装目录下 /lib/ext 然后在终端输入Jmeter即可打开 Jmeter GUI界面…

搞定“超超超难”剑桥面试数学题番外篇:ARM64汇编

0. 概览 在 有趣的小实验&#xff1a;四种语言搞定“超超超难”剑桥面试数学题 那篇博文中&#xff0c;我们使用 4 种语言&#xff08;x64汇编、C、Swift 以及 Ruby&#xff09;实现了一道算法题。 不过&#xff0c;其中的汇编语言对应的是 intel CPU 上的 x64 指令集&#x…

手把手教你如何把系统的前端页面改成vue 脚手架项目,实现前后端分离

这篇文章从零开始&#xff0c;介绍怎么把现有的一个商城的页面移动到vue脚手架项目上&#xff0c;实现前后端代码的完全分离。 首先&#xff0c;我们需要新建一个vue的脚手架的项目&#xff0c;在此之前&#xff0c;需要安装node.js 打开IntelliJ IDEA或者winR&#xff0c;输入…

【Java基础学习打卡03】计算机中数据的表示、存储与处理

目录 前言一、数据的表示1.数据与信息2.计算机中的数据3.计算机中数据的单位 二、数据的存储三、数据的处理1.进位计数值2.进制间转换 四、字符编码总结 前言 本小节主要介绍在计算机中数据的表示、存储与处理。要知道计算机内部使用二进制数据&#xff0c;也就是0和1组成的数…

STM32单片机+机智云AIoT+智能服药箱

摘要:随着我国老龄化进程的日趋加快&#xff0c;越来越多的老年人步入了快乐并充实的晚年生活。但是随着年龄的增长&#xff0c;各种医药用品也成了老年人生活的必需品&#xff0c;有人每天甚至需要在不同时间服用多种不同的药物&#xff0c;如果子女不在身边&#xff0c;老年人…

一款基于RT-Thread操作系统的自动测温+风扇自动调速+加湿+自动启停的智能风扇项目(附源码下载)

基于 RT-Thread 的智能加湿风扇 作品背景 一款基于 RT-Thread 操作系统的自动检测温湿度情况进行风扇转速自动调节&#xff0c;加湿自动启停的桌面风扇。 所用硬件&#xff1a; 主控&#xff1a;CH32V307 开发板。温湿度检测&#xff1a;AHT10 温湿度模块。风扇主体&#x…