线性回归在数据库中的应用

news2024/11/15 4:55:33

简介

        今天看到微信群有人问,如何知道数据库一年的磁盘增量?如果没有研究过统计学,IT人员对于这个问题就只能靠经验了去断定了。没经验的往往都是回复扩容越大越好。当然未来的事情我们是无法预料的。本博主就通过简单的线性回归做一个计算,算出一年数据库的磁盘增量的大小和概率。

线性回归 

        线性回归是一种统计学和机器学习中常用的方法,用于建立自变量(输入)与因变量(输出)之间的线性关系模型。它假设自变量与因变量之间存在线性关系,并试图找到最佳拟合直线,以最小化预测值与实际观测值之间的差距。

        在简单线性回归中,只涉及一个自变量和一个因变量。模型可以表示为:

y=mx+b

         其中,y是因变量,x是自变量,m是斜率,b是截距。模型的目标是找到最合适的斜率和截距,使得预测值与实际观测值之间的平方差最小化,这被称为最小二乘法。

        在多元线性回归中,涉及多个自变量和一个因变量。模型可以表示为:

        

 

        其中,y是因变量,x1​,x2​,…,xn​是多个自变量,b0​,b1​,b2​,…,bn​是回归系数。模型的目标是找到最合适的回归系数,以最小化预测值与实际观测值之间的误差。

        线性回归常用于预测、建模和理解变量之间的关系。它的简单性和解释性使其成为许多数据分析和机器学习问题的基础。然而,线性回归也有其局限性,例如,它假设自变量与因变量之间的关系是线性的,而且对异常值敏感。

统计数据库大小

        在实际生产中,我们需要知道数据库每日增量大小,具有一定的数据量进行对未来预测。我们使用存储过程,每天定时统计数据库大小。

创建表结构

        用于装载数据库每日的磁盘空间大小和变化

CREATE TABLE daily_stats (
    date date NOT NULL,
	database_name varchar(200),
    databases_size integer NOT NULL,
    size_increment integer
);

创建存储过程计算数据库的磁盘空间大小和变化

CREATE OR REPLACE FUNCTION update_daily_stats()
RETURNS void AS $$
DECLARE
    today_size integer;
    yesterday_size integer;
    increment_size integer;
BEGIN
  
    -- 获取今天的数据库大小
    SELECT databases_size INTO yesterday_size
    FROM daily_stats
    WHERE date = current_date - interval '1 day';
   
   --插入到目标表中
   insert into  daily_stats (
    date,
	database_name,
    databases_size,
    size_increment)
SELECT
current_date, 
string_agg(datname::text,',') as database_name,
sum(pg_database_size(datname)) AS databases_size,
sum(pg_database_size(datname))-yesterday_size  size_increment
from pg_database;

    RETURN;
END;
$$ LANGUAGE plpgsql;

 加入到定时调度中(这里使用crontab虚拟机自带的程序)

[postgres@vm03 ~]$ crontab -e 

0 0 * * *   psql  -c "SELECT update_daily_stats();"

让其统计每一天的数据库空间变化。

本文作为演示,假设出30天的数据库单日增量如下

30, 15, 64, 45, 92, 14, 23, 88, 14, 33, 24, 30, 14, 20, 36, 49, 16, 16, 32, 35, 46, 97, 13, 56, 32, 45, 26, 32, 65, 12

python编程

        博主目前使用线性回归算法,多是numpy包和spark的MLlib库。本文均会进行举例说明。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 数据集
data = np.array([30, 15, 64, 45, 92, 14, 23, 88, 14, 33, 24, 30, 14, 20, 36, 49, 16, 16, 32, 35, 46, 97, 13, 56, 32, 45, 26, 32, 65, 12])

# 月份
months = np.arange(1, len(data) + 1)
##使用NumPy的arange函数生成一个包含1到数据集长度的数组,用于表示月份。


# 使用NumPy进行线性回归
coefficients = np.polyfit(months, data, 1)
linear_model = np.poly1d(coefficients)
##使用np.polyfit函数进行线性回归,其中1表示一次线性回归,次数越多,曲线的曲率越接近散点的波动。np.poly1d用于创建一个一次多项式对象,即线性模型。



# 画出原始数据和线性回归模型的拟合结果
plt.scatter(months, data, label="Actual Data")
plt.plot(months, linear_model(months), color='red', label="Linear Regression Model")
plt.xlabel("Month")
plt.ylabel("Increment (GB)")
plt.legend()
plt.show()
##使用Matplotlib绘制散点图表示原始数据,然后使用红色线条表示线性回归模型的拟合结果。



# 预测一年的总增量
one_year_months = 12 * np.arange(1, 13)
one_year_increment = linear_model(one_year_months).sum()
print("预测一年的总增量:", one_year_increment)
##创建包含一年内每个月份的数组,然后使用线性回归模型预测每个月的增量,最后使用sum函数计算一年的总增量。


# 生成正态分布的随机样本
num_samples = 1000
simulated_data = np.random.normal(loc=one_year_increment, scale=5, size=num_samples)
#使用NumPy的random.normal函数生成一个包含1000个样本的正态分布,其中loc是均值,scale是标准差。

# 画出正态分布图
sns.histplot(simulated_data, kde=True, color='skyblue')
plt.axvline(x=one_year_increment, color='red', linestyle='--', label='Predicted Value')
plt.xlabel("One Year Increment")
plt.ylabel("Frequency")
plt.legend()
plt.show()
##使用Seaborn绘制正态分布的直方图和核密度估计图,同时用红色虚线表示预测值。

        通过线性回归计算出在一个月内数据库空间增量大小的线性回归模型,

        根据线性回归模型做出一年数据库增量大小,并做出正态分布图。期望值是~400。其置信区间~50%。常规我们在做预判的时候,取置信区间~80%即可。

         根绝以上的结果,可以算出一年数据库的磁盘空间增量大概是400G 有大约50%的概率。

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

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

相关文章

12. IO

1.File类 • File 类代表与平台无关的文件和目录。 • File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。 1).File的常用方法 在这里插入图片描述 2).遍历给定目录所有文件 …

QT-坦克大战游戏

QT-坦克大战游戏 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "score.h" Score::Score(){health30; maxHealthhealth;QLabel *label1 new QLabel(this);label1->setFrameStyle(QFrame::Plain | QFrame::Box);label1->setStyle…

SpringCloud面试题——Sentinel

一:什么是Sentinel? Sentinel是一个面向分布式架构的轻量级服务保护框架,实现服务降级、服务熔断、服务限流等功能 二:什么是服务降级? 比如当某个服务繁忙,不能让客户端的请求一直等待,应该立刻返回给客户端一个备…

干货|你必须要知道的机器视觉常识!

Part.1 机器视觉是什么 机器视觉是一种能够模拟人类视觉系统的技术,是计算机的“慧眼”,能够使计算机理解和解释图像或视频中的信息。 机器视觉包括图像处理、机械工程技术、控制、电光源照明、光学成像、传感器、模拟与数字视频技术、计算机软硬件技术…

设计模式-状态(State)模式

目录 开发过程中的一些场景 状态模式的简单介绍 状态模式UML类图 类图讲解 适用场景 Java中的例子 案例讲解 什么是状态机 如何实现状态机 SpringBoot状态自动机 优点 缺点 与其他模式的区别 小结 开发过程中的一些场景 我们在平时的开发过程中,经常会…

C++ Qt开发:ProgressBar进度条组件

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ProgressBar进度条组件的常用方法及灵活运用。…

SpringBoot配置mysql加密之Druid方式

一、导入Druid依赖 <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.22</version> </dependency>二、生成密文 方式1. 找到存放druid jar包的目录 1-1、在目录…

EasyExcel处理表头的缓存设置

在学习EasyExcel 时会发现针对使用类模型配置表头相关属性时&#xff0c;EasyExcel 会使用到缓存技术以提升表头的解析速度如下代码&#xff1a; 这些参数再何时设置的哪&#xff1f; 在easyExcel 基础参数设置中会有这个参数filedCacheLocation 。默认采用的使用线程级别的…

MVVM前端设计模式的发展与应用

在MVC模式中&#xff0c;随着代码量越来越大&#xff0c;Controller主要用来处理各种逻辑和数据转化的Controller首当其冲&#xff0c;变得非常庞大&#xff0c;MVC的简写变成了Massive-View-Controller&#xff08;意为沉重的Controller&#xff09; 我曾经接手老项目&#x…

什么是rocketmq❓

在大规模分布式系统中&#xff0c;各个服务之间的通信是至关重要的&#xff0c;而RocketMQ作为一款分布式消息中间件&#xff0c;为解决这一问题提供了强大的解决方案。本文将深入探讨RocketMQ的基本概念、用途&#xff0c;以及在实际分布式系统中的作用&#xff0c;并对Produc…

CBTC上海新能源锂电池展览会奋战华东!2024携手共赢!

2024CBTC上海新能源锂电池技术展览会|上海锂离子电池生产设备展览会 时 间&#xff1a;2024年7月24&#xff5e;26日 地 点&#xff1a;国家会展中心&#xff08;上海虹桥&#xff09; 发展前景&#xff1a; 随着科技的不断进步&#xff0c;锂电池市场逐渐成为全球能源市场的…

GD32f103系列教程—(SPI DMA方式软件实现篇)

DMA知识简介: DMA 控制器提供了一种硬件的方式在外设和存储器之间或者存储器和存储器之间传输数据&#xff0c;而无需 CPU 的介入&#xff0c;从而使 CPU 可以专注在处理其他系统功能上。 项目中需要采用DMA方式传输数据的原因&#xff1a;如果仅仅采用SPI接口进行寄存器通信&…

vue2项目vue-qrcode-reader 扫一扫二维码插件

vue2项目 vue-qrcode-reader 扫一扫二维码插件 问题所在解决办法成功展示 问题所在 今天在引导师弟做扫二维码功能&#xff0c;发现通过npm install --save vue-qrcode-reade安装死活就是报错TypeError: Object...) is not a function 解决办法 百度了很多大牛的博客&#…

【深度学习目标检测】三、基于深度学习的人物摔倒检测(python,yolov8)

深度学习目标检测方法则是利用深度神经网络模型进行目标检测&#xff0c;主要有以下几种&#xff1a; R-CNN系列&#xff1a;包括R-CNN、Fast R-CNN、Faster R-CNN等&#xff0c;通过候选区域法生成候选目标区域&#xff0c;然后使用卷积神经网络提取特征&#xff0c;并通过分类…

【高效开发工具系列】DataGrip入门

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

数据分享 I 全国市级商品房屋销售数据,shp/excel格式,2005-2020年数据

基本信息. 数据名称: 全国市级商品房屋销售数据 数据格式: Shp、excel 数据时间: 2005-2020年 数据几何类型: 面 数据坐标系: WGS84坐标系 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1spxse商品房销售额&#xff08;亿元&#xf…

主卧卫生间门对着床,怎么设计才能让你好好睡觉呢?福州中宅装饰,福州装修

主卧卫生间门对着床&#xff0c;一抬眼就能和卫生间来一个对视&#xff0c;心里很膈应&#xff0c;那么怎么解决这个问题呢&#xff1f; 1️⃣门改方向 首先&#xff0c;你可以考虑把卫生间门的开门方向改一下。如果卫生间门是向外开的&#xff0c;你可以考虑把门换成向内开的…

吴恩达《机器学习》12-4-12-5:核函数 1、核函数 2

一、核函数 1 1. 多项式模型的局限性 在之前的学习中&#xff0c;了解到可以使用多项式模型来解决无法用直线进行分隔的分类问题。例如&#xff0c;对于判定边界的建模&#xff0c;可能会使用类似于以下形式的模型&#xff1a; 然而&#xff0c;这样的多项式模型在实际应用中…

ALV动态GUI标题

导语&#xff1a;快两个月没有分享内容了&#xff0c;积攒了一大堆&#xff0c;最近经历了一些变动&#xff0c;有些充实和忙碌&#xff0c;最近在做的客制化平台中&#xff0c;顾问需要在不同的按钮对应的ALV中&#xff0c;展示不同的GUI标题。 效果图&#xff1a; 实现方法&a…

大模型概述

文章目录 大模型语言大模型视觉大模型多模态大模型 大模型 所谓 大&#xff1a;模型结构大&#xff0c; 参数量大&#xff0c;训练数据量大 大模型包含数十亿个参数&#xff0c;模型大小可以达到数百GB甚至更大。这种巨大的模型规模为其提供了强大的表达能力和学习能力多任务…