使用XGBoost进行预测时遇到问题

我有一个使用XGBoost进行二元分类预测的程序。我已经完成了大部分代码,但在最后我想使用用户定义的变量来预测类别时,遇到了问题。在分享代码之前,变量’clf’是我在执行GridSearchCV后选择的最佳分类器:

def prob1(LIMIT_BAL, SEX, EDUCATION, MARRIAGE, AGE, PAY_0, PAY_2, PAY_3, PAY_4, PAY_5, PAY_6, BILL_AMT1, BILL_AMT2, BILL_AMT3, BILL_AMT4, BILL_AMT5, BILL_AMT6, PAY_AMT1, PAY_AMT2, PAY_AMT3, PAY_AMT4, PAY_AMT5, PAY_AMT6):
    #1) 将用户输入的信息存储到一个系列中,转换为数据框,然后转置,使其与训练集中一样为一行。
    lst = [LIMIT_BAL, SEX, EDUCATION, MARRIAGE, AGE, PAY_0, PAY_2, PAY_3, PAY_4, PAY_5, PAY_6, BILL_AMT1, BILL_AMT2, BILL_AMT3, BILL_AMT4, BILL_AMT5, BILL_AMT6, PAY_AMT1, PAY_AMT2, PAY_AMT3, PAY_AMT4, PAY_AMT5, PAY_AMT6]
    ud_df = pd.Series(lst)
    ud_df = ud_df.to_frame()
    ud_df = ud_df.T
    #2) 对值进行与加载数据时相同的归一化和因子化处理。
    c = [1,2,3] # 分类数据列的索引
    r = list(range(0,23))
    r = [x for x in r if x not in c] # 获取所有其他列的列表
    df_cat = ud_df.iloc[:, [2,3,4]].copy()
    df_con = ud_df.iloc[:, r].copy()
    # 对分类数据进行因子化
    for c in df_cat:
        df_cat[c] = pd.factorize(df_cat[c])[0]
    # 对连续数据进行缩放
    scaler = preprocessing.MinMaxScaler()
    df_scaled = scaler.fit_transform(df_con)
    df_scaled = pd.DataFrame(df_scaled, columns=df_con.columns)
    df_final = pd.concat([df_cat, df_scaled], axis=1)
    # 将列重新排序回原始顺序
    cols = df.columns
    df_final = df_final[cols]
    # 预测
    prediction = clf.predict(df_final)
    # 预测概率
    probability_pred = clf.predict_probab(df_final)
    return(prediction, probability_pred)

在定义内部,用户提供这些变量,连续变量被归一化,分类变量通过因子化处理。

当我运行这段代码时,我得到以下错误:

prob1(50000,1, 1, 1, 37,0,0,0,0,0,0,64400,57069,57608,19394,19619,20024,2500,1815,657,1000,1000,800)

错误代码:df_con = ud_df.iloc[:, r].copy()

IndexError: positional indexers are out-of-bounds

任何帮助都将不胜感激!

这是一个未经处理的行样本:[50000,1,1,2,37,0,0,0,0,0,0,64400,57069,57608,19394, 19619,20024,2500,1815,657,1000,1000,800]

编辑1:修复了原始代码中的边界问题。现在在prob1(…..)列上高亮显示时得到以下错误:

KeyError: "Index(['ID', 'LIMIT_BAL', 'SEX', 'EDUCATION', 'MARRIAGE', 'AGE', 'PAY_0',\n       'PAY_2', 'PAY_3', 'PAY_4', 'PAY_5', 'PAY_6', 'BILL_AMT1', 'BILL_AMT2',\n       'BILL_AMT3', 'BILL_AMT4', 'BILL_AMT5', 'BILL_AMT6', 'PAY_AMT1',\n       'PAY_AMT2', 'PAY_AMT3', 'PAY_AMT4', 'PAY_AMT5', 'PAY_AMT6'],\n      dtype='object') not in index"

回答:

你的列表变量有23个元素。

  • r = list(range(0,24)) 有24个元素。 r = {0,1..23}

当你使用iloc基于索引查找udf中的元素时,因为它只有23个元素,你无法找到索引为23的元素,正如错误代码所说,这是越界的。

Related Posts

神经网络反向传播代码不工作

我需要编写一个简单的由1个输出节点、1个包含3个节点的…

值错误:y 包含先前未见过的标签:

我使用了 决策树分类器,我想将我的 输入 作为 字符串…

使用不平衡数据集进行特征选择时遇到的问题

我正在使用不平衡数据集(54:38:7%)进行特征选择…

广义随机森林/因果森林在Python上的应用

我在寻找Python上的广义随机森林/因果森林算法,但…

如何用PyTorch仅用标量损失来训练神经网络?

假设我们有一个神经网络,我们希望它能根据输入预测三个值…

什么是RNN中间隐藏状态的良好用途?

我已经以三种不同的方式使用了RNN/LSTM: 多对多…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注