使用Sklearn dictectorizer在几天的几天中进行虚拟变量



我正在准备线性回归的定价数据。我的功能仅包括一周中的几天。我的目标是价格。我已经列出了数据的字典列表,就像Sklearn 4.2.1中的示例中的示例一样。因此数据结构是[{'day': 'friday', 'price': 59}, {'day': 'saturday', 'price': 65}等。

我根据上述链接使用Sklearn的DICTVECTORIZER,该链接在本周的日子上使用了虚拟代码,并将数据结构转换为列表列表(适用于Sklearln LinearRegress)。

vec = DictVectorizer()
vec_fit = vec.fit_transform(my_data).toarray()

当我打印vec_fit以查看数据时,我将获得下面的输出。

[[   0.    0.    0. ...,    0.    1.   59.]
 [   0.    0.    0. ...,    0.    0.   92.]
 [   1.    0.    0. ...,    0.    0.   92.]
 ...,
 [   0.    0.    1. ...,    0.    0.  181.]
 [   0.    0.    0. ...,    0.    0.  181.]
 [   0.    1.    0. ...,    0.    0.  181.]]

有人可以解释(a) ...,和(b)为什么一周的几天没有7个虚拟变量?在我的示例中,...,似乎涵盖了周日和星期四。

要检查我的功能(每个Sklearn 4.2.1),我使用了get_feature_names功能。

vec.get_feature_names()
[u'day=Friday', u'day=Monday', u'day=Saturday', u'day=Sunday', 
 u'day=Thursday', u'day=Tuesday', u'day=Wednesday', 'price']

如输出所示,所有日子似乎都得到了适当的代表。我仍然感到困惑:(a)和(b)上面。仅供参考,当我做LinearRegression时,我只能获得6个系数(我期望每天有7个系数;一周中的一个)。

它们在那里,只是打印vec_fit时没有显示。它是打印大数组时Numpy的默认行为。仅显示数据的前3列和最后3列以及前3行和最后3行。

[[   0.    0.    0. ...,    0.    1.   59.]
 [   0.    0.    0. ...,    0.    0.   92.]
 [   1.    0.    0. ...,    0.    0.   92.]
 ..., <=== This is for all intermediate data values present. Just not printed
 [   0.    0.    1. ...,    0.    0.  181.]
 [   0.    0.    0. ...,    0.    0.  181.]
 [   0.    1.    0. ...,    0.    0.  181.]]

您可以通过检查数组的形状来确认所有数据都存在。

print(vec_fit.shape)

应该是(n_rows, 8)。第一个值(n_rows)涵盖了您的所有样本。第二个值(8)涵盖了您的7个虚拟变量和1个目标变量。

如果要打印完整的数组,请查看以下问题:

  • 如何打印完整的numpy数组?
  • python打印" ..."在很大的输出中

相关内容

  • 没有找到相关文章

最新更新