我想对在不同样本上训练但类别相同的两个SVM的得分进行平均
# 数据有相同的标签 x_1[1] 有 y_1[1] 并且 x_2[1] 有 y_2[1]# 其中 y_2[1] == y_1[1]Dataset_1=(x_1,y)Dataset_2=(x_2,y)test_data=(test_sample,test_labels)
我们有50个类别。数据集1和数据集2的类别相同:
list(set(y_1))=list(set(y_2))
我尝试过的方法:
from sklearn.svm import SVC
clf_1 = SVC(kernel='linear', random_state=42).fit(x_1, y)clf_2 = SVC(kernel='linear', random_state=42).fit(x_2, y)
在执行以下操作之前,如何平均clf_1和clf_2的得分:
predict(test_sample)
?
我想做的是什么?
回答:
我不确定我是否理解你的问题;要像典型的集成学习那样简单地平均得分,你应该首先从每个模型分别获取预测概率,然后只需取它们的平均值:
pred1 = clf_1.predict_proba(test_sample)pred2 = clf_2.predict_proba(test_sample)pred = (pred1 + pred2)/2
为了获得预测概率而不是硬类别,你应该在初始化SVC时使用额外的参数probability=True
。
pred
的每一行将是一个长度为50的数组,与你的类别数量相同,每个元素代表样本属于相应类别的概率。
在平均后,只需取pred
的argmax – 但要确保返回的概率的顺序是正确的;根据文档:
列对应于属性classes_中按排序顺序出现的类别
由于我不完全确定这意味着什么,请在训练集上运行一些预测检查,以确保顺序是正确的。