Отрицательные размеры не допускаются (Smoteenn)
Я использую данные дисбаланса (2 классификация положительная: отрицательная = 9:1)
поэтому я пытаюсь использовать SMOTEENN и optuna (optuna: чтобы найти соответствующее значение sampling_strategy)
но я получил эту ошибку:
Setting trial status as TrialState.FAIL because of the following error:
ValueError('negative dimensions are not allowed')
Traceback (most recent call last):
File "D:\Anacon\envs\adisonax\lib\site-packages\optuna\study.py", line 409, in _run_trial
result = func(trial)
File "C:/Users/adisonax/Desktop/sotuken env/comprev/venv/No3.py", line 27, in objective
X_res, y_res = sme.fit_resample(X_train_bow, Y_train)
File "D:\Anacon\envs\adisonax\lib\site-packages\imblearn\base.py", line 85, in fit_resample
output = self._fit_resample(X, y)
File "D:\Anacon\envs\adisonax\lib\site-packages\imblearn\combine\_smote_enn.py", line 128, in _fit_resample
X_res, y_res = self.smote_.fit_resample(X, y)
File "D:\Anacon\envs\adisonax\lib\site-packages\imblearn\base.py", line 85, in fit_resample
output = self._fit_resample(X, y)
File "D:\Anacon\envs\adisonax\lib\site-packages\imblearn\over_sampling\_smote.py", line 796, in _fit_resample
return self._sample(X, y)
File "D:\Anacon\envs\adisonax\lib\site-packages\imblearn\over_sampling\_smote.py", line 814, in _sample
X_class, nns, n_samples, 1.0)
File "D:\Anacon\envs\adisonax\lib\site-packages\imblearn\over_sampling\_smote.py", line 108, in _make_samples
low=0, high=len(nn_num.flatten()), size=n_samples)
File "mtrand.pyx", line 994, in mtrand.RandomState.randint
File "mtrand.pyx", line 995, in mtrand.RandomState.randint
File "randint_helpers.pxi", line 202, in mtrand._rand_int32
ValueError: negative dimensions are not allowed
Мой набор данных составляет около 7000 предложений.
Это содержимое X_train_bow:csr_matrix (кортеж класса) (7851,195) data = ndarray, dtype = float64
Я ищу сеть и думаю, что это переполнение (float64).
Итак, я попытался изменить dtype на float32 и float16, как это,
X_train_bow_new = csr_matrix.astype(X_train_bow, dtype=np.float32, casting='same_kind')
но результат был тот же...
def objective(trial):
sampling_strategy = trial.suggest_discrete_uniform('sampling_strategy', 0.1, 1.0, 0.01)
sme = SMOTEENN(sampling_strategy=sampling_strategy)
X_res, y_res = sme.fit_resample(X_train_bow, Y_train)
mnb = MultinomialNB()
mnb.fit(X_res, y_res)
y_pred = mnb.predict(X_test_bow)
return 1.0 - accuracy_score(Y_test, y_pred)
new_vec = TfidfVectorizer(token_pattern=u'(?u)\\b\\w+\\b', norm='l2')
X_train_bow = new_vec.fit_transform(new_X_train)
X_test_bow = new_vec.transform(X_test)
study = optuna.create_study()
study.optimize(objective, n_trials=100)
Если все пойдет хорошо, это будет так:
Finished a trial resulted in value: 0.2339449541284404. Current best value is 0.2339449541284404 with parameters: {'sampling_strategy': 0.54}.
Finished a trial resulted in value: 0.2884811416921509. Current best value is 0.2339449541284404 with parameters: {'sampling_strategy': 0.54}.
Продолжить...
Пожалуйста, научите, если есть кто-то, чтобы понять
Спасибо