Невозможно уместить текстовые данные с помощью SMOTE, SMOTE-N C, но смог запустить код на RandomOverSampling - PullRequest
0 голосов
/ 24 января 2020

Мы написали следующий код, где нам нужно классифицировать данный документ по отрасли, которой он принадлежит. Но фактические данные сильно несбалансированы, и поэтому мы подумали о применении методов избыточной выборки для повышения предсказуемости. Ниже приведена часть кода, в которой мы пытаемся применить метод выборки:

my_tags = list(df['label'].unique())

df['text'].apply(lambda x: len(x.split(' '))).sum()

X = df.text
y = df.label
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state = 42)

tv = TfidfVectorizer(stop_words=None, max_features=100000)
encoder = preprocessing.LabelEncoder()
y_tfidf = pd.Series(encoder.fit_transform(y))
X_tfidf = pd.DataFrame(tv.fit_transform(X))


ros = RandomOverSampler(random_state=777)
X_ROS, y_ROS = ros.fit_resample(X_tfidf, y_tfidf)

Мы смогли запустить RandomOverSampler, но столкнулись со следующей ошибкой для SMOTE

AttributeError                            
Traceback (most recent call last)
<ipython-input-30-fd4d6778ffbf> in <module>
----> 1 X_smote, y_smote = smotenc.fit_resample(X_tfidf, y_tfidf)

******************\lib\site-packages\imblearn\base.py in fit_resample(self, X, y)
     73         """
     74         check_classification_targets(y)
---> 75         X, y, binarize_y = self._check_X_y(X, y)
     76 
     77         self.sampling_strategy_ = check_sampling_strategy(

******************\lib\site-packages\imblearn\over_sampling\_smote.py in _check_X_y(self, X, y)
    909 
    910         y, binarize_y = check_target_type(y, indicate_one_vs_all=True)
--> 911         X, y = check_X_y(X, y, accept_sparse=["csr", "csc"], dtype=None)
    912         return X, y, binarize_y
    913 

******************\lib\site-packages\sklearn\utils\validation.py in check_X_y(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator)
    753                     ensure_min_features=ensure_min_features,
    754                     warn_on_dtype=warn_on_dtype,
--> 755                     estimator=estimator)
    756     if multi_output:
    757         y = check_array(y, 'csr', force_all_finite=True, ensure_2d=False,

******************\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    576         if force_all_finite:
    577             _assert_all_finite(array,
--> 578                                allow_nan=force_all_finite == 'allow-nan')
    579 
    580     if ensure_min_samples > 0:

******************lib\site-packages\sklearn\utils\validation.py in _assert_all_finite(X, allow_nan, msg_dtype)
     62     # for object dtype data, we only check for NaNs (GH-13254)
     63     elif X.dtype == np.dtype('object') and not allow_nan:
---> 64         if _object_dtype_isnan(X).any():
     65             raise ValueError("Input contains NaN")
     66 

AttributeError: 'bool' object has no attribute 'any'

Присоединение выборки данных в github для лучшего понимания: https://github.com/Girish-HN/Sample

Обратите внимание, что RandomOverSampler хорошо работает с данными, но не SMOTE (ошибка показана выше), SMOTE-N C. Также пробовал ADASYN, но возвращал различный тип ошибки для каждой техники. Не удалось определить причину проблемы root

...