sklearn中的SVM模型平均
SVM model averaging in sklearn
l 想对在不同样本但相同 类
上训练的两个不同 SVM 的分数求平均
# Data have the smae label x_1[1] has y_1[1] and x_2[1] has y_2[1]
# Where y_2[1] == y_1[1]
Dataset_1=(x_1,y)
Dataset_2=(x_2,y)
test_data=(test_sample,test_labels)
我们有 50 个 类。 dataset_1 和 dataset_2 相同 类 :
list(set(y_1))=list(set(y_2))
我试过的:
从 sklearn.svm 导入 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)
?
我想做什么?
不确定我是否理解你的问题;要像在典型的集成中一样简单地平均分数,您应该首先分别从每个模型中获得预测 probabilities,然后取它们的平均值:
pred1 = clf_1.predict_proba(test_sample)
pred2 = clf_2.predict_proba(test_sample)
pred = (pred1 + pred2)/2
为了获得预测概率而不是硬 classes,您应该使用附加参数 probability=True
.
初始化 SVC
pred
的每一行将是一个长度为 50 的数组,与您的 class 一样多,每个元素代表样本属于相应 class 的概率.
平均后,简单取pred
的argmax——只要确保返回概率的order就OK即可;根据文档:
The columns correspond to the classes in sorted order, as they appear in the attribute classes_
由于我不太确定这意味着什么,运行 对您的训练集进行一些预测检查,以确保顺序正确。
l 想对在不同样本但相同 类
上训练的两个不同 SVM 的分数求平均# Data have the smae label x_1[1] has y_1[1] and x_2[1] has y_2[1]
# Where y_2[1] == y_1[1]
Dataset_1=(x_1,y)
Dataset_2=(x_2,y)
test_data=(test_sample,test_labels)
我们有 50 个 类。 dataset_1 和 dataset_2 相同 类 :
list(set(y_1))=list(set(y_2))
我试过的:
从 sklearn.svm 导入 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)
?
我想做什么?
不确定我是否理解你的问题;要像在典型的集成中一样简单地平均分数,您应该首先分别从每个模型中获得预测 probabilities,然后取它们的平均值:
pred1 = clf_1.predict_proba(test_sample)
pred2 = clf_2.predict_proba(test_sample)
pred = (pred1 + pred2)/2
为了获得预测概率而不是硬 classes,您应该使用附加参数 probability=True
.
pred
的每一行将是一个长度为 50 的数组,与您的 class 一样多,每个元素代表样本属于相应 class 的概率.
平均后,简单取pred
的argmax——只要确保返回概率的order就OK即可;根据文档:
The columns correspond to the classes in sorted order, as they appear in the attribute classes_
由于我不太确定这意味着什么,运行 对您的训练集进行一些预测检查,以确保顺序正确。