How do I get misclassified instances and their indices for each fold cross validation in python?

Viewed 144
         from sklearn import datasets, linear_model
         from sklearn.model_selection import cross_val_predict
         iris = datasets.load_iris()
         X = iris.data[:150]
         y = iris.target[:150]
         lasso = linear_model.Lasso()
         y_pred = cross_val_predict(lasso, X, y, cv=3)

so, I want to get the list of misclassified instances and their indices for each fold. For example, here cv=3, I can find the 3 different score using score function. But I dont know how can I get the list of misclassified examples

1 Answers

First of all, you solve multiclassification problem with one regression model, it is not correct.

I use sklearn.linear_model.LogisticRegression for this task.

If you want looking for misclassified examples in each fold you can use Fold.split, iterate for each split and fit/predict classifier on train/test data. Then you can write results in pandas.Dataframe (in my code named misclf_df)

import pandas as pd
from sklearn import datasets, linear_model
from sklearn.model_selection import KFold

# load data
iris = datasets.load_iris()
X = iris.data[:150]
y = iris.target[:150]

# get classifier instance
lasso = linear_model.LogisticRegression(max_iter=300)
# get fold splitter
kfold = KFold(n_splits=3, shuffle=True, random_state=42)
# Dataframe with misclassified examples
misclf_df = pd.DataFrame(
    {
        'folds' : np.zeros(X.shape[0]), 
        'is_misclassified' : np.zeros(X.shape[0])
    },
)

for fold_n, (train_idx, test_idx) in enumerate(kfold.split(X, y)):

    #get train/test split for current fold
    X_train, y_train = X[train_idx], y[train_idx]
    X_test, y_test = X[test_idx], y[test_idx]

    lasso.fit(X_train, y_train)

    # write results
    misclf_df.loc[test_idx, 'folds'] = fold_n
    misclf_df.loc[test_idx, 'is_misclassified'] = lasso.predict(X_test) != y_test

And you can sample from miscall_df, in this picture, example with index 70, from fold 1 was misclassified

enter image description here

Related