我使用了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)