构造用于线性回归分析使用的波动上升随机数据并进行线性回归分析

一、简介

(1)进行线性数据回归分析经常需要用到波动上升的随机数据,本文给出了使用python构建的由线性数据+随机数据+正弦数据的波动上升数据并绘制散点图的代码和效果展示。

(2)该数据共5段100个可用于进行线性回归数据分析。

(3)数据构建好后使用机器学习算法中的线性回归算法求解斜率和截距并进行绘图展示。

二、效果展示 

1、生成的excel表格效果展示

2、散点图和回归曲线效果展示

三、

# -*- coding: utf-8 -*-

#导入第三方库
import random
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.backends.backend_tkagg
import openpyxl
from openpyxl import Workbook
from sklearn.linear_model import LinearRegression

#构造用于线性回归分析使用的波动上升随机数据并进行回归分析

#构造正弦函数(数量20个、幅值0.6)点
m = np.linspace(0, 2*np.pi, 20)  
n = 0.6 * np.sin(m)
#构建1-20序号
numbers_x1 = list(range(1, 21))
#生成20个[(序号/20)+(±0.2)+正弦函数点]的随机数据
numbers_y1 = np.add(np.add([item / 20 for item in numbers_x1],np.random.uniform(-0.2, 0.2, 20).tolist()),n)
#构建21-40序号
numbers_x2 = list(range(21, 41))
#生成20个[(序号/20)+(±0.2)+正弦函数点]的随机数据
numbers_y2 = np.add(np.add([item / 20 for item in numbers_x2],np.random.uniform(-0.2, 0.2, 20).tolist()),n)
#构建41-60序号
numbers_x3 = list(range(41, 61))
#生成20个[(序号/20)+(±0.2)+正弦函数点]的随机数据
numbers_y3 = np.add(np.add([item / 20 for item in numbers_x3],np.random.uniform(-0.2, 0.2, 20).tolist()),n)
#构建61-80序号
numbers_x4 = list(range(61, 81))
#生成20个[(序号/20)+(±0.2)+正弦函数点]的随机数据
numbers_y4 = np.add(np.add([item / 20 for item in numbers_x4],np.random.uniform(-0.2, 0.2, 20).tolist()),n)
#构建81-100序号
numbers_x5 = list(range(81, 101))
#生成20个[(序号/20)+(±0.2)+正弦函数点]的随机数据
numbers_y5 = np.add(np.add([item / 20 for item in numbers_x5],np.random.uniform(-0.2, 0.2, 20).tolist()),n)
#创建excel文件
wb = Workbook()
#选择当前工作表
ws = wb.active
#工作表命名
ws.title = "线性回归数据"
#表格A1写入x
ws['A1'] = 'x'
#表格B1写入y
ws['B1'] = 'y'
#将20个x值写入A列
for i, x1 in enumerate(numbers_x1, start=2):
    cell = 'A{}'.format(i)
    ws[cell] = x1
#将50个y值写入B列
for i, y1 in enumerate(numbers_y1, start=2):
    cell = 'B{}'.format(i)
    ws[cell] = y1
#将20个x值写入A列    
for i, x2 in enumerate(numbers_x2, start=22):
    cell = 'A{}'.format(i)
    ws[cell] = x2
#将50个y值写入B列
for i, y2 in enumerate(numbers_y2, start=22):
    cell = 'B{}'.format(i)
    ws[cell] = y2
#将20个x值写入A列    
for i, x3 in enumerate(numbers_x3, start=42):
    cell = 'A{}'.format(i)
    ws[cell] = x3
#将50个y值写入B列
for i, y3 in enumerate(numbers_y3, start=42):
    cell = 'B{}'.format(i)
    ws[cell] = y3
#将20个x值写入A列    
for i, x4 in enumerate(numbers_x4, start=62):
    cell = 'A{}'.format(i)
    ws[cell] = x4
#将50个y值写入B列
for i, y4 in enumerate(numbers_y4, start=62):
    cell = 'B{}'.format(i)
    ws[cell] = y4
#将20个x值写入A列    
for i, x5 in enumerate(numbers_x5, start=82):
    cell = 'A{}'.format(i)
    ws[cell] = x5
#将50个y值写入B列
for i, y5 in enumerate(numbers_y5, start=82):
    cell = 'B{}'.format(i)
    ws[cell] = y5
#保存excel
wb.save('线性回归数据.xlsx')
#读取excel数据
data = pd.read_excel('线性回归数据.xlsx',sheet_name='线性回归数据')
#中文识别
matplotlib.rcParams['font.sans-serif'] = ['simHei']
matplotlib.rcParams['axes.unicode_minus'] = False
#获取x列
x = data['x']
#获取y列
y = data['y']
#将x转换为1维数组
X = np.array(x).reshape(-1, 1)
#将y转换为1维数组
Y = np.array(y).reshape(-1, 1)
#定义回归函数
reg = LinearRegression()
#训练模型
reg.fit(X,Y)
#求线性系数
a = reg.coef_[0][0]
#求回归直线截距
b = reg.intercept_[0]
#绘制散点图
plt.scatter(x,y,color = 'b')
#求回归直线函数
y1 = a*x + b
#绘制回归直线
plt.plot(x,y1,color= 'r')
#绘制注释
plt.annotate('回归方程为:Y = %.4fX + %.4f' % (a, b),xy=(20,4),xytext=(5,4))
#绘图显示
plt.show()

代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值