Как сбалансировать классы со случайным лесом? - PullRequest
0 голосов
/ 19 июня 2019

У меня проблема с несбалансированными классами.Классы 0,1,2

Класс 0 очень несбалансирован по отношению к классам 1, 2

вот мой код:

parameters = [{'kernel': ['linear'], 'C': [1, 10, 100]},
              {'kernel': ['rbf'], 'gamma': [1e-2,1e-3, 1e-4],'C': [1, 10, 1000, 5000], }]

tfidf = TfidfVectorizer( ngram_range=(1, 20))
clf=GridSearchCV(SVC(class_weight='balanced'),parameters,cv=2,refit=True)
model= make_pipeline(tfidf,clf)
model.fit(X_train, y_train)



print("Best parameters set:",clf.best_params_)
print("Grid scores on every set of parameters:")
print()
means = clf.cv_results_['mean_test_score']
stds = clf.cv_results_['std_test_score']
for mean, std, params in zip(means, stds, clf.cv_results_['params']):
    print("%0.3f (+/-%0.04f) for %r"
              % (mean, std * 2, params))


print()
print("Classification report:")
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))
print("Test accuracy:",accuracy_score(y_test, y_pred))
labels = model.classes_
matrix = confusion_matrix(y_test,y_pred)
print(pd.DataFrame(matrix,columns=labels, index=labels))
plot_confusion_matrix(matrix,labels)

Результаты:enter image description here

Из матрицы путаницы я вижу, что классы плохо сбалансированы.Как я могу это сделать?

Спасибо

1 Ответ

1 голос
/ 19 июня 2019

что вы имеете в виду, они не сбалансированы? Считаете ли вы, что ваш исходный фрейм данных также может быть разбалансирован? Вы также хотели бы при распределении ваших y (y_train) и (y_test), я бы предположил, что большинство данных в классе 0. Вы также должны запустить фиктивный классификатор из scikit learn (стратегия: наиболее часто), чтобы увидеть, к какой точности и путанице может привести эта стратегия. Я бы предположил, что точность этого теста будет около 0,8.

...