【问题标题】:python - Stacked Classifier: IndexError while fitting the datapython - 堆叠分类器:拟合数据时出现 IndexError
【发布时间】:2017-02-16 13:24:02
【问题描述】:

我正在使用银行数据来预测每天的门票数量。我正在使用堆叠来获得更准确的结果并使用brew 库。

这里是重要特征的示例数据集:

[] 这是目标属性示例:

[]

代码如下:

from stacked_generalization.lib.stacking import StackedClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression, RidgeClassifier
# Stage 1 model
bclf = LogisticRegression(random_state=1)

# Stage 0 models
clfs = [RandomForestClassifier(n_estimators=40, criterion = 'gini', random_state=1),
        gbm,
        RidgeClassifier(random_state=1)]

sl = StackedClassifier(bclf, clfs)
sl.fit(training.select_columns(features).to_dataframe().as_matrix(), np.array(training['class']))

这是训练数据格式:

[[  21   11 2014   46    4    3]
 [  22   11 2014   46    5    4]
 [  24   11 2014   47    0    4]
 ..., 
 [  30    9 2016   39    4    5]
 [   3   10 2016   40    0    1]
 [   4   10 2016   40    1    1]]

现在,当我尝试拟合模型时,会出现以下错误:

但是,我将我的代码与库中给出的示例进行了比较,但仍然无法弄清楚我哪里出错了。请帮助我。

【问题讨论】:

  • 训练对象的格式是什么?
  • 更新了我的答案,首先它在 sframe 中,然后我将它转换为 numpy nd 数组
  • 错误与数组索引有关。 c.classes_ 是一个嵌套列表或除整数或布尔值之外的列表。它们是字符串吗?

标签: python numpy machine-learning ensemble-learning


【解决方案1】:

我遇到了类似的问题,似乎只是 brew 中的一个需要修复的错误。问题是 c.classes_ (或类数)返回一个带有浮点数的 numpy 数组(例如,如果你有两个类,它返回 [0.0, 1.0] 而不是整数([0,1])。代码试图使用这些浮点数来索引列,但你不能用浮点数索引一个 numpy 列。

probas.shape = # rows = # 训练示例; # 列 = # 类

c.predict_proba(X) 返回每​​个训练示例的每个类的概率。

probas[:, list(c.classes_)] = c.predict_proba(X)

应该将 X 中每一行的每个类的概率放入 probas 中,使用 class # 来索引 probas 中的列。

如果你添加 astype(int) 这会起作用

probas[:, list(et.classes_.astype(int))] = et.predict_proba(X)

或者只是

probas = np.copy(et.predict_proba(X))

【讨论】:

    猜你喜欢
    • 2017-01-28
    • 2017-11-25
    • 2019-04-20
    • 1970-01-01
    • 2021-07-20
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    相关资源
    最近更新 更多