我正在准备线性回归的定价数据。我的功能仅包括一周中的几天。我的目标是价格。我已经列出了我的数据字典列表,就像sklearn 4.2.1从dicts加载功能中的示例一样。所以数据结构是[{'day': 'friday', 'price': 59}, {'day': 'saturday', 'price': 65}
等等。
我使用sklearn的DictVectorizer按照上面的链接到一周中的虚拟代码,并将数据结构转换为列表列表(适用于sklearn LinearRegression)。
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个;每周一个一个)谢谢。
答案 0 :(得分:3)
它们存在于那里,只是在您打印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个目标变量。
如果您想打印整个阵列,请查看以下问题: