在多元线性回归中,了解特征变量之间的相关性非常重要。通过计算特征之间的相关性,我们可以分析哪些特征与目标变量具有较强的线性关系,以及特征之间是否存在多重共线性问题。我们使用 皮尔逊相关系数(Pearson Correlation Coefficient)来衡量变量之间的相关性。
能源效能数据集的变量相关性分析
1.加载数据并标准化处理
首先,我们导入 pandas 来加载数据集,并对数据进行标准化处理
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib
# 解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
# 加载能源效能数据集
enbdf = pd.read_excel("ENB.xlsx") # 请确保 ENB.xlsx 文件已准备好
# 对数据进行标准化处理
enbdf_n = (enbdf - enbdf.mean()) / enbdf.std() # 标准化
2.计算相关性矩阵
使用 pandas 提供的 .corr() 方法来计算变量之间的相关系数矩阵。默认情况下,它会计算 Pearson 相关系数。
# 计算相关性矩阵
datacor = enbdf_n.corr() # 默认计算 Pearson 相关系数
print(datacor)
3.绘制热力图
我们使用 seaborn 库中的 heatmap 函数来可视化相关性矩阵。热力图直观地显示了变量之间的相关性,颜色越深表示相关性越强。
# 绘制相关性热力图
plt.figure(figsize=(8, 8)) # 设置图形大小
ax = sns.heatmap(datacor, square=True, annot=True, fmt=".2f",
linewidths=.5, cmap="YlGnBu") # annot 参数用于显示具体数值
ax.set_title("变量相关性热力图")
plt.show()
完整代码
以下是之前的代码和热力图的完整代码:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
# 解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
# 读取能源效能数据
enbdf = pd.read_excel("ENB.xlsx") # 请确保 ENB.xlsx 文件已准备好
# 对每个变量的取值进行标准化
enbdf_n = (enbdf - enbdf.mean()) / enbdf.std()
# 使用相关系数热力图可视化变量之间的相关性
datacor = enbdf_n.corr() # 计算 Pearson 相关系数
# 绘制热力图
plt.figure(figsize=(8, 8)) # 设置图形大小
ax = sns.heatmap(datacor, square=True, annot=True, fmt=".2f",
linewidths=.5, cmap="YlGnBu")
ax.set_title("数据变量相关性热力图")
plt.show()
# 线性回归模型部分
X = np.array(enbdf_n)[:, :-1] # 样本特征
y = np.array(enbdf_n)[:, -1] # 样本标签
# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
# 创建线性回归模型并训练
lin_reg = LinearRegression()
lin_reg.fit(X_train, y_train) # 使用训练集拟合模型
# 输出模型的 R² 分数
print(f"线性回归模型的 R² 分数为:{lin_reg.score(X_test, y_test)}")
热力图的解释
- 颜色深浅:颜色越深,变量之间的相关性越强。正相关用蓝色表示,负相关用绿色表示。
- 相关系数值:相关系数范围从 -1 到 1,值越接近 1 或 -1,相关性越强。0 表示没有线性相关性。
4.结论
通过使用相关性矩阵和热力图,我们可以直观地理解变量之间的相互关系。这不仅可以帮助我们在进行线性回归时选择合适的特征,还能揭示可能存在的多重共线性问题,从而进一步优化模型的构建。