Ошибка в типе данных переменной ответа при выполнении поиска в сетке - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь выполнить поиск сетки для леса изоляции в 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)

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

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])
...