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

头歌——机器学习(线性回归)

文章目录

  • 线性回归简述
    • 答案
  • 线性回归算法
    • 答案
  • 线性回归实践 - 波斯顿房价预测
    • LinearRegression
    • 代码
  • 利用sklearn构建线性回归模型
      • 示例代码如下:
    • 代码

线性回归简述

简单线性回归
在生活中,我们常常能碰到这么一种情况,一个变量会跟着另一个变量的变化而变化,如圆的周长与半径的关系,当圆的半径确定了,那么周长也就确定了。还有一种情况就是,两个变量之间看似存在某种关系,但又没那么确定,如青少年的身高与体重,他们存在一种近似的线性关系:
身高/cm = 体重/kg +105
但是,并不是每个青少年都符合这个公式,只能说每个青少年的身高体重都存在这么一种近似的线性关系。这就是其实就是简单的线性回归,那么,到底什么是线性回归呢?假如我们将青少年的身高和体重值作为坐标,不同人的身高体重就会在平面上构成不同的坐标点,然后用一条直线,尽可能的去拟合这些点,这就是简单的线性回归。
在这里插入图片描述
简单的线性回归模型如下:

y=wx+b

其中x表示特征值(如:体重值),w表示权重,b表示偏置,y表示标签(如:身高值)。

多元线性回归
简单线性回归中,一个变量跟另一个变量的变化而变化,但是生活中,还有很多变量,可能由多个变量的变化决定着它的变化,比如房价,影响它的因素可能有:房屋面积、地理位置等等。如果我们要给它们建立出近似的线性关系,这就是多元线性回归,多元线性回归模型如下:
在这里插入图片描述

答案

在这里插入图片描述

线性回归算法

线性模型的基本概念
常用的线性模型包括:线性回归、岭回归、套索回归等等,下面让我们来研究一下线性模型的特点。
假设x[0], x[1], …, x[p]为数据集中特征变量的数量,那么线性模型的一般预测公式为:
y=w[0]∗x[0]+w[1]∗x[1]+…+w[p]∗x[p]+b
这个公式表示数据集中的数据点一共有p个特征,其中w和p为模型的参数,y为模型对于数据结果的预测值。那如果特征变量只有一个,线性模型的公式为:
y=w[0]∗x[0]+b
是不是很像直线方程的解析式呢,w[0]就是直线的斜率,b就是y轴的偏移量,也就是截距。因此对于多特征变量而言,每个w值对应每个特征直线的斜率,也就是每个特征的权重,它可以为负数。

线性回归的基本原理
线性回归也被称为最小二乘法,是在回归分析中最简单也是最经典的线性模型。
假设平面上有五个点,而线性回归要做的就是要找一条直线,并且让这条直线尽可能地拟合图中的数据点。但是1000个人有1000种直线的画法,可以横着画、竖着画等等,因此需要有一个评判的标准,来评判哪条直线才是最好的。那么该如何判断呢?只要算一下每个点的实际y值和我找出的直线根据每个点x值预测出来的y值之间的距离的平方差,然后将这些平方差相加,其和相对其他直线而言要最小。如下图:
在这里插入图片描述
公式如下:
在这里插入图片描述

表示每个训练数据点 在这里插入图片描述到拟合直线在这里插入图片描述的竖直距离的平方和,通过最小化这个损失函数来求得拟合直线的最佳参数 θ,实际上就是求损失函数在取得最小值情况下θ的值。那么损失函数为什么要用平方差形式呢,而不是绝对值形式,一次方,三次方,或四次方形式?
简单的说,是因为使用平方形式的时候,使用的是“最小二乘法”的思想,这里的“二乘”指的是用平方来度量观测点与估计点的距离(远近),“最小”指的是参数值要保证各个观测点与估计点的距离的平方和达到最小。并且最小二乘法以估计值与观测值的平方和作为损失函数,在误差服从正态分布的前提下,与极大似然估计的思想在本质上是相同。

答案

在这里插入图片描述

线性回归实践 - 波斯顿房价预测

数据集介绍
波斯顿房价数据集共有506条波斯顿房价的数据,每条数据包括对指定房屋的13项数值型特征和目标房价组成。用数据集的80%作为训练集,数据集的20%作为测试集,训练集和测试集中都包括特征和目标房价。
想要使用该数据集可以使用如下代码:

import pandas as pd
#获取训练数据
train_data = pd.read_csv(‘./step3/train_data.csv’)
#获取训练标签
train_label = pd.read_csv(‘./step3/train_label.csv’)
train_label = train_label[‘target’]
#获取测试数据
test_data = pd.read_csv(‘./step3/test_data.csv’)

LinearRegression

LinearRegression的构造函数中有两个常用的参数可以设置:

fit_intercept:是否有截据,如果没有则直线过原点,默认为Ture。
normalize:是否将数据归一化,默认为False。
LinearRegression类中的fit函数用于训练模型,fit函数有两个向量输入:

X:大小为**[样本数量,特征数量]的ndarray,存放训练样本
Y:值为整型,大小为
[样本数量]**的ndarray,存放训练样本的标签值
LinearRegression类中的predict函数用于预测,返回预测值,predict函数有一个向量输入:

X:大小为**[样本数量,特征数量]**的ndarray,存放预测样本
LinearRegression的使用代码如下:

lr = LinearRegression()
lr.fit(X_train, Y_train)
predict = lr.predict(X_test)

代码

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
import pandas as pd#获取训练数据
train_data = pd.read_csv('./step3/train_data.csv')
#获取训练标签
train_label = pd.read_csv('./step3/train_label.csv')
train_label = train_label['target']
#获取测试数据
test_data = pd.read_csv('./step3/test_data.csv')lr = LinearRegression()
lr.fit(train_data, train_label)
predict = lr.predict(test_data)
df = pd.DataFrame({'result': predict})
df.to_csv(r'./step3/result.csv', index = False)

利用sklearn构建线性回归模型

线性模型的用法
在python中,线性回归算法是通过LinearRegression()模块实现的。

from sklearn.linear_model import LinearRegression
lrn = LinearRegression(fit_intercept=True, normalize=False,copy_X=True, n_jobs=1)
参数:
fit_intercept:是否有截据,如果没有则直线过原点,默认为Ture。
normalize:是否将数据归一化,默认为False。
copy_X:默认为True,当为True时,X会被copied,否则X将会被覆写;
n_jobs:默认值为1。计算时使用的核,如果为-1,则代表调用所有cpu

LinearRegression类做了什么功能呢?它帮我们省去了梯度下降、计算损失等等过程。它有一个fit方法,我们把数据集放入此中,它会根据我们提供的数据集为这些数据集规划出一条满足最小二乘法的最优直线。

lr = lrn.fit(x,y)
LinearRegression类中的fit函数用于训练模型,fit函数有两个向量输入:
X:大小为**[样本数量,特征数量]的ndarray,用于存放训练样本。
Y:值为整型,大小为
[样本数量]**的ndarray,用于存放训练样本的标签值。

当我们的模型建立完成后,我们就可以通过调用模型的内部属性打印出我们需要求的直线方程的w值和b值,并且如果结果得到的是负数,它们也会显示负数。

lr.coef_[0] # w值(斜率)
#lr.coef_是存储所有w值的,是一个数组结构,如果有多个特征变量的话就会有多个值在里面,从前往后分别对应着第一个特征变量、第二个特征变量…
lr.intercept_ # b值(截距)
lr.predict([[1]])
#predict函数用于预测,返回预测值。predict函数有一个向量输入:X:大小为**[样本数量,特征数量]**的ndarray,用于存放预测样本

线性回归没有可供用户调节的参数(像KNN算法可以调节参数K值来改变模型的评估,线性回归没有),虽然这是它的优势,但也让我们无法控制模型的复杂性,因此我们在建立模型后往往会出现如:过拟合、欠拟合等情况。

示例代码如下:

from sklearn.linear_model import LinearRegression
x = [[4], [8], [12], [10], [16]]  # 横坐标
y = [3, 5, 7, 10, 15]  # 纵坐标
lr = LinearRegression().fit(x,y)  # 关键点
k = lr.coef_[0]
b = lr.intercept_
print(k, b)
print(lr.predict([[10]]))

代码

from sklearn.linear_model import LinearRegressionx = [[1], [4], [6], [10], [12]] 
y = [3, 5, 7, 10, 6]# 1.建立模型并拟合
# 2.赋值给变量lr
#########  Begin #########lr = LinearRegression().fit(x,y)#########  end  ########### 1.得到回归模型的k值并赋值给变量k
# 2.得到回归模型的b值并赋值给变量b
#########  Begin #########
k = lr.coef_[0]
b = lr.intercept_#########  end  ##########print("回归直线方程为:" + "y = {:.3f}".format(k) + "x" + " + " + "{:.3f}".format(b))

相关文章:

头歌——机器学习(线性回归)

文章目录 线性回归简述答案 线性回归算法答案 线性回归实践 - 波斯顿房价预测LinearRegression代码 利用sklearn构建线性回归模型示例代码如下: 代码 线性回归简述 简单线性回归 在生活中,我们常常能碰到这么一种情况,一个变量会跟着另一个变…...

AI驱动无人驾驶:安全与效率能否兼得?

内容概要 如今,人工智能正以其神奇的魔力驱动着无人驾驶的浪潮,带来了无数令人兴奋的可能性。这一领域的最新动态显示,AI技术在车辆的决策过程和实时数据分析中发挥着重要作用,帮助车辆更聪明地应对复杂的交通环境。通过实时监测…...

使用Git LFS管理大型文件

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Git LFS管理大型文件 引言 Git LFS 简介 安装 Git LFS 安装 Git 安装 Git LFS 配置 Git LFS 初始化 Git 仓库 指定需要使用…...

OpenAI终于正式上线搜索功能,搜索行业要变天了?

OpenAI 的 AI 搜索功能也将引发一场激烈的竞争。 各大科技公司都不会坐视不理,他们必然会纷纷加大对 AI 搜索技术的研发投入,试图在这个新兴的领域分一杯羹。这就像是一场没有硝烟的战争,各方势力都在暗中较劲,谁能笑到最后&…...

ssm《数据库系统原理》课程平台的设计与实现+vue

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码看文章最下面 需要定制看文章最下面 目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容…...

Java SpringBoot调用大模型AI构建AI应用

本文是一个用springboot 结合spring mvc 和spring ai alibaba 调用国产大模型通义千问的具体例子,按照这个做能够快速的搞定Java应用的调用。 然后就可以把这类应用泛化到所有的涉及到非结构化数据结构化的场景中。 Spring AI:简化Java中大模型调用的框…...

MySQL【二】

查询列 SELECT [ALL | DISTINCT ] * | 列名1[,……列名n] FROM 表名; 查询所有选课学生的学号,结果去除重复值 select distinct sno from sc; 选择行 查询满足条件的数据集 SELECT 字段列表 FROM 表名 WHERE 查询条件 查询不属于数学系或外国语系的学生全部信息 …...

SQL 常用语句

目录 我的测试环境 学习文档 进入数据库 基础通关测验 语句-- 查 展示数据库; 进入某个数据库; 展示表: 展示某个表 desc 查询整个表: 查询特定列: 范围查询 等于特定值 不等于 介于 特定字符查询 Li…...

前端埋点系统之如何用heatmap.js画网页热力图

Hello,大家好。在当今数字化时代,理解用户行为成为了企业成功的关键之一。随着互联网的发展,用户与网站、应用和产品的互动变得愈发复杂而多样化。在这样的背景下,埋点系统成为了洞察用户行为的重要工具之一。而其中的热力图分析&…...

CentOS 7系统下Redis Cluster集群一键部署脚本发布

引言 在大数据和云计算时代,Redis作为一款高性能的键值存储数据库,广泛应用于各种场景。然而,手动搭建Redis Cluster集群过程繁琐且容易出错。为了简化这一过程,本文提供了一个在CentOS 7系统下Redis Cluster集群的一键部署脚本,帮助开发者快速搭建Redis Cluster集群。 …...

自编以e为底的对数函数ln,性能接近标准库函数

算法描述: (1). 先做自变量x的范围检查,不能出现负数和0. 自己使用时,如果能通过其它途径保证自变量为正,那么可以省略这两个判断,提高速度。 (2). 根据IEEE 754浮点数的格式,,则 ln(x)kln(2)ln…...

Java中的日期时间

JDK8之前常用的日期时间类 System.currentTimeMillis():获取当前毫秒数(long类型) java.util.Date:通用Date类 import java.util.Date;Date date new Date(); // 空参构造器 System.out.println(date.getTime()); // 获取当前时…...

位置编码的表示

位置编码的表示位置编码的表示位置编码的表示位置编码的表示位置编码的表示...

0,国产FPGA(紫光同创)-新建PDS工程

国产FPGA正在蓬勃发展,紫光同创FPGA是大家竞赛时经常遇到的一款国产FPGA,本专栏从IP核开始一直到后续图像处理等。 开发板:盘古50K标准板 1,新建PDS工程 点击File(1),然后是New Projects&#…...

c++联合

结构体与联合体的区别 结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全分配。 而联合体(union)中是各变量是“互斥”的——缺点就是不够“包容”&#xff…...

Edit Data. Create Cell Editors. Validate User Input 编辑数据。创建 Cell Editors。验证用户输入

Goto Data Grid 数据网格 Edit Data. Create Cell Editors. Validate User Input 编辑数据。创建 Cell Editors。验证用户输入 Get and Modify Cell Values in Code 在代码中获取和修改单元格值 仅当 Grid 及其列已完全初始化时,才使用以下方法。如果需要在表单仍…...

Java 文件操作与IO流

文件 文件有两个概念,在广义来看就是操作系统上对硬件和软件资源抽象为文件。 在侠义上来看,就是我们保存在硬盘上的文件 在这里我们讨论的是狭义的文件,在外面的硬盘上的文件细分又可以分为二进制文件和文本文件,文本文件可以通…...

探索开源MiniMind项目:让大语言模型不再神秘(1)

简介: 声明:本人非此项目作者,仅仅是探索项目,分享项目。如有不妥,请联系我删除! 原项目地址:GitHub - jingyaogong/minimind: 「大模型」3小时完全从0训练26M的小参数GPT,个人显卡即…...

Android 大疆面经

Android 大疆面经 文章目录 Android 大疆面经一面 一面 自我介绍问项目聊了10分钟View的绘制流程MVC,MVP,MVVM的区别view和viewmodel的通信,除了databing还有其他的方式面向对象和面向过程的区别工厂模式和策略模式,哪些框架使用…...

【2024-10-31-2024-11-03】LeetCode刷题——python语法基础题

📝前言说明: ●本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,主要跟随B站作者灵茶山的视频进行学习,专栏中一篇文章为B站对应的一个视频 题目主要为B站视频内涉及的题目以及B站视频中提到的“课后作业”。 ●文章中的理…...

Golang持续集成与自动化测试和部署

概述 Golang是一门性能优异的静态类型语言,但因其奇快的编译速度,结合DevOps, 使得它也非常适合快速开发和迭代。 本文讲述如何使用Golang, 进行持续集成与自动化测试和部署。主要使用了以下相关技术: dep: 进行包的依赖管理gin…...

集成测试的流程总结

首先我们的目的是进行自动化测试,也就是通过cl工具来对我们的项目用我们自己写的yaml文件中的命令来测试项目,这是我们的根本性目的,现在用github action cl工具以及maestro cli 云端作为例子通一遍流程。 首先用xcode创建我们的ios app应用程…...

Leetcode 3567. Minimum Absolute Difference in Sliding Submatrix

Leetcode 3567. Minimum Absolute Difference in Sliding Submatrix 1. 解题思路2. 代码实现 题目链接:3567. Minimum Absolute Difference in Sliding Submatrix 1. 解题思路 这一题想了一下,没想到啥好的思路,就是暴力直接求解了一下&am…...

Arbitrum Stylus 合约实战 :Rust 实现 ERC20

在《Arbitrum Stylus 深入解析与 Rust 合约部署实战》篇中,我们深入探讨了 Arbitrum Stylus 的核心技术架构,包括其 MultiVM 机制、Rust 合约开发环境搭建,以及通过 cargo stylus 实现简单计数器合约的部署与测试。Stylus 作为 Arbitrum Nitr…...

嵌入式RTC工作原理及应用场景

20ppm 是衡量 RTC(实时时钟)精度的关键指标,表示 每百万秒(约11.57天)的最大时间误差范围。以下是通俗易懂的解释: 1. ppm 的含义 ppm Parts Per Million(百万分之一) 1 ppm 1/1,…...

【前端】html2pdf实现用前端下载pdf

npm安装完后&#xff0c;编写代码。 <template><div id"pdf-content">需要被捕获为pdf的内容</div> </template><script> import html2pdf from html2pdf.js;export default {methods: {downloadPdf() {const element document.getE…...

C++哈希表:unordered系列容器详解

本节目标 1.unordered系列关联式容器 2.底层结构 3.模拟实现 4.哈希的应用 5.海量数据处理面试题 unordered系列关联式容器 在c98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可以达到logN&#xff0c;即最差的情况下需要比较红…...

MySQL 全量 增量备份与恢复

目录 前言 一、MySQL 数据库备份概述 1. 数据备份的重要性 2. 数据库备份类型 2.1 从物理与逻辑的角度分类 2.2 从数据库的备份策略角度分类 3. 常见的备份方法 二、数据库完全备份操作 1. 物理冷备份与恢复 1.1 备份数据库 1.2 恢复数据库 2. mysqldump 备份与恢复…...

关于BackgroundScheduler的pause

在APScheduler中&#xff0c;pausedTrue参数的作用对象取决于其使用场景&#xff1a; 1. ‌作用于调度器&#xff08;Scheduler&#xff09;‌ 当在start()方法中使用时&#xff08;如 scheduler.start(pausedTrue)&#xff09; 表示‌调度器本身启动后立即进入暂停状态‌&…...

MySQL 8.0 OCP 英文题库解析(十一)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题91~100 试题91…...