Я пытаюсь сделать мультиклассовую классификацию для 3 классов. Классы несбалансированы, так что у меня есть данные 2000 для класса 0, 2000 для класса 1 и 4000 для класса 2. В документации говорится, что я должен использовать список dict для этого, например: [{0: 1, 1: 1}, {0: 1, 1: 1}, {0: 1, 1: 2}]
, но я получаю ошибку.
Я использую Python 3.6.9 в Jupyter Notebook и версию 0.21.3 sci-kit-learn, которая гласит для class_weights:
Обратите внимание, что для многопоточных (включая многолинейные) веса должны бытьопределяется для каждого класса каждого столбца в своем собственном dict. Например, для классификации с четырьмя классами для нескольких меток веса должны быть [{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}]
вместо [{1:1}, {2:5}, {3:1}, {4:1}]
.
Я использую GridSearchCV с kfold = StratifiedKFold(10, shuffle=True, random_state=0)
, чтобы всегда получать одинаковое перемешивание данных.
Я также попробовал один диктовку, как {0: 1, 1: 1, 1: 2}
. Это работает, но в то время как я получаю 99% точности данных тренинга, я всегда получаю класс 2 для тестовых данных. Я также пробовал class_weight = 'сбалансированный', тот же результат, что и выше.
grid_param = {
'n_estimators': [300, 500, 800, 1000],
'max_features': [3, 5, 'auto'],
'criterion': ['gini', 'entropy']
}
rf_clf = GridSearchCV(RandomForestClassifier(random_state=0,
class_weight=[{0: 1, 1: 1}, {0: 1, 1: 1}, {0: 1, 1: 2}]),
grid_param,
scoring='accuracy',
cv=kfold,
n_jobs=-1)
rf_clf.fit(rescaled_train_features, train_labels) # this throws the Error
Где rescaled_train_features - это функции, извлеченные из примерно 8000 изображений, а train_labels - этометки (0, 1 и 2 в зависимости от класса). Я проверяю, какие функции лучше всего представляют изображения, поэтому я использую hu_moments, haralick-функции, цветную гистограмму и сёрфинг с сочетанием друг с другом. Но это весь код, который я использую для классификации случайных лесов
Ошибка, которую я получаю для списка ячеек, который я использую выше
ValueError: class_weight должен быть dict, 'сбалансированный',или Нет, получил: [{0: 1, 1: 1}, {0: 1, 1: 1}, {0: 1, 1: 2}].