机器学习:为什么我的混淆矩阵是这样的?当我尝试了所有测试并且得到了合理的分数时

问题描述 投票:0回答:1

我正在使用 scklearn 的随机森林分类,除了混淆矩阵之外,我在所有方面都得到了不错的结果,这里是代码和结果

The label distribution for the training and testing

The size of the train set

The model

Scores for the training model

Here is the issue

这不是我所期望的,特别是因为训练量仅为我应有的训练量的 1/3,我在训练数据集中有 677k,但在混淆矩阵中它只执行所有标签 0。

python machine-learning scikit-learn random-forest confusion-matrix
1个回答
0
投票

问题似乎出在 matplotlib/seaborn 上。 (我无法重现它;也许您需要为我们提供一个可重现的示例,其中包含您编写的确切代码和数据集。)

您可以将混淆矩阵显示/打印为数据帧,而不是使用绘图。

import pandas as pd
from sklearn.metrics import confusion_matrix

def get_confusion_matrix_df(classifier, X, y):
    """Return the confusion matrix as a DataFrame."""
    labels = classifier.classes_
    columns_labels = pd.MultiIndex.from_product([["Predicted"], labels])
    index_labels = pd.MultiIndex.from_product([["Actual"], labels])
    prediction = classifier.predict(X)
    matrix = confusion_matrix(y, prediction, labels=labels)
    return pd.DataFrame(matrix, columns=columns_labels, index=index_labels)
get_confusion_matrix_df(rf_cv, X_train, y_train)

示例:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split 
from sklearn.ensemble import RandomForestClassifier

X, y = load_iris(return_X_y=True, as_frame=True)

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)

get_confusion_matrix_df(model, X_test, y_test)

结果:

© www.soinside.com 2019 - 2024. All rights reserved.