def get_confusion_matrix(model, test_images, test_labels): """ 用测试集评估模型,得到混淆矩阵 Args: model (NearestNeighbor): 训练好的模型 test_images (list[np.ndarray]): 测试集图片 test_labels (list[int]): 测试集标签 Returns: np.array: 混淆矩阵 """ pred_labels = [] for i, image in enumerate(test_images): pred_labels.append(predict(model, image)) if (i + 1) % 10 == 0: print(i) return ConfMat(test_labels, pred_labels)
from data import Data from naivebayes import NaiveBayes from maxapost import MaxAPost from confmat import ConfMat filename = "datasets/weatherNominal.td" ## filename = "datasets/titanic.td" ## filename = "datasets/cmc.td" ## filename = "datasets/german.td" ## filename = "datasets/markbasksex.td" d = Data(filename) d.report() ## pr = NaiveBayes(d) pr = MaxAPost(d) pr.train() ## pr.show() cm = ConfMat(pr.clsscnts) for (v, c_true) in d.test_set: c_pred = pr.predict(v)[0] # print(v, c_pred, "( true class:", c_true, ")") cm.mat[c_pred, c_true] += 1 # pr.show() cm.report()
from naivebayes import NaiveBayes from maxapost import MaxAPost from data import Data #filename = "ds/weatherNominalTr.txt" filename = "ds/titanicTr.txt" d = Data(filename, 75) prmap = MaxAPost(d) prmap.train() prnb = NaiveBayes(d) prnb.train() cmmap = ConfMat(prmap.clsscnts) cmnb = ConfMat(prnb.clsscnts) comparing = set([]) for (v, c_true) in d.test_set: c_pred_map = tuple(prmap.predict(v)) c_pred_nb = tuple(prnb.predict(v)) if len(c_pred_map) and len(c_pred_nb): warn = (c_pred_map[0] != c_pred_nb[0]) cmmap.mat[c_pred_map[0], c_true] += 1 cmnb.mat[c_pred_nb[0], c_true] += 1 else: warn = True if warn: comparing.add((v, c_true, c_pred_map, c_pred_nb)) print