【问题标题】:SMOTE for balancing data [closed]用于平衡数据的 SMOTE [关闭]
【发布时间】:2021-01-26 08:08:54
【问题描述】:

我正在尝试训练 GradientBoosting 分类器。由于我的数据不平衡,我正在考虑 SMOTE 来平衡它。 我尝试如下:

from sklearn.ensemble import GradientBoostingRegressor
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_boston
from sklearn.metrics import mean_absolute_error

# Import train_test_split function
from sklearn.model_selection import train_test_split

# Split dataset into training set and test set

from imblearn.over_sampling import SMOTE

y=df['Label']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.30, stratify=y)
sm = SMOTE(random_state = 42)
X_train_oversampled, y_train_oversampled = sm.fit_sample(X_train, y_train)
X_train = pd.DataFrame(X_train_oversampled, columns=X_train.columns)

但我收到了这个错误:

---> 20 X_train = pd.DataFrame(X_train_oversampled, columns=X_train.columns)

/anaconda3/lib/python3.7/site-packages/scipy/sparse/base.py in __getattr__(self, attr)
    689             return self.getnnz()
    690         else:
--> 691             raise AttributeError(attr + " not found")
    692 
    693     def transpose(self, axes=None, copy=False):

AttributeError: columns not found

我不知道应该替换什么以及如何将 SMOTE 与 X_train 和 y_train 一起使用。请问如何按顺序使用?

【问题讨论】:

    标签: python scikit-learn imblearn smote


    【解决方案1】:

    可以肯定的是,您没有提供足够的代码或数据,也没有提供完整的回溯……但是最后一行中出现的错误表明 SMOTE 工作正常,错误是因为 X_train 是一个稀疏数组,它没有列名,因此没有属性columns。看起来您在某些时候有列名,因此您应该能够从 df 检索它们。

    【讨论】:

    • 感谢您的回答 Ben Reiniger。我怀疑我在 SMOTE 中调用参数的方式。没有这个,我总是这样做:vectorizer = CountVectorizer() X = vectorizer.fit_transform(df['Clean_Titles'].replace(np.NaN, "")) y=df['Label'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.30, stratify=y),所以是的,我可能没有在我的问题中调用代码中的列名。你能告诉我正确的顺序,有一个列目标和另一个变量吗?
    • 然后CountVectorizer 是创建稀疏数组的原因。该转换器具有get_feature_names 方法来检索编码中使用的单词,因此columns=vectorizer.get_feature_names() 之类的方法可能会起作用。您可能需要进一步调整该行以适应作为稀疏数组的输入数据。
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2016-12-31
    • 2017-10-28
    • 2019-10-05
    • 2016-08-07
    • 2018-01-14
    • 2020-01-16
    • 1970-01-01
    相关资源
    最近更新 更多