使用 sklearn DictVectorizer 为一周中的几天制作虚拟变量
Making dummy variables for days of week using sklearn DictVectorizer
我正在为线性回归准备定价数据。我的功能仅包含一周中的几天。我的目标是价格。我已经列出了我的数据的字典,就像 sklearn 4.2.1 从字典加载功能中的示例一样。所以数据结构是[{'day': 'friday', 'price': 59}, {'day': 'saturday', 'price': 65}
等等。
我根据上述 link 使用 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 个;一周中的每一天一个)谢谢。
它们在那里,只是在您打印 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 个目标变量。
如果你想打印完整的数组,那么请看这些问题:
- How to print the full NumPy array?
- Python prints "..." in very large output
我正在为线性回归准备定价数据。我的功能仅包含一周中的几天。我的目标是价格。我已经列出了我的数据的字典,就像 sklearn 4.2.1 从字典加载功能中的示例一样。所以数据结构是[{'day': 'friday', 'price': 59}, {'day': 'saturday', 'price': 65}
等等。
我根据上述 link 使用 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 个;一周中的每一天一个)谢谢。
它们在那里,只是在您打印 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 个目标变量。
如果你想打印完整的数组,那么请看这些问题:
- How to print the full NumPy array?
- Python prints "..." in very large output