我正在绘制一个混淆矩阵,显示总共26个类别(26个字母)的预测值与实际值。
我的代码如下:
y_pred = np.argmax(predictions, axis=1) # Transform predictions into 1-D array with label number
pd.DataFrame(confusion_matrix(y_test, y_pred),
columns=["pA", "pB", "pC", "pD", "pE", "pF", "pG", "pH", "pI", "pJ", "pK", "pL", "pM", "pN", "pO", "pP", "pQ", "pR", "pS", "pT", "pU", "pV", "pW", "pX", "pY", "pZ"],
index=["aA", "aB", "aC", "aD", "aE", "aF", "aG", "aH", "aI", "aJ", "aK", "aL", "aM", "aN", "aO", "aP", "aQ", "aR", "aS", "aT", "aU", "aV", "aW", "aX", "aY", "aZ"])
我的输出看起来像这样:
问题是,如何显示整个行/列(不带...),或者使其在视觉上更悦目且更易于查看,如何将其更改为彩色版本,即使可以,也可以不显示数字。
感谢您抽出宝贵的时间来帮助我,欢呼!
您可以将数据框视为图像:
import matplotlib.pyplot as plt
df = pd.DataFrame(confusion_matrix(y_test, y_pred),
columns=["pA", "pB", "pC", "pD", "pE", "pF", "pG", "pH", "pI", "pJ", "pK", "pL", "pM", "pN", "pO", "pP", "pQ", "pR", "pS", "pT", "pU", "pV", "pW", "pX", "pY", "pZ"],
index=["aA", "aB", "aC", "aD", "aE", "aF", "aG", "aH", "aI", "aJ", "aK", "aL", "aM", "aN", "aO", "aP", "aQ", "aR", "aS", "aT", "aU", "aV", "aW", "aX", "aY", "aZ"])
plt.imshow(df[:])
您可以使用plt.annotate添加值:
cols = ["pA", "pB", "pC", "pD", "pE", "pF", "pG", "pH", "pI", "pJ", "pK", "pL", "pM", "pN", "pO", "pP", "pQ", "pR", "pS", "pT", "pU", "pV", "pW", "pX", "pY", "pZ"]
ix=["aA", "aB", "aC", "aD", "aE", "aF", "aG", "aH", "aI", "aJ", "aK", "aL", "aM", "aN", "aO", "aP", "aQ", "aR", "aS", "aT", "aU", "aV", "aW", "aX", "aY", "aZ"]
data = np.random.randint(0,10,(len(cols), len(ix)))
df = pd.DataFrame(data=data,
columns=cols,
index=ix)
plt.figure(figsize=(10,10))
plt.imshow(df[:])
for r, (i, row) in enumerate(df.iterrows()):
for c, entry in enumerate(row):
plt.annotate(entry, xy=(c-0.3,r+.1), fontsize=8) # using annotate with offset for xy, to allow better positioning