5

我一直在研究这个 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 矩阵。

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

4

2 回答 2

6

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

  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.

我已经成功地使用了这两种方法,但哪种效果更好可能取决于数据集。

于 2016-08-05T19:58:38.233 回答
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))
于 2017-04-04T14:57:08.640 回答