【问题标题】:SciKit-Learn: Error when predictingSciKit-Learn:预测时出错
【发布时间】:2018-01-09 22:43:25
【问题描述】:

这似乎是我所看到的常见错误,但有许多潜在原因。

我正在尝试在 Python 中进行逻辑回归。我的数据保存为 pandas 数据框。

train, test = train_test_split(final_dat[train_cols], train_size=0.80, random_state=1)
logit = sm.Logit(train['SPR_Created__c'], train.drop(['SPR_Created__c'], axis=1)) 
result = logit.fit()
print result.summary()
result.predict(test[train_cols])

错误:

result.predict(test[train_cols])

ValueError: shapes (13664,18) and (17,) not aligned: 18 (dim 1) != 17 (dim 0)

我不确定是否会发生此错误,因为所有大多数变量都已调整。

final_dat[train_cols].info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 68319 entries, 0 to 31978
Data columns (total 18 columns):
Is_Subject                                68319 non-null int64
Is_Description                            68319 non-null int64
SPR_Created__c                            68319 non-null int64
description2_contains_any_synonym         68319 non-null int64
description_length                        68319 non-null int64
subject_length                            68319 non-null int64
description2_length                       68319 non-null int64
Is_Description2                           68319 non-null int64
Is_Adverse_Event                          68319 non-null int64
subject_contains_common_spr_terms         68319 non-null int64
description_contains_common_spr_terms     68319 non-null int64
description2_contains_common_spr_terms    68319 non-null int64
pattern_exists_in_description             68319 non-null int64
pattern_exists_in_description_count       68319 non-null float64
pattern_exists_in_description2            68319 non-null int64
pattern_exists_in_description2_count      68319 non-null float64
subject_contains_any_synonym              68319 non-null int64
description_contains_any_synonym          68319 non-null int64
dtypes: float64(2), int64(16)
memory usage: 12.4 MB

对可能出现的问题有任何想法吗?

【问题讨论】:

  • 你能添加你的数据吗?

标签: python scikit-learn logistic-regression


【解决方案1】:

定义你使用的变量会很有帮助,或者至少用类似的东西替换数据,但我想我还是找到了你的问题。

当您执行训练测试拆分时,traintest 是数据帧,其列是从 train_cols 定义的。我假设 'SPR_Created__c' 必须包含在 train_cols 中。

您要做的是使用 test 和所有列进行预测,包括您的目标列“SPR_Created__c”。但是,您希望使用除“SPR_Created__c”之外的所有列。而不是做result.predict(test[train_cols])(这无论如何都是多余的,因为这些是test中唯一的列,所以你可以使用test而不是test[train_cols])你想做result.predict(test.drop(['SPR_Created__c']))

这就是您的形状偏离 1 的原因,因为您正在使用 train_cols 中除“SPR_Created__c”之外的所有列来训练您的模型,但您正在使用所有这些列来测试您的模型。

TL;DR:result.predict(test.drop(['SPR_Created__c'])) 而不是 result.predict(test[train_cols])

【讨论】:

    猜你喜欢
    • 2021-01-11
    • 2015-12-19
    • 2015-03-11
    • 1970-01-01
    • 2013-05-31
    • 2015-01-12
    • 2021-05-25
    • 2016-04-01
    • 2015-11-02
    相关资源
    最近更新 更多