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】:

使用dicts 和列表理解很容易做到这一点。

说你原来有

>>> 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 模型的输入)的主要内容,如果未能解决你的问题,请参考以下文章

Python中的元组和列表

python关于列表元组和字符串的有关操作

python自学笔记13:元组和字典的操作

python学习—元组和列表

Python在函数中使用*和**接收元组和列表

Python在函数中使用*和**接收元组和列表