Ошибка в типе данных переменной ответа при выполнении поиска по сетке

#python #machine-learning #scikit-learn #grid-search

#python #машинное обучение #scikit-learn #grid-search

Вопрос:

Я пытаюсь выполнить поиск по сетке для изолирующего леса в sklearn. Вот мой код на данный момент:

 df = pd.read_csv('/content/PS_20174392719_1491204439457_log.csv')

from sklearn.preprocessing import StandardScaler
from sklearn import preprocessing

#Factorize Categorical Variables
df['type'] = pd.factorize(df['type'])[0]
df['nameOrig'] = pd.factorize(df['nameOrig'])[0]
df['nameDest'] = pd.factorize(df['nameDest'])[0]
df['isFraud'] = pd.factorize(df['isFraud'])[0] #Target Variable
#Normalize Continuous Variables
df['amount']= StandardScaler().fit_transform(df['amount'].values.reshape(-1,1))

df['oldbalanceOrg'] = StandardScaler().fit_transform(df['oldbalanceOrg'].values.reshape(-1,1))
df['newbalanceOrig'] = StandardScaler().fit_transform(df['newbalanceOrig'].values.reshape(-1,1))
df['oldbalanceDest'] = StandardScaler().fit_transform(df['oldbalanceDest'].values.reshape(-1,1))
df['step'] = StandardScaler().fit_transform(df['step'].values.reshape(-1,1))
df['newbalanceDest'] = StandardScaler().fit_transform(df['newbalanceDest'].values.reshape(-1,1))

del df['nameOrig']
del df['nameDest']
del df['step']

#RAM keeps crashing. Use less data
df_validation = df.iloc[4453834:] #Do grid search for more than 15% of overall data
df = df.iloc[0:636262, :]

df_validation_target = df_validation['isFraud']
df_validation = df_validation.drop(['isFraud'], axis=1)
  

Изначально я явно не преобразовывал целевую переменную в тип categorical и столкнулся с той же ошибкой, с которой сталкиваюсь в настоящее время:

 df_validation_target = df_validation_target.astype('category')

#Do GridSearch on the Validation Set (contains both classes)
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import f1_score, make_scorer

my_scoring_func = make_scorer(f1_score)

params = {
    'n_estimators': [5, 10, 50, 100, 300, 500, 700, 900, 1000],
    'max_features': [5, 10, 30, 50, 70, 100, 300, 500, 1000],
    'contamination': [0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5],
    'max_features': [0.1, 0.2, 0.3,0.4]
}


clf = IsolationForest(max_samples='auto')
grid_s = GridSearchCV(estimator=clf, param_grid=params, cv=3, scoring=my_scoring_func)

grid_s.fit(df_validation, df_validation_target)
  

Ошибка выделяет строку grid_s.fit , а код ошибки является:

 ValueError: Target is multiclass but average='binary'. Please choose another average setting.
  

df_validation содержит 4 числовых столбца, масштабируемых между (-1,1) и двумя категориальными переменными, которые разложены на множители и содержат 3 класса (0, 1, 2).

Целевая переменная является двоичной.

Любая помощь была бы отличной!

Редактировать: вот результат df_validation_target.unique() :

 array([0, 1])
  

Комментарии:

1. Пожалуйста, опубликуйте результат df_validation_target.isFraud.unique()

2. @desertnaut только что добавил правку.