如何将Kaggle数据集导入后生成子图形式的独立柱状图?
UCI心脏病数据集可视化与Keras分类模型训练解决方案
一、统计子图复现方案
你使用plt.imshow报错是因为该函数仅用于渲染图像像素矩阵,不能直接绘制结构化数据集的统计图表,删除相关代码后使用如下seaborn+matplotlib方案即可复现多子图布局:
# 导入依赖库 import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 设置绘图风格 sns.set_style("whitegrid") # 假设你清洗完成的数据集变量名为df # 生成4行2列的子图画布,可根据你要复现的图表数量调整行列数 fig, axes = plt.subplots(nrows=4, ncols=2, figsize=(16, 22)) # 按位置绘制对应统计图表,以下为常见的数据集配套图表示例,可按需调整 # 第1行第1列:患病情况分布 sns.countplot(x='target', data=df, ax=axes[0][0]) axes[0][0].set_title('心脏病患病分布') # 第1行第2列:年龄分布 sns.histplot(x='age', data=df, kde=True, color='#2ecc71', ax=axes[0][1]) axes[0][1].set_title('受试者年龄分布') # 第2行第1列:不同胸痛类型的患病对比 sns.countplot(x='cp', hue='target', data=df, ax=axes[1][0]) axes[1][0].set_title('胸痛类型与患病关联') # 第2行第2列:静息血压箱线图 sns.boxplot(x='target', y='trestbps', data=df, palette='Set2', ax=axes[1][1]) axes[1][1].set_title('静息血压与患病关联') # 剩余子图可参照上述逻辑,替换sns绘图函数即可完成其他图表绘制 # 自动调整子图间距避免重叠 plt.tight_layout() plt.show()
二、Keras模型训练问题排查
绘图报错不会直接影响模型训练,优先检查以下几个核心步骤是否缺失:
- 特征与标签拆分、标准化:神经网络训练必须对数值特征做标准化,避免梯度爆炸
from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler # 拆分特征和标签 X = df.drop('target', axis=1) y = df['target'] # 特征标准化 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 拆分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
- 模型结构与参数匹配二分类任务
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout # 搭建二分类模型 model = Sequential([ Dense(32, activation='relu', input_shape=(X_train.shape[1],)), Dropout(0.2), Dense(16, activation='relu'), Dropout(0.1), Dense(1, activation='sigmoid') ]) # 编译模型,二分类任务固定用binary_crossentropy损失函数 model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # 启动训练 history = model.fit(X_train, y_train, epochs=30, batch_size=8, validation_split=0.1)
- 若出现维度报错,优先检查特征输入维度是否与模型第一层
input_shape匹配,标签y是否为一维数组格式。
内容的提问来源于stack exchange,提问作者Keval Makwana
相关产品推荐
相关产品推荐

