#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 только что добавил правку.