线性回归实验

目录

  • WPS使用线性回归处理xlxs文件数据
    • 1、选中数据
    • 2、插入散点图
    • 3、按需要调整横纵坐标
    • 4、选择数据线性回归
  • 用Python处理(不用SKlearn)
    • 20条数据
    • 2000条数据
    • 20000条数据
  • 用Python处理(使用SKLearn)
    • 20条数据
    • 2000条数据
    • 20000条数据
  • R方
  • 总结
  • 参考资料

WPS使用线性回归处理xlxs文件数据

1、选中数据

用WPS打开xlsx文件,勾选要处理的数据区域(图中我勾选了两列),再点击“插入”,点击“全部图标”。

线性回归实验_第1张图片

2、插入散点图

在弹出的页面中,插入散点图。

线性回归实验_第2张图片

3、按需要调整横纵坐标

点击散点图,右击选择数据。

线性回归实验_第3张图片

选中系列,点击编辑后对调列号

线性回归实验_第4张图片

线性回归实验_第5张图片

4、选择数据线性回归

点击散点,右键添加趋势线。

线性回归实验_第6张图片

显示趋势线的公式与拟合优度

线性回归实验_第7张图片

用Python处理(不用SKlearn)

import numpy
import pandas
from matplotlib import pyplot

if __name__ == '__main__':
    # 读取数据数
    data_num = 10000

    # 读取文件
    df = pandas.read_excel("C:\\Users\\a\\Desktop\\weights_heights.xlsx", sheet_name=1).head(data_num)

    # x,y平均值x_mean,y_mean
    x_mean = df["Height"].mean()
    y_mean = df["Weight"].mean()

    # 最小二乘法方程y` = b` * x + a`中的b`计算
    xy_sum = 0
    x2_num = 0
    for i in range(0, data_num):
        xy_sum = xy_sum + df["Height"][i] * df["Weight"][i]
        x2_num = x2_num + df["Height"][i] * df["Height"][i]
    b = (xy_sum - data_num * x_mean * y_mean) / (x2_num - data_num * x_mean * x_mean)

    # a`计算
    a = y_mean - x_mean * b

    # 输出公式
    print("y=%3.3f*x%+3.3f\n" % (b, a))

    # R2计算
    fen_zi = 0
    fen_mu = 0
    for i in range(0, data_num):
        fen_zi = fen_zi + (df["Weight"][i] - (b * df["Height"][i] + a)) * (df["Weight"][i] - (b * df["Height"][i] + a))
        fen_mu = fen_mu + (df["Weight"][i] - y_mean) * (df["Weight"][i] - y_mean)
    R2 = 1 - fen_zi / fen_mu
    print("%3.4f" % R2)

    # 生成横坐标的一系列取值点,用于画图
    x = numpy.arange(60, 80, 0.00001)

    # 画出线性回归方程图
    pyplot.plot(x, b * x + a, color="red")

    # 数据的散点图
    pyplot.scatter(df["Height"], df["Weight"])
    pyplot.show()

上面的代码思路已经在注释里面写出,要处理不同数量的数据,仅需要修改data_num变量即可。

不同的数据量处理结果如下:

20条数据

线性回归实验_第8张图片

2000条数据

线性回归实验_第9张图片

20000条数据

线性回归实验_第10张图片

用Python处理(使用SKLearn)

import numpy
import pandas
from matplotlib import pyplot
from sklearn import linear_model


if __name__ == '__main__':
    # 读取数据数
    data_num = 2000

    # 读取文件
    df = pandas.read_excel("C:\\Users\\a\\Desktop\\weights_heights.xlsx", sheet_name=1).head(data_num)

    # 抽出横纵坐标数据
    x = numpy.array(df.head(data_num)["Height"])
    y = numpy.array(df.head(data_num)["Weight"])

    # 调用模型
    model = linear_model.LinearRegression()
    model.fit(x.reshape(-1, 1), y.reshape(-1, 1))

    # 回归直线斜率
    b = model.coef_

    # 回归曲线截距
    a = model.intercept_

    # 打印线性回归方程
    print("y=%3.3f*x%+3.3f\n" % (b, a))

    # 计算R方
    r2 = model.score(x.reshape(-1, 1), y.reshape(-1, 1))
    print("%3.4f\n" % r2)

    # 取横坐标点,画图
    _x = numpy.arange(60, 80, 0.0001)
    _y = b * _x + a

    # 画出线性回归方程图
    pyplot.plot(_x, _y[0], color="red")

    # 数据的散点图
    pyplot.scatter(df["Height"], df["Weight"])
    pyplot.show()

实验结果是一样的:

20条数据

线性回归实验_第11张图片

2000条数据

线性回归实验_第12张图片

20000条数据

线性回归实验_第13张图片

R方

R方是回归直线对观测值的拟合程度。这个值离1越近,回归直线的拟合效果越好。上面的作业结果显示R方的值都在0.2-0.3徘徊,拟合效果非常差。

不使用sklearn的时候,R方的值要自己算,公式如下:

线性回归实验_第14张图片

总结

本次作业使用了身高体重数据集,并用WPS自带的线性回归处理方式,Python代码处理以及Python的sklearn库的线性回归模型三种不同的方式进行线性回归。通过本次作业,我进一步学习了线性回归,巩固了所学知识。

参考资料

https://blog.csdn.net/weixin_56102526/article/details/120495151

百度百科:拟合优度

你可能感兴趣的:(线性回归,python)