我对不平衡的类进行多类分类。我使用SGDClassifier(), GradientBoostingClassifier(), RandomForestClassifier(), and LogisticRegression()
和class_weight='balanced'
。比较结果。需要计算精度。我尝试了以下方法来计算加权精度:
n_samples = len(y_train)
weights_cof = float(n_samples)/(n_classes*np.bincount(data[target_label].as_matrix().astype(int))[1:])
sample_weights = np.ones((n_samples,n_classes)) * weights_cof
print accuracy_score(y_test, y_pred, sample_weight=sample_weights)
y_train
是一个二进制数组。因此sample_weights
与y_train
(n_samples, n_classes
)具有相同的形状。运行脚本时,收到以下错误:
更新:
^{pr2}$
这个错误似乎表明样本权重和
y_test
/y_pred
数组的形状不同。基本上,该方法使用y_test == y_pred
创建一个布尔数组,并将其与sample_weights
一起传递给np.average
。该方法中的第一个检查是确保输入的数组和权重的形状相同,在本例中显然不是这样。在更新
你的评论“sample_weights,yüu test,和y_pred具有相同的形状(n_samples,n_classes)”暴露了这个问题。根据^{} ,}(在您的例子中,})应该是一维的。你可能在使用一个热编码标签吗?如果是这样,您应该将它们转换为单值标签,然后再次尝试精度分数。在
y_pred
和{y_test
和{相关问题 更多 >
编程相关推荐