Использование SMOTE для передискретизации двоичного класса;почему он возвращает случайные значения с плавающей точкой от 0 до 1? - PullRequest
0 голосов
/ 27 сентября 2019

Я использую SMOTE для повторной выборки двоичного класса TARGET_FRAUD, который содержит значения 0 и 1. 0 имеет около 900 записей, в то время как 1 имеет только около 100 записей.Я хочу пересчитать класс 1 примерно до 800.

Это сделано для выполнения некоторого классификационного моделирования.

#fix imbalanced data
from imblearn.over_sampling import SMOTE

#bar plot of target_fraud distribution
sns.countplot('TARGET_FRAUD', data=df)
plt.title('Before Resampling')
plt.show()

#Synthetic Minority Over-Sampling Technique
sm = SMOTE()

# Fit the model to generate the data.
oversampled_trainX, oversampled_trainY = sm.fit_resample(df.drop('TARGET_FRAUD', axis=1), df['TARGET_FRAUD'])
resampled_df = pd.concat([pd.DataFrame(oversampled_trainY), pd.DataFrame(oversampled_trainX)], axis=1)
resampled_df.columns = df.columns

sns.countplot('TARGET_FRAUD', data=resampled_df)
plt.title('After Resampling')
plt.show()

Это количество значений перед повторной выборкой:

TARGET_FRAUD:
0    898
1    102

Это число значений после повторной выборки:

1.000000    1251
0.000000     439
0.188377       1
0.228350       1
0.577813       1
0.989742       1
0.316744       1
0.791926       1
0.970161       1
0.757886       1
0.089506       1
0.567179       1
0.331502       1
0.563530       1
0.882599       1
0.918105       1
0.613229       1
0.239910       1
0.487373       1
...

Почему происходит случайноезначения с плавающей точкой между 0 и 1?Я только хочу, чтобы он возвращал значения int 0 и 1.

...