将分类列添加到预测模型

时间:2018-11-21 11:51:59

标签: python pandas numpy scikit-learn data-science

我得到了一个客户数据框以及有关他们活动的信息,并且我建立了一个模型来预测他们是否购买产品。我的标签是“ did_buy”列,如果客户购买,则分配1,否则分配0。我的模型考虑了数字列,但我也想将类别列添加到预测模型中,但我不确定如何转换它们并在我的X训练中使用它们。这是我的数据框列的一瞥:

Company_Sector         Company_size  DMU_Final  Joining_Date  Country
Finance and Insurance       10        End User   2010-04-13   France
Public Administration       1         End User   2004-09-22   France

更多列:

linkedin_shared_connections   online_activity  did_buy   Sale_Date
            11                        65           1      2016-05-23
            13                        100          1      2016-01-12

2 个答案:

答案 0 :(得分:0)

您有不同的选择将类别变量转换为数值或二进制变量。 例如,数据框中的国家/地区列具有不同的值(例如,法国,中国,...)。您可以将它们转换为数值变量的解决方案之一是: {法国:1,中国:2,....}

#import libraries
from sklearn import preprocessing
import pandas as pd
#Create a label encoder object and fit to Country Column
label_encoder = preprocessing.LabelEncoder()
label_encoder.fit(df['Country'])
# View the label {France,China,...}
list(label_encoder.classes_)
# Transform Country Column to Numerical Var
label_encoder.transform(df['Country']) 
# Convert some integers into their category names --->{China,China,France}
list(label_encoder.inverse_transform([2, 2, 1]))

答案 1 :(得分:0)

让我建议您首先确定哪些分类变量是序数(顺序计数,例如好,很好,不好等),哪些是名义变量(顺序与颜色无关)。对于序数,您可以按以下方式使用地图:

    Category
0   Excellent
1   Excellent
2   Bad
3   Good
4   Bad
5   Very Good
6   Very Bad

df.Category = df.Categoy.map({'Excellent':5, 'Very Good':4, 
                              'Good':3, 'Fair':2, 'Bad':1, 'Very Bad':0})

    Category
0   5
1   5
2   1
3   3
4   1
5   4
6   0

对于名义变量,您可以实现虚拟变量方法。例: 假设您的分类变量具有两个值“ Native”和“ Foreign”。您可以创建一个名为“ Native”的列,该列的“ 1”代表本机,0代表“外国”。可以针对多个类别实施。

data = pd.DataFrame({"Origin": ['Native', 'Native', 'Foreign', 'Native', 'Foreign']})

    Origin
0   Native
1   Native
2   Foreign
3   Native
4   Foreign

data['Native'] = pd.get_dummies(data['Origin'], drop_first=True)
data.drop("Origin", axis = 1, inplace = True)

这将导致:

    Native
0   1
1   1
2   0
3   1
4   0