Python 元组和列表操作(作为 scikit-learn 中 SVM 模型的输入)
Posted
技术标签:
【中文标题】Python 元组和列表操作(作为 scikit-learn 中 SVM 模型的输入)【英文标题】:Python Tuple & List Manipulation (As an input to the SVM model in scikit-learn) 【发布时间】:2016-03-31 23:06:30 【问题描述】:我有一个如下所示的列表:
[[(0, 0.17), (7, 0.87), (84, 0.04)]
[(0, 0.11), (3, 0.01)]
[(33, 0.56), (81, 0.22), (96, 0.04), (99, 0.97)]
...
...]
每个元组的形式为 (index, weight),其中 index 的取值范围为 0 到 99,权重的取值范围为 (0, 1]。
我想要做的是用0权重填充每个列表的缺失索引,并删除索引:
原文:
[(0, 0.17), (7, 0.87), (84, 0.04)]
变身:
[0.17, 0, 0, 0, 0, 0, 0, 0.87, ..., 0.04, ..., 0]
有没有人知道任何简单的方法来做到这一点?
另外,这是在 scikit-learn 中向 SVM 模型输入特征的最佳方式吗?
非常感谢!
【问题讨论】:
【参考方案1】:使用dict
s 和列表理解很容易做到这一点。
说你原来有
>>> orig = dict([(0, 0.17), (7, 0.87), (84, 0.04)])
并且列表的逻辑大小是 100。
做事
>>> [0 if i not in orig else orig[i] for i in range(100)]
如果您打算进一步处理与sklearn
相关的问题(例如,SVM),我建议您将其转换为numpy.array
:
>>> w = np.array([0 if i not in orig else orig[i] for i in range(100)])
【讨论】:
嗨,我还有一个问题。是否可以简单地将我的原始列表列表转换为稀疏矩阵并将其用作 SVM 模型的输入?添加这些零需要很长时间...... . 是的。但是,如果您对此有具体问题,我建议您提出一个单独的、不相关的问题。该站点并不是真正为通过 cmets 进行对话而构建的。以上是关于Python 元组和列表操作(作为 scikit-learn 中 SVM 模型的输入)的主要内容,如果未能解决你的问题,请参考以下文章