将二进制堆叠示例调整为多类

时间:2016-07-26 11:55:19

标签: python matrix machine-learning ensemble-learning

我一直在研究this example of stacking。在这种情况下,每组K形折叠产生一列数据,并且对于每个分类器重复这一过程。即:混合的矩阵是:

dataset_blend_train = np.zeros((X.shape[0], len(clfs)))
dataset_blend_test = np.zeros((X_submission.shape[0], len(clfs)))

我需要从多类问题中堆叠预测(每个样本编译15个不同的类)。这将为每个clf产生一个n * 15矩阵。

这些矩阵是否应该水平连接?或者在应用逻辑回归之前,是否应该以其他方式组合?谢谢。

2 个答案:

答案 0 :(得分:5)

您可以通过两种方式使代码适应多类问题:

  1. 水平连接概率,即您需要创建: dataset_blend_train = np.zeros((X.shape[0], len(clfs)*numOfClasses)) dataset_blend_test = np.zeros((X_submission.shape[0], len(clfs)*numOfClasses))
  2. 不使用概率,而是使用基本模型的类预测。这样,您可以保持数组的大小相同,但只需使用predict_proba而不是predict
  3. 我已经成功使用了两者,但效果更好可能取决于数据集。

答案 1 :(得分:0)

在循环浏览每个分类器时,还存在扩展功能的问题。我使用以下内容:

db_train = np.zeros((X_train.shape[0], np.unique(y).shape[0]))    
db_test = clf.predict_proba(X_test)   

...

try:
    dataset_blend_train
except NameError:
    dataset_blend_train = db_train
else:
    dataset_blend_train = np.hstack((dataset_blend_train, db_train))

try:
    dataset_blend_test
except NameError:
    dataset_blend_test = db_test
else:
    dataset_blend_test = np.hstack((dataset_blend_test, db_test))