Sklearn:SVM / RFC的输出预测是1类

时间:2017-08-10 12:12:00

标签: python machine-learning

我使用了sklearn工具包中的SVM和RandomForestClassifier。 我将数据分成训练和测试,但我的数据集非常不平衡,20%的正面和80%的训练。

为了解释我使用了class_weight属性,并将其设置为平衡。

结果概率都设置为显性类,所有测试样本都得到[0.8 0.2]。

我不确定会出现什么问题,但我认为class_weight工作不正常,因为对最常见的类进行欠采样会使概率看起来正常。

那么,有关如何解决此问题的任何提示?我认为权重应该解决它但不是。

编辑代码:

skf = ShuffleSplit(n_splits=splits, test_size=0.25,random_state=1)
for train, test in skf.split(X, Y):
  wt=np.zeros(len(Y_train));#weights for imbalanced
    for i in range(0,len(Y_train),+1):
                    if Y_train[i]==1:
                        wt[i]=0.20#less data for positive class
                    else:
                        wt[i]=0.05 
clf = svm.SVC(C=100,kernel='rbf',gamma=0.001,probability=True)
clf.fit(X_train,Y_train.ravel(),sample_weight=wt)
probas = clf.predict_proba(Xtest)[:, 1]

我也试过了:

w='balanced'
    clf = svm.SVC(C=100,kernel='rbf',gamma=0.001,class_weight=w,probability=True)

0 个答案:

没有答案