一元线性回归模型模拟预测

一元线性回归是描述两个变量之间的相关关系最简单的模型。
根据两个变量之间的相关关系,拟合出一条直线来预测因变量变化的轨迹。

下面通过自己模拟的一些数据都进行模型预测
在这里插入图片描述
预测值的轨迹

import pandas as pd
import numpy as np
import random
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression as LR

# 获取数据
def get_data():
    # 模拟线性关系的数据
    a = [random.choice(np.arange(10,15)) for i in np.arange(100)]
    b = [random.choice(np.arange(-20,20)) for i in np.arange(100)]
    x = [i for i in np.arange(100)]
    y = [i[0]*i[1]+i[2] for i in zip(a,x,b)]
    x = pd.DataFrame(x, columns=['x'])
    y = pd.DataFrame(y, columns=['y'])
    return x, y

# 绘制预测轨迹及真实数据散点图
def show_predict(x, y):
    # 构建模型
    lr = LR()
    lr.fit(x, y)
    # 预测轨迹
    y_pred = lr.predict(x)
    # 绘制图像
    plt.figure(figsize=(8,6))
    plt.scatter(x, y)
    plt.scatter(x, y_pred, c='r')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.show()
    
def main():
    X, Y = get_data()
    show_predict(X, Y)
    
if __name__ == '__main__':
    main()

在这里插入图片描述
从图像来看,预测值的误差随x的增大而增大。

给定x的值预测y

import pandas as pd
import numpy as np
import random
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression as LR
from sklearn.model_selection import train_test_split as tts


# 获取数据
def get_data():
    # 模拟线性关系的数据
    a = [random.choice(np.arange(10,15)) for i in np.arange(100)]
    b = [random.choice(np.arange(-20,20)) for i in np.arange(100)]
    x = [i for i in np.arange(100)]
    y = [i[0]*i[1]+i[2] for i in zip(a,x,b)]
    x = pd.DataFrame(x, columns=['x'])
    y = pd.DataFrame(y, columns=['y'])
    return x, y


# 构造模型获取预测值
def linear_model_main(x, y, x_pred):
    # 构造回归模型对象
    lr = LR()
    lr.fit(x, y)
    # 预测
    predict_value = lr.predict([x_pred])
    return predict_value


# 画出图像,查看拟合程度
def show_linear_model(x, y):
    # 构造回归模型对象
    lr = LR()
    lr.fit(x, y)    
    # 构建训练集和测试集
    x_train, x_test, y_train, y_test = tts(x, y)
    # 得到预测值并进行图像展示
    y_pred = lr.predict(x_test)
    plt.plot(range(x_test.shape[0]), y_test, ls='-.', c='b')
    plt.plot(range(x_test.shape[0]), y_pred, ls='--', c='r')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.show()
    

def main():
    # 获取数据
    X, Y = get_data()
    #
    x_predict_value = 200
    # 获取预测值
    y_predict_value = linear_model_main(X, Y, [x_predict_value])
    # 输出预测到的值,保留2位小数
    print('y_predict_value={}'.format('%.2f'%y_predict_value[0][0]))
    # 绘制对比图像
    show_linear_model(X, Y)
    
if __name__ == '__main__':
    main()

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

发布了38 篇原创文章 · 获赞 3 · 访问量 3133

猜你喜欢

转载自blog.csdn.net/weixin_44941795/article/details/101692295