ANN模型生成无意义混淆矩阵的问题排查求助
问题原因分析
- 数据集拆分逻辑冲突+类别分布抽样异常
你先后两次调用了train_test_split函数,第一次拆分参数为test_size=0.3, random_state=0,第二次建模时用的是test_size=0.2, random_state=1,两次拆分逻辑不一致。结合你给出的训练集混淆矩阵看,训练集大概率只抽到了类别0的样本,模型学到的规则是永远输出0,如果测试集刚好全部是类别1的样本,就会出现训练集准确率100%、测试集准确率0的极端情况。你可以先输出y_train.value_counts()和y_test.value_counts()验证两边的类别分布。 - 自定义评估函数参数顺序错误
你使用的classificationSummary是非sklearn官方的自定义函数,如果该函数要求的入参顺序是(预测值, 真实值),而你传入的顺序是(真实值, 预测值),就会出现预测结果完全倒置的统计错误。你可以用sklearn官方指标函数验证结果:from sklearn.metrics import accuracy_score, confusion_matrix # 验证训练集结果 print("训练集准确率:", accuracy_score(y_train, clf.predict(X_train))) print("训练集混淆矩阵:\n", confusion_matrix(y_train, clf.predict(X_train))) # 验证测试集结果 print("测试集准确率:", accuracy_score(y_test, clf.predict(X_test))) print("测试集混淆矩阵:\n", confusion_matrix(y_test, clf.predict(X_test))) - 输入特征未做标准化处理
MLP模型对输入特征的尺度非常敏感,如果你直接把原始未归一化/标准化的特征输入模型,lbfgs优化器很容易陷入局部最优解,输出极端的预测结果。建议在拆分数据集后对特征做标准化处理:from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) - 超参数设置不当
你设置的max_iter=200可能不足以让lbfgs优化器收敛,你可以打印clf.n_iter_查看实际迭代次数,若等于200说明未收敛,需要调大迭代次数。另外hidden_layer_sizes=(100)的写法不规范,单层隐藏层应写为(100,),旧版本sklearn可能会对整数输入报错。
内容的提问来源于stack exchange,提问作者TensorflowTryhard
相关产品推荐
相关产品推荐

