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

文章目录

  • 线性回归简述
    • 答案
  • 线性回归算法
    • 答案
  • 线性回归实践 - 波斯顿房价预测
    • 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))

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术美术百人计划 | 《5.4 水体渲染》笔记

一、水体渲染的波形模拟技术-基于物理 基于物理的波形模拟方法: 欧拉方法(Eulerian approaches)[Kass 1990]拉格朗日方法(Lagrangian approaches) [Stam 1995]欧拉-拉格朗日混合方法(Hybrid approaches&a…

使用 Sortable.js 库 实现 Vue3 elementPlus 的 el-table 拖拽排序

文章目录 实现效果Sortable.js介绍下载依赖添加类名导入sortablejs初始化拖拽实例拖拽完成后的处理总结 在开发过程中,我们经常需要处理表格数据,并为用户提供便捷的排序方式。特别是在需要管理长列表、分类数据或动态内容时,拖拽排序功能显得…

Chrome与火狐的安全功能全面评估

在当今数字化时代,网络安全已成为用户最为关注的问题之一。作为两款广受欢迎的浏览器,Chrome和火狐(Firefox)都提供了多种安全功能来保护用户的在线隐私和数据安全。本文将全面评估这两款浏览器的安全功能,帮助用户更好…

Java-02

笔试算法: 41. 回文串 我们称一个字符串为回文串,当且仅当这个串从左往右和从右往左读是一样的。例如,aabbaa、a、abcba 是回文串,而 ab、ba、abc 不是回文串。注意单个字符也算是回文串。 现在,给你一个长度为n的…

Windows实用工具推荐(uTools+截图工具Snipaste)

闲言少叙,直奔主题 uTools 官网下载地址 uTools官网 - 新一代效率工具平台 这是工具的输入命令的样式,主题颜色可以自己设置,点击右边的头像进入主页 左侧是已经安装的工具,可以根据自己喜好安装各种实用小工具 可以自定义设置呼出菜单的快捷键 这款工具拥有很多功能,我推荐…

ViT面试知识点

文章目录 VITCLIPSAMYOLO系列问题 VIT 介绍一下Visual Transformer? 介绍一下自注意力机制? 介绍一下VIT的输出方式 介绍一下VIT做分割任务 VIT是将NLP的transformer迁移到cv领域,他的整个流程大概如下:将一张图片切成很多个pat…

STM32之串口字库更新

1.串口通讯介绍 串口通讯(Serial Communications)是一种通过串口进行数据传输的通讯方式,通过串行口每次传输一个字节的数据,按照约定的协议进行数据的传输和接收。串口通讯的原理是利用串行口的发送和接收线路,将需要…

【大语言模型】ACL2024论文-06 探索思维链COT在多模态隐喻检测中的应用

【大语言模型】ACL2024论文-06 探索思维链COT在多模态隐喻检测中的应用 目录 文章目录 【大语言模型】ACL2024论文-06 探索思维链COT在多模态隐喻检测中的应用目录摘要研究背景问题与挑战如何解决创新点算法模型1. 知识总结模块(Knowledge Summarization Module&…

第三十一章 单页与多页应用程序概念

目录 一、概述 ​二、单页与多页对比 一、概述 单页面应用(SPA): 所有功能在一个HTML页面上实现,如网易云音乐。 https://music.163.com/ 多页应用:通过多个HTML页面组合实现整个应用网站的功能。 二、单页与多页对比 单页面应用的主要场景&#xff1…

开源 AI 智能名片 2 + 1 链动模式 S2B2C 商城小程序中积分使用价值的拓展策略

摘要:本文围绕开源 AI 智能名片 2 1 链动模式 S2B2C 商城小程序,深入探讨其积分使用价值的丰富策略。详细分析积分兑换礼品、会员升级、积分抵现等方式在该特定商城小程序环境下的应用特点、存在问题及对用户和商城的影响,旨在为商城的优化运…

C++ | Leetcode C++题解之第526题优美的排列

题目&#xff1a; 题解&#xff1a; class Solution { public:int countArrangement(int n) {vector<int> f(1 << n);f[0] 1;for (int mask 1; mask < (1 << n); mask) {int num __builtin_popcount(mask);for (int i 0; i < n; i) {if (mask &am…

【Linux 25】网络套接字 socket 概念

文章目录 &#x1f308; 一、IP 地址概念⭐ 1. IP 地址的作用⭐ 2. 源 IP 地址和目的 IP 地址 &#x1f308; 二、端口号概念⭐ 1. 源端口号和目的端口号⭐ 2. 端口号范围划分⭐ 3. 端口号 VS 进程 ID⭐ 4. 套接字 socket 的概念 &#x1f308; 三、传输层的典型代表协议⭐ 1. …

利用Docker Compose构建微服务架构

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 利用Docker Compose构建微服务架构 引言 Docker Compose 简介 安装 Docker Compose 创建项目结构 编写 Dockerfile 前端 Dockerf…

【Vue】一个案例带你学会组件通信!!!(1)(父传子props+子传父$emit)

嘿&#xff0c;开发者们&#x1f44b;&#xff01;欢迎来到今天的Vue.js组件通信大冒险。你是否曾在父子组件间的数据同步问题上感到头疼&#xff1f;&#x1f92f; 今天&#xff0c;我们将一起揭开Vue.js父子通信的神秘面纱&#xff0c;学习如何让数据在父子组件间流畅地“跳舞…

在VS中安装chatGPT

2、在VSCode中打开插件窗口 3、输入ChatGPT 4、这里有个ChatGPT中文版&#xff0c;就它了 5、安装 6、这时候侧边栏多了一个chatGPT分页图标&#xff0c;点击它 7、打个招呼 8、好像不行 9、看一下细节描述 10、根据要求按下按下快捷键 Ctrl Shift P 11、切换成国内模式 12、…

3. keil + vscode 进行stm32协同开发

1. 为什么使用vscode 主要还是界面友好&#xff0c;使用习惯问题&#xff0c;vscode 从前端&#xff0c;js, c/c, qt, 仓颉&#xff0c;rust都有很好插件的支持&#xff0c;并且有romote&#xff0c; wsl 等很多插件可以提高效率&#xff0c; 唯一的问题就是要使用插件进行环境…

PostgreSQL 学习笔记:PostgreSQL 主从复制

PostgreSQL 笔记&#xff1a;PostgreSQL 主从复制 博客地址&#xff1a;TMDOG 的博客 在现代应用程序中&#xff0c;数据库的高可用性和扩展性是至关重要的。PostgreSQL 提供了主从复制功能&#xff0c;可以在多个数据库实例之间复制数据&#xff0c;以实现冗余和负载均衡。本…

433、315通信、ev1527、2262编码

目录 ASK介绍EV1527编码芯片介绍模块介绍无线发射芯片无线接收芯片解码程序发射电路原理图 ASK介绍 ASK是幅移键控&#xff0c;通过调幅将数据发送出去&#xff0c;所以发送与接收都是多位二进制数。 ASK如何区分0和1&#xff1f; 0&#xff1a;发送 433.92Mhz 无线波形&…

Python 5个数据容器

列表&#xff08;list&#xff09; 特点&#xff1a;可以被修改 列表的定义 定义空列表&#xff1a; 变量名 [] 或 变量名 list() 定义变量&#xff1a; 变量名 [元素1&#xff0c;元素2&#xff0c;元素3&#xff0c;... ] 取出列表元素 列表名 [下标索引] 从前向…

复习数据库(约束)上篇

目录 约束的分类 分类 注意 主键约束 添加主键约束 1 建表时&#xff0c;添加 1.1创建表&#xff1a;定义列时指定 1.2 创建表&#xff1a;定义列之后独立指定主键&#xff1a; 2 建表后使用alter 关键字添加 删除约束 在主键添加自动增长属性 疑问 1 建表时添加 …