Python 数据可视化入门 8 - 用 Numpy 做线性回归分析

힘센캥거루
2023년 11월 21일(수정됨)
3
14

在上一篇文章中,我们在 Matplotlib 里使用 subplots 画了图。 

这次文章中打算利用 numpy 的 polynomial 做线性回归分析

1. 什么是线性回归分析?

查看维基百科,对线性回归分析有如下说明。

在统计学中,线性回归是一种回归分析方法,用来对因变量 y 与一个或多个自变量 X 之间的线性相关关系进行建模。
-维基百科-

非常简单地说,也可以理解为图上所标示的那些值所具有的平均斜率

把线性回归显示在图上,可以更清晰地展现原本仅凭肉眼模糊可见的两个值之间的相关关系

Python 数据可视化入门 8 - 用 Numpy 做线性回归分析-1

上面的图是可视化了从 kaggle 下载的数据

其中包含家长受教育程度、种族、学生的成绩等内容,这里对数学–阅读成绩之间的关系进行了图示

文件可以下载下面附上的,也可以通过链接进入下载。下面的文件已经做了韩文化处理,可以根据自己的需要选择。

2. 画图

先像上面的图那样,用散点图(scatter)画出学生的数学成绩和阅读成绩。

从之前课程中用过的代码完全一样地开始,只需要把读取文件的路径改一下即可。

import pandas as pd

# 모듈 호출 및 한글폰트 설정
import matplotlib.pyplot as plt
import matplotlib

# MacOS에서 폰트설정
# matplotlib.rcParams["font.family"] = "AppleGothic"

# 윈도우에서 폰트설정
matplotlib.rcParams["font.family"] = "Malgun Gothic"

# 폰트 크기 설정
matplotlib.rcParams["font.size"] = 13

# 마이너스 출력 문제 해결
plt.rcParams['axes.unicode_minus'] = False

score = pd.read_excel("./StudentsPerformance.xlsx")
score.head(3)
Python 数据可视化入门 8 - 用 Numpy 做线性回归分析-2

现在利用这些数据,把数学成绩和阅读成绩作为 plt.scatter 的参数传入。

plt.scatter(score["수학점수"], score["읽기점수"])
Python 数据可视化入门 8 - 用 Numpy 做线性回归分析-3

图不太好看,我们稍微美化一下。

图形的颜色、透明度 以及各坐标轴的标签做了设置。

plt.scatter(score["수학점수"], score["읽기점수"], alpha=0.4, color="green")
plt.xlabel("수학점수")
plt.ylabel("읽기점수")
Python 数据可视化入门 8 - 用 Numpy 做线性回归分析-4

基础图形完成之后,现在来利用 numpy 做线性回归分析

3. Polynomial

调用 numpy 的 polymomial 之后,把要分析的x 值、y 值以及函数的次数作为参数传入即可。

我们把数学成绩和阅读成绩作为一次函数,做线性回归分析。

from numpy.polynomial import Polynomial

f = Polynomial.fit(score["수학점수"], score["읽기점수"], 1)

这样输入之后,polynomial 会返回预测得到的线性函数

因此, f 就成为一个以 x 值为参数的函数

下面这样输入,看一下预测值。

from numpy.polynomial import Polynomial

f = Polynomial.fit(score["수학점수"], score["읽기점수"], 1)
f(40)
Python 数据可视化入门 8 - 用 Numpy 做线性回归分析-5

数学成绩为 40 分的学生,其阅读成绩的预测值约为 40。

现在来画图。

4. 线性回归图

在数据中,学生的数学成绩和阅读成绩并不是从 0 到 100 排好序的数值

因此如果直接把数学成绩作为参数传给 f,随着次数的增高,图形会变得乱七八糟。 

Python 数据可视化入门 8 - 用 Numpy 做线性回归分析-6Python 数据可视化入门 8 - 用 Numpy 做线性回归分析-7

首先要生成从 0 到 100 的数字,然后把它作为线性函数的 x 值来画图。

numpy 的 linspace 接受起点、终点以及中间要填充的数字个数作为参数,并据此生成数值。

import numpy as np

x = np.linspace(0,100,200)
plt.plot(x,f(x))

查看 x 的值,可以看到像左图那样被生成。

用它来画图就会得到下面这样的结果。

Python 数据可视化入门 8 - 用 Numpy 做线性回归分析-8Python 数据可视化入门 8 - 用 Numpy 做线性回归分析-9

5. 完成图形

现在只要把两张图叠加在一起就结束了。

plt.scatter(score["수학점수"], score["읽기점수"], alpha=0.4, color="green")
plt.xlabel("수학점수")
plt.ylabel("읽기점수")
plt.plot(x, f(x),"r--")
Python 数据可视化入门 8 - 用 Numpy 做线性回归分析-10

6. 小结

这篇文章中,我们通过线性回归分析,用图形展示了两个数值之间具有怎样的关系。

下一篇文章打算思考如何利用数据可视化来填写高中学生综合素质档案

관련 글

学校事务自动化——利用 AI 检查学生综合素质评价(生记簿)科目别“细部能力及特长事项”
学校事务自动化——利用 AI 检查学生综合素质评价(生记簿)科目别“细部能力及特长事项”
如果要在学校工作里选出一项最无意义、最辛苦、最无聊的,我会选生记簿检查。在初中,学生综合素质评价(生活记录簿)并不那么重要,但在高中它与升学直接相关,因此极其重要。问题在于,这样的生记簿检查最终找的无非就是简单的错别字、禁止填写用语、拼写等。这篇文章就是从这样的疑问开始的。现在这种简单检查,是不是已...
从零构建中学习 LLM 第7章读书心得与挑战回顾
从零构建中学习 LLM 第7章读书心得与挑战回顾
第7章的内容是让模型遵循指令进行微调的过程。也就是让它针对某个问题给出我们期望的回答。果然,最需要的还是数据。1. 指令微调步骤这里的核心是准备好问答数据集,用作输入-输出对来进行训练。这就叫做提示(prompt)风格。其他部分就像之前的流程一样,对内容进行分词(tokenize)、训练和评估,过程...
从零开始构建中学习 LLM 第 6 章读后感
从零开始构建中学习 LLM 第 6 章读后感
第 6 章是为分类进行微调。作为例子给出的任务是构建垃圾邮件分类器。垃圾邮件分类器需要判断一封邮件是不是垃圾邮件,因此输出结果要是类似 0、1 这样的值。1. 微调的顺序微调的过程和训练模型的过程很相似。准备数据集,加载权重值,然后进行训练和评估。稍微不同的一点是,会有一个把输出层映射到 0(非垃圾...
从零开始构建中学习 LLM 第5章读书后记
从零开始构建中学习 LLM 第5章读书后记
今天是12月14日。其实挑战期已经过去整整两周了,但也不能因此就放弃写后记。像这样留下的 TIL(Today I Learned),以后都会变成自己的血和肉。这次打算比起代码本身,更专注在“意义”上来写一写。1. 模型的损失计算这一部分讲的是,在构建好 GPT 模型之后,用什么方式来计算损失。GPT...
从零开始动手实现 LLM 第4章读书心得
从零开始动手实现 LLM 第4章读书心得
今天是11月26日,如果每天读一章并看完的话,这次挑战就算成功。在老大和老二的各种干扰下,不知道能不能做到。1. Dummy Transformer在实现 GPT 模型的过程中,看到是从 PyTorch 里拿来一个 Transformer 的 dummy 模块用的。一查才发现,在 PyTorch 的...
通过从头构建学习的LLM第3章读后感
通过从头构建学习的LLM第3章读后感
我在MacBook上泼了一大杯水后,崩溃了,浪费了大约3-4天。现在回想起来,反正MacBook已经坏了,应该想着送修,干点别的事情。无论如何,虽然有点晚了,但我觉得必须坚持到底,所以留下了第3章的读后感。1. 注意力机制第3章...

댓글을 불러오는 중...