在 scikit 学习中使用分类预测变量
Using Categorical Predictor Variables in sci-kit learn
这里是基本问题:
我正在尝试为信用卡违约实施一个简单的分类模型,我只对输入数据使用 model.fit
、model.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><class 'pandas.core.frame.DataFrame'>
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)是 nominal/ordinal 并且需要编码为分类变量而不是 int64 变量。
我如何使用 scikit-learn 的预处理模块对这 3 个变量进行编码,以将这些特征正确地输入到逻辑回归等模型中?
提前致谢,请原谅格式(随意编辑或推荐我如何正确地将 Jupyter Notebook 输出包含到 Stack Overflow post)。
分类特征在特征工程中需要更多关注,因为年龄、日期等特征很难编码。有很多方法可以通过分析、领域知识等来编码这些特征。
有一个库 category_encoders,它有很多功能可以通过使用统计来编码这些特征。您可以在这里找到更多 http://contrib.scikit-learn.org/categorical-encoding/
这里又是一个好东西resource,它会通过一个例子向你展示编码方法的使用。
这里是基本问题:
我正在尝试为信用卡违约实施一个简单的分类模型,我只对输入数据使用 model.fit
、model.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><class 'pandas.core.frame.DataFrame'>
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)是 nominal/ordinal 并且需要编码为分类变量而不是 int64 变量。
我如何使用 scikit-learn 的预处理模块对这 3 个变量进行编码,以将这些特征正确地输入到逻辑回归等模型中?
提前致谢,请原谅格式(随意编辑或推荐我如何正确地将 Jupyter Notebook 输出包含到 Stack Overflow post)。
分类特征在特征工程中需要更多关注,因为年龄、日期等特征很难编码。有很多方法可以通过分析、领域知识等来编码这些特征。
有一个库 category_encoders,它有很多功能可以通过使用统计来编码这些特征。您可以在这里找到更多 http://contrib.scikit-learn.org/categorical-encoding/
这里又是一个好东西resource,它会通过一个例子向你展示编码方法的使用。