问题描述
我有一个包含 240 个条目的数据集,分为 4 个类别,每个类别 60 个。我正在执行一对一分类,因此我将一个类作为 class0,将所有其他 3 个类作为 class1。由于现在数据不平衡,我使用 SMOTE 对其进行过采样。但即使在过采样之后,我的分类器也只预测 class1(之前的多数类)。将数据集作为任何通用分类数据集。代码如下:
X = dataset.iloc[:,:-1]
y = numpy.empty(240,dtype = int)
y[:60] = 0
y[60:] = 1
oversample = SMOTE(random_state = 0,sampling_strategy = 0.8)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2,random_state = 0)
X_balanced,y_balanced = oversample.fit_sample(X_train,y_train)
X_balanced = pd.DataFrame(X_balanced,columns=X.columns)
X_train,y_train = X_balanced,y_balanced
svc = SVC(kernel = 'rbf',C = 10,gamma = 3)
svc.fit(X_train,y_train)
pred = svc.predict(X_test)
这里是 pred 变量的值
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
正如你所见,它全是“1”, 这使得混淆矩阵为:
[[ 0 11]
[ 0 37]]
还有一点要注意,如果我在拆分数据之前进行过采样,结果会很好,但这是处理数据的一种糟糕方式,因为我们正在创建一个合成测试集。 对此的任何帮助将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)