У меня есть набор данных, который содержит 100 столбцов в качестве векторов признаков (100D векторов признаков), сгенерированных из word2vec, и моя цель - категориальная переменная для каждой строки вектора в моем наборе данных. Сейчас в моем наборе данных около 1000 различных категориальных переменных, а количество строк составляет около 75000. Проблема с набором данных заключается в том, что он сильно несбалансирован и, за исключением первых 200 категориальных переменных, все остальные классы имеют очень мало выборок и some classes have less than 6 samples
.
Теперь я хочу выполнить передискретизацию этих данных с помощью SMOTE, чтобы создать больше примеров для классов меньшинств. I want to ignore the classes that have less than 6 sample examples
, потому что это точка, в которой SMOTE выдает ошибку значения. Есть ли способ обработать это в коде, чтобы я мог игнорировать эти классы с менее чем 6 образцами при выполнении SMOTE? И поможет ли это решить проблему, с которой я столкнулся в настоящее время?
Код и сообщение об ошибке для справки:
dataset = pd.read_csv(r'C:\vectors.csv')
X = dataset.iloc[:, 3:103]
y = dataset.iloc[:, 0]
from imblearn.over_sampling import SMOTE
smote = SMOTE(k_neighbors = 1)
smote_Xtrain, smote_y_train = smote.fit_sample(X, y)
Я получаю эту ошибку в настоящее время ValueError: Expected n_neighbors <= n_samples, but n_samples = 1, n_neighbors = 2
, хотя я установил k_neighbors = 1
Любая помощь в этом будет высоко оценена