针对特定类型的错误分类对 iris 数据集应用错误分析

数据挖掘 机器学习 Python 分类 scikit-学习 多类分类
2022-03-05 13:26:37

假设我有众所周知的iris数据集,并且我想对错误分类的示例执行错误分析,更具体地说是针对特定类。

我并不真正关心微调或选择另一个模型,拆分时的分层等,这将提高每个类的精度和召回率,而不是如何手动关注错误分类示例的特征并理解错误分类的逻辑(如果您可以请避免过于技术性,例如使用包作为limeshap)。

下面我提供一个 MWE 以使其更加清晰。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

from sklearn import datasets

from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, confusion_matrix

from sklearn.linear_model import SGDClassifier

获取数据并训练模型。

iris = datasets.load_iris()

X = iris.data
y = iris.target_names[iris.target]

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

sgd = SGDClassifier(random_state=42)
sgd.fit(X_train, y_train)
y_pred = sgd.predict(X_train)

conf_matrix = confusion_matrix(y_true=y_train, y_pred=y_pred)
conf_matrix

混淆矩阵将如下所示:

array([[31,  0,  0],
       [ 1, 17, 19],
       [ 0,  0, 37]], dtype=int64)

分类报告将如下所示:

              precision    recall  f1-score   support

      setosa       0.97      1.00      0.98        31
  versicolor       1.00      0.46      0.63        37
   virginica       0.66      1.00      0.80        37

    accuracy                           0.81       105
   macro avg       0.88      0.82      0.80       105
weighted avg       0.87      0.81      0.79       105

查看分类报告,我们看到versicolor该类的召回率非常低,实际上我们有更多的假阴性(有利于virginica该类),而不是真阳性(这里不是倾斜的类)。另外,请注意,在代码中,我们测试了训练数据中的性能。

我的感觉是我们有错误分类的例子y_true=versicolor和我们有的例子y_pred=virginica更“相似” y_true=virginica,但我不太确定如何衡量这种相似性。

如果我们选择不同的模型,例如 a ,这个误差分析会不会有所不同RandomForest

实际上,我们可能会有很多功能,例如一次性编码的功能、文本和数字功能,但我将这个 MWE 作为如何进行的开始。

0个回答
没有发现任何回复~