线性回归 10 种图表 下

 6,方差-偏差权衡图

方差-偏差权衡图(Bias-variance tradeoff plot)是一种用于可视化模型的偏差和方差之间的权衡关系的图表。在机器学习中,一个模型的总误差可以分解为三部分:偏差(Bias)、方差(Variance)和不可避免的误差。偏差衡量了模型预测的平均准确度和真实数值之间的差距,方差衡量了模型在不同训练数据集上的变化程度。偏差-方差权衡是一个重要的概念,它告诉我们在训练模型时要权衡这两种误差,并避免过拟合(高方差、低偏差)或欠拟合(低方差、高偏差)。

在线性回归中,方差-偏差权衡图可以帮助我们选择合适的模型复杂度。当模型过于简单时(高偏差),可能会出现欠拟合;当模型过于复杂时(高方差),可能会出现过拟合。通过观察方差-偏差权衡图,我们可以找到一个适当的模型复杂度,以获得最佳的预测性能。

from sklearn.datasets import load_diabetes
from sklearn.model_selection import validation_curve
from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt

# 加载数据集
diabetes = load_diabetes()
X = diabetes.data[:, 2]  # 使用第三个特征作为自变量
y = diabetes.target

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

# 计算方差-偏差权衡图
param_range = np.arange(1, 10)
train_scores, valid_scores = validation_curve(model, X[:, np.newaxis], y, param_name="fit_intercept", param_range=param_range, cv=5, scoring="neg_mean_squared_error")

# 计算训练集和验证集的平均误差
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(figsize=(10, 6))
plt.fill_between(param_range, train_mean - train_std, train_mean + train_std, alpha=0.1, color="r")
plt.fill_between(param_range, valid_mean - valid_std, valid_mean + valid_std, alpha=0.1, color="g")
plt.plot(param_range, train_mean, 'o-', color="r", label="Training score")
plt.plot(param_range, valid_mean, 'o-', color="g", label="Cross-validation score")
plt.xlabel("Model complexity")
plt.ylabel("Negative Mean Squared Error")
plt.title("Bias-variance tradeoff plot")
plt.legend(loc="best")
plt.show()

为什么使用方差-偏差权衡图?

因为方差-偏差权衡图可以帮助我们选择合适的模型复杂度,避免模型过拟合或欠拟合。通过观察方差-偏差权衡图,我们可以找到一个平衡点,以获得最佳的预测性能。这种图表有助于我们优化模型并提高预测的准确性。

7,残差对预测值图

残差对预测值图(Residuals vs Fitted plot)是一种用于检验线性回归模型是否适合的图表。它将模型预测值(拟合值)绘制在横轴上,残差(预测值与实际值之间的差异)绘制在纵轴上,用于观察残差是否随着预测值的增大而呈现出某种模式。

在线性回归中,残差对预测值图可以帮助我们检验模型的假设是否成立。理想情况下,残差应该随机地分布在横轴上,没有明显的模式。如果残差对预测值图显示出某种模式(如残差随着预测值的增大而增大或减小),则可能表示模型存在问题,需要进一步改进。

from sklearn.datasets import load_diabetes
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

# 加载数据集
diabetes = load_diabetes()
X = diabetes.data[:, 2]  # 使用第三个特征作为自变量
y = diabetes.target

# 创建线性回归模型
model = LinearRegression()
model.fit(X.reshape(-1, 1), y)

# 计算预测值
y_pred = model.predict(X.reshape(-1, 1))

# 计算残差
residuals = y - y_pred

# 绘制残差对预测值图
plt.figure(figsize=(8, 6))
plt.scatter(y_pred, residuals, color='blue')
plt.axhline(y=0, color='red', linestyle='--')
plt.xlabel('Fitted values')
plt.ylabel('Residuals')
plt.title('Residuals vs Fitted plot')
plt.show()

为什么使用残差对预测值图?

因为残差对预测值图可以帮助我们检验模型的假设是否成立。如果残差随着预测值的增大而呈现出某种模式,可能表示模型存在问题,需要进一步改进。这种图表有助于我们验证模型的有效性,并且可以用来预测新的数据点。

8,部分回归图

部分回归图(Partial Regression Plot)是一种用于检验一个自变量对因变量的影响,同时控制其他自变量影响的图表。它通过绘制一个自变量与因变量之间的关系图,同时控制其他自变量的影响,来帮助我们理解这个自变量独立于其他变量时对因变量的影响程度。

在线性回归中,部分回归图可以帮助我们识别单个自变量对因变量的影响,排除了其他自变量的影响。这对于理解每个自变量的独立作用非常有帮助,并可以帮助我们判断模型是否正确地捕捉到了变量之间的关系。

from sklearn.datasets import load_diabetes
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures
import matplotlib.pyplot as plt
import numpy as np

# 加载数据集
diabetes = load_diabetes()
X = diabetes.data[:, 2]  # 使用第三个特征作为自变量
y = diabetes.target

# 创建多项式特征
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X.reshape(-1, 1))

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_poly, y, test_size=0.2, random_state=42)

# 创建线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)

# 绘制部分回归图
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 1], y, color='blue', label='Actual data')
plt.scatter(X[:, 1], model.predict(X_poly), color='red', label='Predicted data')
plt.xlabel('Partial Regression')
plt.ylabel('Target')
plt.title('Partial Regression Plot')
plt.legend()
plt.show()

为什么使用部分回归图?

因为部分回归图可以帮助我们理解单个自变量对因变量的影响,同时控制其他自变量的影响。这种图表有助于我们深入分析每个自变量的独立作用,并且可以帮助我们验证模型是否正确地捕捉到了变量之间的关系。

9,杠杆图

杠杆图(Leverage plot)是一种用于检验每个数据点对线性回归模型的影响程度的图表。它通过绘制每个数据点的杠杆值(leverage)来帮助我们识别在模型拟合中具有较大影响力的数据点。杠杆值反映了每个数据点对模型参数估计的影响程度,具有高杠杆值的数据点可能会对模型的拟合产生较大影响。

在线性回归中,杠杆图可以帮助我们识别可能具有异常影响力的数据点,这些数据点可能导致模型的不稳定性或偏差。 通过观察杠杆图,我们可以检查这些数据点,并决定是否需要对它们进行处理(如排除或转换)以改善模型的性能。

from sklearn.datasets import load_diabetes
from sklearn.linear_model import LinearRegression
import statsmodels.api as sm
from statsmodels.graphics.regressionplots import plot_leverage_resid2
import matplotlib.pyplot as plt

# 加载数据集
diabetes = load_diabetes()
X = diabetes.data[:, 2]  # 使用第三个特征作为自变量
y = diabetes.target

# 创建线性回归模型
X = sm.add_constant(X)  # 添加截距项
model = sm.OLS(y, X).fit()

# 绘制杠杆图
plot_leverage_resid2(model)
plt.xlabel('Leverage')
plt.ylabel('Standardized Residuals Squared')
plt.title('Leverage Plot')
plt.show()

为什么使用杠杆图?

因为杠杆图可以帮助我们识别对模型具有较大影响力的数据点。通过观察杠杆图,我们可以检查这些数据点,并决定是否需要对它们进行处理以改善模型的性能。这种图表有助于我们识别潜在的异常数据点,并优化模型的拟合效果。

10,Cook's 距离图

Cook's 距离图(Cook's distance plot)是一种用于检验线性回归模型中每个数据点对模型参数估计的影响程度的图表。它通过计算每个数据点对模型参数的影响程度,来帮助我们识别可能具有较大影响力的数据点。

在线性回归中,Cook's 距离可以用来衡量删除某个数据点后模型参数的变化程度,从而评估该数据点对整个模型的影响程度。通常情况下,Cook's 距离大于1的数据点可能具有较大影响力,需要进行进一步分析。

from sklearn.datasets import load_diabetes
from statsmodels.regression.linear_model import OLS
import statsmodels.api as sm
import matplotlib.pyplot as plt

# 加载数据集
diabetes = load_diabetes()
X = diabetes.data[:, 2]  # 使用第三个特征作为自变量
y = diabetes.target

# 添加截距项
X = sm.add_constant(X)

# 拟合线性回归模型
model = OLS(y, X).fit()

# 计算 Cook's 距离
influence = model.get_influence()
cook_distance = influence.cooks_distance[0]

# 绘制 Cook's 距离图
plt.figure(figsize=(8, 6))
plt.stem(cook_distance, markerfmt=",")
plt.xlabel('Data points')
plt.ylabel("Cook's distance")
plt.title("Cook's Distance Plot")
plt.show()

为什么使用Cook's 距离图?

因为Cook's 距离图可以帮助我们识别可能对模型具有较大影响力的数据点。通过观察Cook's 距离,我们可以找出这些数据点,并进一步分析它们对模型的影响,以优化模型的拟合效果。这种图表有助于我们识别潜在的异常数据点,并改进模型的性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值