在sci-kit学习中使用分类预测变量

时间:2019-01-10 23:04:47

标签: python machine-learning scikit-learn classification categorical-data

这里的基本问题:

我正在尝试为信用卡默认设置实现一个简单的分类模型,其中我仅对输入数据使用model.fitmodel.predict。但是,该输入数据既包含类别数据(例如年龄,已婚或未婚的人口统计信息,受教育程度)又包括连续数据(例如贷方余额)。

data.info()

<div class="output"><div class="output_area"><div class="run_this_cell"></div><div class="prompt"></div><div class="output_subarea output_text output_stream output_stdout"><pre>&lt;class 'pandas.core.frame.DataFrame'&gt;
Int64Index: 30000 entries, 1 to 30000
Data columns (total 24 columns):
LIMIT_BAL    30000 non-null float64
SEX          30000 non-null int64
EDUCATION    30000 non-null int64
MARRIAGE     30000 non-null int64
AGE          30000 non-null int64
PAY_1        30000 non-null int64
PAY_2        30000 non-null int64
PAY_3        30000 non-null int64
PAY_4        30000 non-null int64
PAY_5        30000 non-null int64
PAY_6        30000 non-null int64
BILL_AMT1    30000 non-null float64
BILL_AMT2    30000 non-null float64
BILL_AMT3    30000 non-null float64
BILL_AMT4    30000 non-null float64
BILL_AMT5    30000 non-null float64
BILL_AMT6    30000 non-null float64
PAY_AMT1     30000 non-null float64
PAY_AMT2     30000 non-null float64
PAY_AMT3     30000 non-null float64
PAY_AMT4     30000 non-null float64
PAY_AMT5     30000 non-null float64
PAY_AMT6     30000 non-null float64
default      30000 non-null int64
dtypes: float64(13), int64(11)
memory usage: 5.7 MB
</pre></div></div></div>

据我所知,scikit-learn要求所有数据都是数字和连续的,或者专门编码为分类变量。数字部分不是问题,因为我的所有数据都是数字编码的(例如0代表已婚,1代表非婚姻),但是我的3个变量(SEX,Education和MARRIAGE)是标称/有序的,需要编码为类别变量而不是int64。

我如何使用scikit-learn的预处理模块对这3个变量进行编码,以将这些功能正确地输入模型(如Logistic回归)中?

在此先感谢您,请原谅格式(随意编辑或建议我如何正确地将Jupyter Notebook输出包括到Stack Overflow帖子中。)

1 个答案:

答案 0 :(得分:1)

分类特征在特征工程中需要引起更多关注,因为诸如年龄,日期等特征很难编码。有很多方法可以通过分析,域知识等对这些功能进行编码。

有一个库 category_encoders ,该库具有许多功能,可通过使用统计信息对这些功能进行编码。您可以在这里找到更多http://contrib.scikit-learn.org/categorical-encoding/

这是另一个不错的resource,它将通过示例向您展示编码方法的使用。