我有一个很长的嵌套列表,其中每个嵌入列表可以有不同的长度或元素。我想将它展平,以便将每个变量用作模型中的预测变量。嵌套列表如下所示:
[[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], ...]
有人可以帮助我如何进行这种转变吗?我很困在这里。谢谢。
答案 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(';')
您可以使用.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似乎更容易。