如何转换嵌套列表以供在sklearn中使用?

时间:2016-07-18 17:52:36

标签: python list

我有一个很长的嵌套列表,其中每个嵌入列表可以有不同的长度或元素。我想将它展平,以便将每个变量用作模型中的预测变量。嵌套列表如下所示:

  [[u'Burgers',u'Bars'],[u'Local Services', u'Dry Cleaning & Laundry'],[u'Shopping', u'Eyewear & Opticians'],[u'Restaurants'],...]

我想要实现的是我可以用作模型中的预测器,特别是在sklearn机器学习中。列表中的元素应该用于预测感兴趣的变量,即分数。转换的期望结果如

[[1, 1, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 1], ...]

有人可以帮助我如何进行这种转变吗?我很困在这里。谢谢。

2 个答案:

答案 0 :(得分:1)

您可以先展平列表,然后从展平列表中为各种构建得分,通过将1分配给在给定子列表中找到的值(称为category)和0,如果找不到,则使用嵌套列表理解

Y是要预测的类的原始列表:

from itertools import chain

Y = [[u'Burgers',u'Bars'],[u'Local Services', u'Dry Cleaning & Laundry'],[u'Shopping', u'Eyewear & Opticians'],[u'Restaurants']]

classes = list(chain.from_iterable(Y))

scores = [[1 if c in category else 0 for c in classes] for category in Y]
print(scores)
# [[1, 1, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 1]]

答案 1 :(得分:1)

熊猫的做法是:

import pandas as pd
L = [['Burgers', 'Bars'], ['Local Services', 'Dry Cleaning & Laundry'], ['Shopping', 'Eyewear & Opticians'], ['Restaurants']]

ser = pd.Series([';'.join(i) for i in L]).str.get_dummies(';')

enter image description here

您可以使用.values

获取数组
ser.values
array([[1, 1, 0, 0, 0, 0, 0],
       [0, 0, 1, 0, 1, 0, 0],
       [0, 0, 0, 1, 0, 0, 1],
       [0, 0, 0, 0, 0, 1, 0]], dtype=int64)   

这假设您在这些字符串中没有; - 您可以使用其他分隔符更改它。对于scikit-learn,您通常使用OneHotEncoder,但这也需要一些预处理(标签编码优先),所以使用pandas似乎更容易。