【问题标题】:Making dummy variables for days of week using sklearn DictVectorizer使用 sklearn DictVectorizer 为一周中的几天制作虚拟变量
【发布时间】:2018-05-25 16:33:15
【问题描述】:

我正在为线性回归准备定价数据。我的特征只包含一周中的几天。我的目标是价格。我已经为我的数据制作了一个字典列表,就像sklearn 4.2.1 从字典中加载功能中的示例一样。所以数据结构是[{'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 个;一周中的每一天一个)谢谢。

【问题讨论】:

    标签: python numpy scikit-learn dictvectorizer


    【解决方案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.]]
    

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

    print(vec_fit.shape)
    

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

    如果你想打印完整的数组,那么请看这些问题:

    【讨论】:

    • 很好的答案 Vivek :)
    • 谢谢!发完之后,这个念头就在我脑海里浮现。但是后来我制作了一个包含 10 个功能的测试文件,当我打印时,没有..., 的所有十个功能都得到了 0 或 1
    • @vintagedeek 您是否为测试制作了列表列表或 numpy 数组
    • 我使用了 sklearn 4.2.1 中的测量示例。它是一个字典列表,其中每个字典都有一个城市和温度键。我添加了城市,总共有 10 个城市。然后我使用 DictVectorizer 并制作了一个 numpy 数组。与我对定价数据所做的基本相同。正如您所说,特征中的..., 似乎是由数组的总长度引起的。我认为数组的总长度只会导致您在答案中突出显示的...,
    猜你喜欢
    • 2018-02-28
    • 1970-01-01
    • 2013-07-16
    • 2020-07-07
    • 2013-02-17
    • 2014-02-20
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    相关资源
    最近更新 更多