Отрицательные размеры не допускаются (Smoteenn) - PullRequest
0 голосов
/ 29 января 2019

Я использую данные о дисбалансе (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 (class tuple) (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}.

Продолжить ...

Пожалуйста, научите, если естькто-то, чтобы понять

Спасибо

...