当使用sklearn使用子任务和两个不同的数据集时,您将如何实现模型组合



当使用两个不同的数据集时,如何将模型持久性用于子任务?我创建了原始标签的副本,并用目标列中的3个标签替换了另一个标签。

例如,我有一个NLP多分类问题,需要将x分类为4个不同的标签,如1、2、3或4。1、2、3个标签是相关的,它们的标签可以被替换为5,所以现在这是一个二元分类问题。现在,我只需要区分4和5,但我仍然需要1、2、3之间的分类,我不太确定如何使用初始分类(4和5二进制分类模型(来帮助第二个模型(分类1,2,3(。我找不到任何信息,如果sci试剂盒学习允许这样做,就像Keras做的。谢谢你的建议。

目前,我使用SGD分类器,在4到5之间的分类中获得了90%的准确率,但不确定如何将其用于1、2和3的多重分类。这个功能不在sklearn中吗?

我想它和喀拉斯很相似。


编辑:经过进一步的研究,我认为我会使用"堆叠模型"然而,我在理解第二个模型如何"知道"哪些标签(1,2,3(代替了5时遇到了概念问题?

我遇到的一个问题是,集成学习者要求他们在相同的数据集上进行训练。我的是一样的,只是它不是,因为我用标签1,2,3代替了5,所以它只有4,5作为标签。这种方法会带来什么结果?


第2版:每个样本只能标记为一个类。A.原始目标列包含(1、2、3和4(。B.调整后的目标列包含(4和5(,其中5表示1、2和3

A和B是两个不同的CSV文件,唯一的区别是上面所述的,并且两者具有相同的功能。

为每个折叠(10个折叠(拟合SGDClassifier()

X_Train=约(30000,54((垂直堆叠(--y_train=约30000

测试:

X_test=(2000至4000,54(--y_test=(2000至4000(

现在的情况:

clf1 = SGDClassifier(max_iter=1000, tol=1e-3)
clf1.fit(X_train, y_train)
predicted = [labels[int(a)] for a in clf1.predict(X_test)]
actual = [labels[int(a)] for a in y_test]

这是我基于上面简单代码的答案。

我们有X_train,Y_train。

培训模式1

#modifiying the labels for two classes. binary prediction.  1[1,2,3] & 2[4]   
y_train_copy = np.copy(y_train)
y_train_copy [y_train_copy <4] = 1
y_train_copy [y_train_copy >=4] = 2
clf1 = SGDClassifier(max_iter=1000, tol=1e-3)
clf1.fit(X_train, y_train_copy )

训练模型2

#training with classes 1 ,2, 3. filtering X based on Y
X_train = X_train[Y_train<4] 
Y_train = Y_train[Y_train<4]
clf2 = SGDClassifier(max_iter=1000, tol=1e-3)
clf2.fit(X_train, y_train)

现在我们有两个模型,clf1(将2个类别(1,2,3(分类为1或(4(分类为2(,clf2将个体(1,3(进行分类,在clf1(中预测为1

预测

predicted = clf1.predict(X_test)
#make sure you get 1 & 2 filled in predicted list

这将给出1(1,2,3(或2(4(的结果

further_prediction_X_test = X_test[predicted == 1] #filtering all thats predicted as 1 by previous model
further_prediction = clf2.predict(further_repdiction_X_test)
predicted[predicted==2] = 4 #rolling back to original label
predicted[predicted==1] = further_prediction #replacing the predicted classes from second model for which first model predicted as 1. (replacing with 1, 2, 3) 

注:

  1. 我强烈建议对你的类进行整数编码,这样它就很容易过滤和处理。

  2. 不要混淆1&在我上面的答案中,clf1中的2个具有1、2、3、4个原始类。

最新更新