微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SMOTE用于平衡数据

如何解决SMOTE用于平衡数据

我正在尝试训练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一起使用。您能请我按正确的顺序使用它吗?

解决方法

您没有给出足够的代码或数据,也没有提供完整的追溯,但是...最后一行中出现的错误表明SMOTE可以正常工作,并且该错误是由于{{1} }是一个稀疏数组,没有列名,因此没有属性X_train。看起来您在某些时候拥有列名,因此您应该能够从columns中检索它们。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。