У меня проблема с несбалансированными классами.Классы 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)
Результаты:
Из матрицы путаницы я вижу, что классы плохо сбалансированы.Как я могу это сделать?
Спасибо