特征相关性分析

输入特征相关性分析

在训练神经网络之前,可以使用相关性矩阵来分析输入特征之间的相关性,以识别可能的冗余特征或强相关特征对。
可以使用热图来可视化特征间的相关性矩阵。

要使用Python来创建一个热图来可视化特征间的相关性矩阵,你可以使用pandas库来计算相关性矩阵,以及seaborn和matplotlib库来绘制热图。以下是实现这一功能的步骤和示例代码:

  1. 导入所需的库:
    首先,需要导入pandas, numpy, matplotlib, 和seaborn库。

  2. 准备数据:
    假设已经有了一个包含17个特征的DataFrame。

  3. 计算相关性矩阵:
    使用pandascorr() 方法计算DataFrame中数值列的相关性矩阵。

  4. 绘制热图:
    使用seaborn的heatmap()函数来绘制热图,并通过matplotlib来显示。

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
class Data_Receive(object):
    def __init__(self, number):
        self.number = number
        self.path = f'data/f15_c/data{number}.csv'
        self.data = None
    def load_data(self):  # 加载CSV文件数据
        try:
            self.data = pd.read_csv(self.path)
        except FileNotFoundError:
            print(f"文件未找到: {self.path}")
        except pd.errors.EmptyDataError:
            print("CSV文件为空")
        except Exception as e:
            print(f"读取CSV文件时发生错误: {e}")
    def convert_to_vectors(self):  # 将CSV数据转换为向量
        if self.data is None:
            self.load_data()
        self.data = self.data.dropna(how='all')  # 移除包含非数据列的行(例如标题行)
        # 将每一列转换为向量,并存储在字典中
        vectors = {column: np.array(self.data[column]) for column in self.data.columns}
        return vectors
if __name__ == '__main__':
    number = 3  # 获取数据
    data3 = Data_Receive(number)
    data3.load_data()
    vectors = data3.convert_to_vectors()
    time = vectors[list(vectors.keys())[0]]
    alpha = vectors[list(vectors.keys())[1]]
    beta = vectors[list(vectors.keys())[2]]
    u, v, w = vectors[list(vectors.keys())[3]], vectors[list(vectors.keys())[4]], vectors[list(vectors.keys())[5]]
    p, q, r = vectors[list(vectors.keys())[9]], vectors[list(vectors.keys())[10]], vectors[list(vectors.keys())[11]]
    phi, theta, psi = vectors[list(vectors.keys())[12]], vectors[list(vectors.keys())[13]], vectors[
        list(vectors.keys())[14]]
    mach, h = vectors[list(vectors.keys())[15]], vectors[list(vectors.keys())[17]]
    delta_a, delta_e, delta_r = vectors[list(vectors.keys())[19]], vectors[list(vectors.keys())[20]], vectors[
        list(vectors.keys())[21]]
    throttle, thrust = vectors[list(vectors.keys())[22]], vectors[list(vectors.keys())[23]]
    input = np.array([u, v, w, p, q, r, alpha, beta, mach, h, delta_a, delta_e, delta_r, throttle])
    input = input[:, :238]  # 所有行,0-238列
    # label = np.array([u[1:], v[1:], w[1:]])
    label = np.array([u[1:], v[1:], w[1:]])  # 三行,1-239列
    df = np.vstack((input, label))
    df = np.transpose(df)
    df = pd.DataFrame(df)
    # 假设你想要修改的列名如下:
    new_column_names = ['u', 'v', 'w', 'p', 'q', 'r', 'alpha', 'beta', 'mach',
                        'h', 'delta_a', 'delta_e', 'delta_r', 'throttle', 'u_new', 'v_new', 'w_new']
    # 然后你可以直接赋值给df.columns
    df.columns = new_column_names
    # 计算相关性矩阵
    corr = df.corr()
    # 使用热图来可视化相关性矩阵
    plt.figure(figsize=(10, 6))  # 可以根据需要调整图形大小
    sns.heatmap(corr, annot=True, fmt=".2f", cmap='coolwarm',
                cbar_kws={"shrink": .75},  # 调整颜色条大小
                annot_kws={"size": 10})  # 设置注释的字体大小
    # 优化显示效果
    plt.xticks(rotation=45, ha='right')  # 旋转x轴标签并右对齐
    plt.yticks(rotation=0)  # y轴标签不旋转
    print(corr)
    # 显示图形
    plt.tight_layout()  # 自动调整子图参数,使之填充整个图像区域
    plt.show()

结果图:

在这里插入图片描述
打印结果:

                 u         v         w  ...     u_new     v_new     w_new
u         1.000000  0.124031 -0.178265  ...  0.997988  0.104551 -0.203615
v         0.124031  1.000000 -0.132002  ...  0.124102  0.676460 -0.101262
w        -0.178265 -0.132002  1.000000  ... -0.180112 -0.163323  0.729753
p        -0.048228  0.068287 -0.076105  ... -0.045377  0.331108 -0.013352
q         0.070641 -0.113819  0.641044  ...  0.075506 -0.262654  0.672820
r         0.025647 -0.294523  0.107513  ...  0.026079 -0.525605  0.158322
alpha    -0.400308 -0.105749  0.800124  ... -0.408540 -0.092871  0.609569
beta     -0.193609  0.319100 -0.076191  ... -0.193332  0.177604 -0.077615
mach      0.999510  0.117577 -0.189529  ...  0.997163  0.100606 -0.209774
h         0.584653 -0.070951 -0.214343  ...  0.570712 -0.086364 -0.202844
delta_a   0.057654  0.529311 -0.121210  ...  0.066466  0.674740 -0.038060
delta_e   0.004178  0.007671 -0.385452  ...  0.005155  0.074071 -0.528328
delta_r  -0.190813 -0.692327  0.042406  ... -0.188444 -0.685034  0.035024
throttle  0.409795  0.101111 -0.299239  ...  0.434177  0.088593 -0.304829
u_new     0.997988  0.124102 -0.180112  ...  1.000000  0.106170 -0.186050
v_new     0.104551  0.676460 -0.163323  ...  0.106170  1.000000 -0.120402
w_new    -0.203615 -0.101262  0.729753  ... -0.186050 -0.120402  1.000000

[17 rows x 17 columns]
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值