【发布时间】:2018-08-22 08:02:45
【问题描述】:
我有一个关于混淆矩阵的问题。我使用交叉验证将 148 个实例拆分为两个数组 - 测试和训练。比我这样称呼:
def GenerateResult:
clf = OneVsRestClassifier(GaussianNB())
clf.fit(x_train, y_train)
predictions = clf.predict(x_test)
accuracy = accuracy_score(y_test, predictions)
confusion_mtrx = confusion_matrix(y_test, predictions)
这是 KFold 的循环 -> 我从上调用函数:
for train_idx, test_idx in pf.split(x_array):
x_train, x_test = x_array[train_idx], x_array[test_idx]
y_train, y_test = y_array[train_idx], y_array[test_idx]
acc, confusion= GenerateResult(x_train, x_test, y_train, y_test)
results['First'].append(acc)
confusion_dict['First'].append(confusion)
然后我对结果求和并计算平均值
np_gausian = np.asarray(results['gaussian'])
print("[First] Mean: {}".format(np.mean(np_gausian)))
print(confusion_dict['gaussian'])
我有一个问题。在我的 148 个实例中,我有 4 个输出类,当我将该循环用于 KFold 时,我得到了两个不同的混淆矩阵。 第一个混淆矩阵 3x3:
[[36 1 1]
[15 17 1]
[ 0 0 3]]
第二个 4x4 :
[[ 0 2 0 0]
[ 0 41 2 0]
[ 0 12 16 0]
[ 0 0 1 0]]
我认为我有问题,因为在我的 148 实例中我有
1 - 2 类
2 类 - 81 个
3 级 - 61 次
4 - 4 类
所有类 - 148
我该怎么办?我怎样才能总结这个混淆矩阵?如果我更改 KFold 中的拆分数量怎么办?我尝试使用 Pandas,但我不知道该怎么做。请帮忙,我用的是sk-learn
【问题讨论】:
-
我认为您的问题源于这样一个事实,即第 1 类只有两个观察结果,当您拆分测试时,它们都属于第二类。尝试使用 StratifiedKFold 而不是 KFold,如果这不能帮助手动将其中一个观察结果从第 1 类移动到另一个折叠。
标签: python machine-learning scikit-learn classification confusion-matrix