线性回归模型中的常见图表

近期课堂上学习了线性回归模型,同时也读到了很好的一篇文章,尝试对于里面的部分内容进行复现说明,简单总结,附上链接:https://mp.weixin.qq.com/s/qAzbL3YY30X7W9NkL9hb0A

线性趋势线图

alt text

线性趋势线图用于可视化数据集中自变量和因变量之间的线性关系,以及线性回归模型拟合的效果

  • 反映线性关系
  • 反映拟合效果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from sklearn.datasets import load_diabetes
# 导入数据集
diabetes = load_diabetes()
X = diabetes.data[:, 2] # 设第三个变量为X
y = diabetes.target

# 利用公式实现线性回归算法拟合
def linear_regression(X,y):
X_mean = sum(X)/len(X)
y_mean = sum(y)/len(y)

# 求解斜率和截距
numerator = sum((X-X_mean) * (y-y_mean))
denominator = sum((X-X_mean)**2)
slope = numerator / denominator # 斜率
intercept = y_mean - slope * X_mean # 截距

return slope, intercept

slope,intercept = linear_regression(X,y)

import seaborn as sns
import matplotlib.pyplot as plt

sns.regplot(x=X,y=y,color='red',scatter_kws={'color':'blue','s':10}) # 设置 ci = None,不显示置信区间
# scatter_kws和line_kws分别用于设置数据点和趋势线的颜色等属性
plt.xlabel('X')
plt.ylabel('y')
plt.title('Linear trend line plot')
plt.show()

残差图

alt text

残差图:残差是预测值和真实值之间的差值,残差图是残差和自变量之间的散点图,残差图可以反映线性回归模型的拟合效果,如果残差图没有集中,说明模型可能存在偏差,需要调整模型参数。

  • 在理想情况下,残差应该随机地分布在横轴上,没有明显的模式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from sklearn.datasets import load_diabetes
# 导入数据集
diabetes = load_diabetes()
X = diabetes.data[:, 2] # 设第三个变量为X
y = diabetes.target

# 利用公式实现线性回归算法拟合
def linear_regression(X,y):
X_mean = sum(X)/len(X)
y_mean = sum(y)/len(y)

# 求解斜率和截距
numerator = sum((X-X_mean) * (y-y_mean))
denominator = sum((X-X_mean)**2)
slope = numerator / denominator # 斜率
intercept = y_mean - slope * X_mean # 截距

return slope, intercept

# 获取回归直线的斜率和截距
slope,intercept = linear_regression(X,y)

# 计算预测值
y_pred = slope * X + intercept

# 计算残差
residuals = y - y_pred

import matplotlib.pyplot as plt

# 绘制残差图
plt.scatter(X, residuals, color='blue')
plt.axhline(y=0, color='red', linestyle='--') # 添加水平参考线
plt.xlabel('X label')
plt.ylabel('Residuals')
plt.title('Residual plot')
plt.show()

正态概率图

alt text

正态概率图(Normal probability plot)是一种用于检验数据是否符合正态分布的图表

  • 这里检验模型的残差是否符合正态分布
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 部分代码同上...

import scipy.stats as stats
import matplotlib.pyplot as plt

# 计算残差
residuals = y - y_pred

# 绘制正态概率图
stats.probplot(residuals, dist="norm", plot=plt)
plt.xlabel('Theoretical quantiles')
plt.ylabel('Ordered residuals')
plt.title('Normal probability plot')
plt.show()

学习曲线

alt text

学习曲线(Learning curve)是一种展示模型在训练集和验证集上表现随训练样本数量变化的图表。它通常将训练集和验证集的误差(如均方误差)或准确率作为纵轴,训练样本数量作为横轴,可以帮助我们分析模型的拟合情况泛化能力

在线性回归中,学习曲线可以帮助我们判断模型是否过拟合或欠拟合。 当模型在训练集上表现良好但在验证集上表现较差时,可能存在过拟合;而当模型在两个集合上表现都较差时,可能存在欠拟合。通过观察学习曲线,可以调整模型的复杂度或者增加训练样本数量来改善模型的表现。

  • 学习曲线可以帮助我们分析模型在不同训练样本数量下的表现,进而判断模型是否过拟合或欠拟合
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from sklearn.datasets import load_diabetes
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import learning_curve
import matplotlib.pyplot as plt
import numpy as np

# 加载数据
diabetes = load_diabetes()
X = diabetes.data[:,2] # 选择一个特征
y = diabetes.target

# 创建线性回归模型并训练
model = LinearRegression()

# 计算学习曲线
train_sizes,train_scores,valid_scores = learning_curve(model,X[:,np.newaxis],y,train_sizes=[50,100,200,300],cv=5) # 训练样本数量为50、100、200、300

# 计算训练集和验证集的平均误差
train_mean=np.mean(train_scores,axis=1)
train_std=np.std(train_scores,axis=1)
valid_mean=np.mean(valid_scores,axis=1)
valid_std=np.std(valid_scores,axis=1)

# 绘制学习曲线
plt.figure()
plt.title("Learning Curve")
plt.xlabel("Training examples")
plt.ylabel("Score")
plt.grid() # 显示网格
plt.fill_between(train_sizes,train_mean-train_std,train_mean+train_std,alpha=0.1,color="r") # 填充训练集的误差
plt.fill_between(train_sizes,valid_mean-valid_std,valid_mean+valid_std,alpha=0.1,color="g") # 填充验证集的误差
plt.plot(train_sizes,train_mean,"o-",color="r",label="Training score") # 绘制训练集的得分
plt.plot(train_sizes,valid_mean,"o-",color="g",label="Cross-validation score") # 绘制验证集的得分(使用交叉验证)
plt.legend(loc="best") # 显示图例
plt.show() # 显示图

还有一些感觉用处不大就不详细学习了,日后有需要再看


线性回归模型中的常见图表
http://jrhu0048.github.io/2024/09/11/ji-qi-xue-xi/xian-xing-hui-gui-mo-xing-ke-shi-hua-zong-jie/
作者
JR.HU
发布于
2024年9月11日
更新于
2024年10月14日
许可协议