Поддержка в матрице путаницы

#python #machine-learning #confusion-matrix #smote

#python #машинное обучение #путаница-матрица #поразил

Вопрос:

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

Поддержка: ‘0’ 91 Поддержка: ‘1’ 209

У меня есть набор данных из 1000 меток, 1 встречается 700 раз, а метка 0 встречается 300 раз, я использую 0.3 для тестовых данных, но почему он показывает мне поддержку 91 и 209?
Даже если я не применяю алгоритм SMOTE, он показывает мне 91 и 209, и после применения SMOTE этото же самое.

Ответ №1:

Разъяснение

Во-первых, это не матрица путаницы, это отчет о классификации. Он перегруппировывает метрики, которые могут быть вычислены из матрицы путаницы.

Пораженная цель

Во-вторых, вы применяетесь SMOTE только к своему набору поездов. Поэтому, если вы следуете чьему-то коду, они бы обучили свою модель на данных поезда, передискретизированных с помощью SMOTE. Однако тестирование выполняется на исходных данных (что логично).

Ваша цель использования SMOTE в вашем наборе поездов — улучшить его дисбаланс. Как только модель узнает предполагаемые better веса из новых oversampled данных, вы продолжаете тестирование на тестовых данных, которые вы разделили, когда вы это сделали train_test_split(X,y,test_size=0.3) .

Код

 X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3)

X_train_sampled , y_train_sampled = sm.fit_sample(X_train,y_train.ravel())

model.fit(X_train_sampled,y_train_sampled) 

model.predict(X_test)
 

Комментарии:

1. Вы имеете в виду, что сначала я должен написать строку X_train, y_train = sm.fit_sample(X_train, y_train.ravel()) , а затем применить X_train, X_test, y_train, y_test = train_test_split(df.loc[:, feature_names], df[class_col_name], test_size=0.3,random_state=1)

2. @AHF изменил ответ, чтобы показать, как должен выглядеть код