данные передискретизации - используя SMOTE из imblearn с трехмерными массивами - PullRequest
1 голос
/ 14 мая 2019

Я хочу пересмотреть мой набор данных. Это состоит из категорически преобразованных данных с метками 3 классов. Количество образцов в классе:

  • счета класса А: 6945
  • отсчетов класса B: 650
  • Количество классов C: 9066
  • ИТОГО: 16661

Форма данных без меток (16661, 1000, 256). Это означает 16661 выборку (1000 256). То, что я хотел бы, чтобы повысить выборку данных до количества выборок из класса большинства, то есть класса A -> (6945)

Однако при звонке:

from imblearn.over_sampling import SMOTE
print(categorical_vector.shape)
sm = SMOTE(random_state=2)
X_train_res, y_labels_res = sm.fit_sample(categorical_vector, labels.ravel())

Постоянно говорится ValueError: найден массив с dim 3. Ожидается оценщик <= 2. </p>

Как я могу сгладить данные таким образом, чтобы оценщик мог соответствовать им и чтобы это имело смысл? Кроме того, как я могу разблокировать (с трехмерным измерением) после получения X_train_res?

1 Ответ

1 голос
/ 14 мая 2019

Я рассматриваю фиктивный 3d массив и принимаю 2d размер массива самостоятельно,

arr = np.random.rand(160, 10, 25)
orig_shape = arr.shape
print(orig_shape)

Выход: (160, 10, 25)

arr = np.reshape(arr, (arr.shape[0], arr.shape[1]))
print(arr.shape)

Выход: (4000, 10)

arr = np.reshape(arr, orig_shape))
print(arr.shape)

Выход: (160, 10, 25)

...