机器学习(二)-简单线性回归

文章目录

    • 1. 简单线性回归理论
    • 2. python通过简单线性回归预测房价
      • 2.1 预测数据
      • 2.2导入标准库
      • 2.3 导入数据
      • 2.4 划分数据集
      • 2.5 导入线性回归模块
      • 2.6 对测试集进行预测
      • 2.7 计算均方误差 J
      • 2.8 计算参数 w0、w1
      • 2.9 可视化训练集拟合结果
      • 2.10 可视化测试集拟合结果
      • 2.11 保存模型
      • 2.12 加载模型并预测

在机器学习和统计学中,简单线性回归是一种基础而强大的工具,用于建立自变量与因变量之间的关系。

假设你是一个房产中介,想通过房屋面积来预测房价。简单线性回归可以帮助你找到房屋面积与房价之间的线性关系,进而为客户提供更合理的报价。

本文将带你深入了解简单线性回归的理论基础、公式推导以及如何在Python中实现这一模型。

1. 简单线性回归理论

简单线性回归的基本假设是,因变量 Y(例如房价)与自变量 X(例如人口)之间存在线性关系。我们可以用以下的线性方程来表示这种关系:
在这里插入图片描述

其中:

  • y 是因变量(我们要预测的变量)。

  • x 是自变量(我们用来进行预测的变量)。

  • w0是截距(当x=0) 时,y的值)。

  • w1是斜率(自变量变化一个单位时,因变量的变化量)。

我们的目标是求 w0和w1的值,来找到一条跟预测值相关的直线。

从图中我们可以看出预测值与真实值之间存在误差,那么我们引入机器学习中的一个概念均方误差,它表示的是这些差值的平方和的平均数。这些误差的表达式如下:
在这里插入图片描述

均方误差的表达式如下:
在这里插入图片描述

2. python通过简单线性回归预测房价

2.1 预测数据

数据如下:

polulation,median_house_value
961,3.03
234,0.68
1074,2.92
1547,4.24
805,2.39
597,1.59
784,2.21
498,1.31
1602,4.28
292,0.54
1499,4.18
718,1.95
180,0.43
1202,3.62
1258,3.48
453,1.08
845,2.31
1032,2.96
384,0.68
896,2.62
425,0.82
928,2.95
1324,3.59
1435,4.02
543,1.62
1132,3.34
328,0.76
638,1.54
1389,3.78
692,1.79

x 轴是人口数量,y轴是房价

2.2导入标准库

# 导入标准库
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import pandas as pd
matplotlib.use('TkAgg')

2.3 导入数据

# 导入数据集
dataset = pd.read_csv('Data.csv')
x = dataset.iloc[:, :-1]
y = dataset.iloc[:, 1]

2.4 划分数据集

# 数据集划分 训练集/测试集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=0)

2.5 导入线性回归模块

# 简单线性回归算法
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

2.6 对测试集进行预测

# 对测试集进行预测
y_pred = regressor.predict(X_test)

2.7 计算均方误差 J

# 计算J
J = 1/X_train.shape[0] * np.sum((regressor.predict(X_train) - y_train)**2)
print("J = {}".format(J))

输出结果:

J = 0.031198935319832692

2.8 计算参数 w0、w1

# 计算参数 w0、w1
w0 = regressor.intercept_
w1 = regressor.coef_[0]
print("w0 = {}, w1 = {}".format(w0, w1))

输出结果:

w0 = -0.16411984840092098, w1 = 0.0029383965595942067

2.9 可视化训练集拟合结果

# 可视化训练集拟合结果
plt.figure(1)
plt.scatter(X_train, y_train, color = 'red')
plt.plot(X_train, regressor.predict(X_train), color = 'blue')
plt.title('population VS median_house_value (training set)')
plt.xlabel('population')
plt.ylabel('median_house_value')
plt.show()

输出结果:
在这里插入图片描述

可以很好的看到拟合的直线可以很好的表示原始数据的人口和房价的走势

2.10 可视化测试集拟合结果

# 可视化测试集拟合结果
plt.figure(2)
plt.scatter(X_test, y_test, color = 'red')
plt.plot(X_train, regressor.predict(X_train), color = 'blue')
plt.title('population VS median_house_value (test set)')
plt.xlabel('population')
plt.ylabel('median_house_value')
plt.show()

输出结果:
在这里插入图片描述

可以看到,拟合的直线在测试集上的表现是相当不错了,说明我们训练的线性模型有很好的应用效果。

2.11 保存模型

# 保存模型
import pickle
with open('../model/simple_house_price_model.pkl','wb') as file:pickle.dump(regressor,file);

2.12 加载模型并预测

import pickle
import numpy as np
import pandas as pd
# 加载模型并预测
with open('../model/simple_house_price_model.pkl','rb') as file:model = pickle.load(file)x_test = np.array([693,694])
x_test = pd.DataFrame(x_test)
x_test.columns=['polulation']
y_pred = model.predict(x_test)
print(y_pred)

输出结果:

[1.87218897 1.87512736]

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

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

相关文章

WHAT KAN I SAY?Kolmogorov-Arnold Network (KAN)网络结构介绍及实战(文末送书)

一、KAN网络介绍 1.1 Kolmogorov-Arnold Network (KAN)网络结构的提出 2024年4月,来自MIT、加州理工学院、东北大学等团队的研究,引爆了一整个科技圈:Yes We KAN! 这种创新方法挑战了多层感知器(Multilayer Perceptron&#xff…

YOLO11改进-模块-引入星型运算Star Blocks

当前网络设计中,“星型运算”(逐元素乘法)的应用原理未被充分探究,潜力有待挖掘。为解决此问题,我们引入 Star Blocks,其内部由 DW - Conv、BN、ReLU 等模块经星型运算连接,各模块有特定参数。同…

3.银河麒麟V10 离线安装Nginx

1. 下载nginx离线安装包 前往官网下载离线压缩包 2. 下载3个依赖 openssl依赖,前往 官网下载 pcre2依赖下载,前往Git下载 zlib依赖下载,前往Git下载 下载完成后完整的包如下: 如果网速下载不到请使用网盘下载 通过网盘分享的文件…

【理解机器学习中的过拟合与欠拟合】

在机器学习中,模型的表现很大程度上取决于我们如何平衡“过拟合”和“欠拟合”。本文通过理论介绍和代码演示,详细解析过拟合与欠拟合现象,并提出应对策略。主要内容如下: 什么是过拟合和欠拟合? 如何防止过拟合和欠拟…

【婚庆摄影小程序设计与实现】

摘 要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。所以各大互联网厂商都瞄准移动互联网这个潮…

12.26 学习卷积神经网路(CNN)

完全是基于下面这个博客来进行学习的,感谢! ​​【深度学习基础】详解Pytorch搭建CNN卷积神经网络LeNet-5实现手写数字识别_pytorch cnn-CSDN博客 基于深度神经网络DNN实现的手写数字识别,将灰度图像转换后的二维数组展平到一维,…

Unity URP多光源支持,多光源阴影投射,多光源阴影接收(优化版)

目录 前言: 一、属性 二、SubShader 三、ForwardLitPass 定义Tags 声明变体 声明变量 定义结构体 顶点Shader 片元Shader 四、全代码 四、添加官方的LitShader代码 五、全代码 六、效果图 七、结语 前言: 哈喽啊,我又来啦。这…

如何使用React,透传各类组件能力/属性?

在23年的时候,我主要使用的框架还是Vue,当时写了一篇“如何二次封装一个Vue3组件库?”的文章,里面涉及了一些如何使用Vue透传组件能力的方法。在我24年接触React之后,我发现这种扩展组件能力的方式有一个专门的术语&am…

109.【C语言】数据结构之求二叉树的高度

目录 1.知识回顾:高度(也称深度) 2.分析 设计代码框架 返回左右子树高度较大的那个的写法一:if语句 返回左右子树高度较大的那个的写法二:三目操作符 3.代码 4.反思 问题 出问题的代码 改进后的代码 执行结果 1.知识回顾&#xf…

分析排名靠前的一些自媒体平台,如何运用这些平台?

众所周知,现在做网站越来越难了,主要的原因还是因为流量红利时代过去了。并且搜索引擎都在给自己的平台做闭环改造。搜索引擎的流量扶持太低了。如百度投资知乎,给知乎带来很多流量扶持,也为自身内容不足做一个填补。 而我们站长…

2024大模型在软件开发中的具体应用有哪些?(附实践资料合集)

大模型在软件开发中的具体应用非常广泛,以下是一些主要的应用领域: 自动化代码生成与智能编程助手: AI大模型能够根据开发者的自然语言描述自动生成代码,减少手动编写代码的工作量。例如,GitHub Copilot工具就是利用AI…

Ubuntu网络配置(桥接模式, nat模式, host主机模式)

windows上安装了vmware虚拟机, vmware虚拟机上运行着ubuntu系统。windows与虚拟机可以通过三种方式进行通信。分别是桥接模式;nat模式;host模式 一、桥接模式 所谓桥接模式,也就是虚拟机与宿主机处于同一个网段, 宿主机…

3.系统学习-熵与决策树

熵与决策树 前言1.从数学开始信息量(Information Content / Shannon information)信息熵(Information Entropy)条件熵信息增益 决策树认识2.基于信息增益的ID3决策树3.C4.5决策树算法C4.5决策树算法的介绍决策树C4.5算法的不足与思考 4. CART 树基尼指数(基尼不纯度…

SpringBoot + HttpSession 自定义生成sessionId

SpringBoot HttpSession 自定义生成sessionId 业务场景实现方案 业务场景 最近在做用户登录过程中,由于默认ID是通过UUID创建的,缺乏足够的安全性,决定要自定义生成 sessionId。 实现方案 正常的获取session方法如下: HttpSe…

破解海外业务困局:新加坡服务器托管与跨境组网策略

在当今全球化商业蓬勃发展的浪潮之下,众多企业将目光投向海外市场,力求拓展业务版图、抢占发展先机。而新加坡,凭借其卓越的地理位置、强劲的经济发展态势以及高度国际化的营商环境,已然成为企业海外布局的热门之选。此时&#xf…

数学课程评价系统:客户服务与教学支持

2.1 SSM框架介绍 本课题程序开发使用到的框架技术,英文名称缩写是SSM,在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等,作为一个课题程序采用SSH框架也可以,SSM框架也可以,SpringMVC也可以。SSH框架是属于重量级…

攻防世界web第三题file_include

<?php highlight_file(__FILE__);include("./check.php");if(isset($_GET[filename])){$filename $_GET[filename];include($filename);} ?>惯例&#xff1a; 代码审查&#xff1a; 1.可以看到include(“./check.php”);猜测是同级目录下有一个check.php文…

【深度学习环境】NVIDIA Driver、Cuda和Pytorch(centos9机器,要用到显示器)

文章目录 一 、Anaconda install二、 NIVIDIA driver install三、 Cuda install四、Pytorch install 一 、Anaconda install Step 1 Go to the official website: https://www.anaconda.com/download Input your email and submit. Step 2 Select your version, and click i…

寻找适合小户型的开源知识库open source knowledge base之路

寻找一个开源的知识库&#xff0c;为了把以前花很多时间收集的信息或是项目/课程资料放到一个容易归类和管理的私有自主系统中&#xff0c;以便更容易查阅&#xff0c;花更少时间收集、对比版本及分享等一系列管理工作&#xff0c;同时确保在需要时可以相对快速找到有用的资料&…

C语言勘破之路-最终篇 —— 预处理(上)

人无完人&#xff0c;持之以恒&#xff0c;方能见真我&#xff01;&#xff01;&#xff01; 共同进步&#xff01;&#xff01; 文章目录 一、预定义符号二、#define定义常量三.、#define定义宏四、带有副作用的宏参数五、宏替换的规则六、宏和函数的对比1.宏的优势2.函数的优…