#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 изменил ответ, чтобы показать, как должен выглядеть код