如何在Scikit-Learn中重复使用LabelBinarizer进行输入预测

时间:2017-10-09 23:12:20

标签: python pandas machine-learning scikit-learn

我使用Scikit-Learn训练了一个分类器。我正在加载输入以从CSV训练我的分类器。我的一些专栏(例如' Town')的价值是规范的(例如,可以是'纽约''巴黎''斯德哥尔摩' ;,...)。为了使用这些规范列,我使用Scikit-Learn的LabelBinarizer进行 one-hot encoding

这是我在训练前转换数据的方法:

import pandas as pd
from sklearn.preprocessing import LabelBinarizer

headers = [ 
    'Ref.', 'Town' #,...
]

df = pd.read_csv("/path/to/some.csv", header=None, names=headers, na_values="?")

lb = LabelBinarizer()
lb_results = lb.fit_transform(df['Town'])

然而,我不清楚如何使用LabelBinarizer使用我想做预测的新输入数据来创建特征向量。特别是,如果新数据包含看到的城镇(例如纽约),则需要在训练数据中与同一城镇编码在同一地点。

如何在新输入数据上重新应用标签二值化?

(我不会对Scikit-Learn有强烈的感觉,如果有人知道如何使用Pandas和get_dummies方法做得很好。)

1 个答案:

答案 0 :(得分:4)

对于已经过培训的lb.transform()模型,只需使用lb

演示:

假设我们有以下列车DF:

In [250]: df
Out[250]:
           Town
0      New York
1        Munich
2          Kiev
3         Paris
4        Berlin
5      New York
6  Zaporizhzhia

适合(火车)&转换(二值化)一步:

In [251]: r1 = pd.DataFrame(lb.fit_transform(df['Town']), columns=lb.classes_)

收率:

In [252]: r1
Out[252]:
   Berlin  Kiev  Munich  New York  Paris  Zaporizhzhia
0       0     0       0         1      0             0
1       0     0       1         0      0             0
2       0     1       0         0      0             0
3       0     0       0         0      1             0
4       1     0       0         0      0             0
5       0     0       0         1      0             0
6       0     0       0         0      0             1

lb现已接受我们在df

中所拥有的城镇的培训

现在我们可以使用经过培训的lb模型(使用lb.transform())对新数据集进行二值化:

In [253]: new
Out[253]:
       Town
0    Munich
1  New York
2     Dubai  # <--- new (not trained) town

In [254]: r2 = pd.DataFrame(lb.transform(new['Town']), columns=lb.classes_)

In [255]: r2
Out[255]:
   Berlin  Kiev  Munich  New York  Paris  Zaporizhzhia
0       0     0       1         0      0             0
1       0     0       0         1      0             0
2       0     0       0         0      0             0