Python 使用sklearn DictVectorizer为一周中的几天生成虚拟变量

Python 使用sklearn DictVectorizer为一周中的几天生成虚拟变量,python,numpy,scikit-learn,dictvectorizer,Python,Numpy,Scikit Learn,Dictvectorizer,我正在准备线性回归的定价数据。我的特征只包括一周中的几天。我的目标是价格。我已经列出了我的数据字典,就像从dicts加载特性中的示例一样。因此,数据结构是[{'day':'friday','price':59},{'day':'saturday','price':65}等等 我在上面的链接中使用了sklearn的DictVectorizer对一周中的几天进行虚拟编码,并将数据结构转换为列表列表(适用于sklearn LinearRegression) 当我打印vec_fit以查看数据时,我得到以

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

我在上面的链接中使用了sklearn的DictVectorizer对一周中的几天进行虚拟编码,并将数据结构转换为列表列表(适用于sklearn LinearRegression)

当我打印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\u feature\u 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)感到困惑。仅供参考,当我进行
线性回归时,我只得到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.]]
它应该是
(n行,8)
。第一个值(
n行
)覆盖所有样本。第二个值(
8
)覆盖7个虚拟变量和1个目标变量

如果要打印完整阵列,请查看以下问题:


它们在那里,只是在打印
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.]]
它应该是
(n行,8)
。第一个值(
n行
)覆盖所有样本。第二个值(
8
)覆盖7个虚拟变量和1个目标变量

如果要打印完整阵列,请查看以下问题:


回答得很好Vivek:)谢谢!发帖后,我突然想到了这个想法。但后来我制作了一个包含10个功能的测试文件,当我打印出来时,没有
,所有10个功能都得到了0或1,
@vintagedeek你为testI制作了列表或numpy数组吗?我使用了sklearn 4.2.1中的测量示例。这是一个字典列表,它是每个字典都有一个城市和温度键。我添加了城市,总共有10个城市。然后我使用
DictVectorizer
创建了一个numpy数组。基本上与我对定价数据所做的相同。功能中的
…,
似乎是由数组的总长度决定的。我认为数组的总长度只导致了你在回答中突出显示的
。回答很好Vivek:)谢谢!发帖后,我突然想到了这个想法。但后来我制作了一个包含10个特性的测试文件,当我打印时,没有
,所有10个都得到了0或1,
@vintagedeek你有没有制作列表或numpy数组的列表对于testI,我使用了sklearn 4.2.1中的测量示例。这是一个字典列表,其中每个字典都有一个城市和温度键。我添加了城市,总共有10个城市。然后我使用了
DictVectorizer
并制作了一个numpy数组。基本上与我对定价数据所做的相同。似乎
…,
的hin正如你所说,这些功能是由数组的总长度产生的。我认为数组的总长度只会导致你在回答中突出显示的
…,
print(vec_fit.shape)