Как я могу генерировать категорические синтетические образцы с imblearn и SMOTE?

Я ищу для создания синтетических образцов для алгоритма машинного обучения, используя SMOTE imblearn. У меня есть несколько категорических функций, которые я преобразовал в целые числа, используя предварительную обработку sklearn.LabelEncoder.

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

from collections import Counter
from sklearn.datasets import make_classification
from imblearn.over_sampling import SMOTE
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.decomposition import PCA
import numpy as np
from sklearn import preprocessing

if __name__ == '__main__':
    df = pd.read_csv('resample.csv')
    y = df['Result']
    accounts = df['Account Number']
    df.drop('Result',axis=1,inplace=True)
    df.drop('Account Number', axis=1, inplace=True)

    df.fillna(value=0, inplace=True)

    le = preprocessing.LabelEncoder()
    le.fit(df['Distribution Partner'])
    print(le.classes_)
    df['Distribution Partner'] = le.transform(df['Distribution Partner'])
    print('Original dataset shape {}'.format(Counter(y)))
    sm = SMOTE(kind='regular')
    X_resampled, y_resampled = sm.fit_sample(df, y)
    np.savetxt('output.csv', X_resampled, delimiter=",")
    print('New dataset shape {}'.format(Counter(y_resampled)))

В любом случае я могу получить SMOTE для генерации синтетических сэмплов, но только со значениями 0,1,2 и т. Д. Вместо 0,5,1.23,2.004?

1 ответ

Все очень просто: используйте SMOTENC вместо SMOTE. SMOTENC может обрабатывать как категориальные, так и некатегорические характеристики.

Образец кода:

from imblearn.over_sampling import SMOTENC`
obj = SMOTENC(categorical_features = [1,4])
ovsersampled_features, ovsersampled_target = obj.fit_sample(Features, Target)

[1,4] = индекс категориального столбца набора данных.

* индекс начинается с 0.

К сожалению, SMOTE-реализация imblearn предназначена только для непрерывных данных. Это обсуждается здесь.

Другие вопросы по тегам