【问题标题】:Python Tuple & List Manipulation (As an input to the SVM model in scikit-learn)Python 元组和列表操作(作为 scikit-learn 中 SVM 模型的输入)
【发布时间】: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 模型输入特征的最佳方式吗?

非常感谢!

【问题讨论】:

    标签: python-2.7 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 进行对话而构建的。
    猜你喜欢
    • 2017-10-11
    • 2014-07-11
    • 2015-06-26
    • 2013-04-21
    • 2020-11-05
    • 2017-02-24
    • 2012-08-31
    • 2015-12-23
    • 2017-04-05
    相关资源
    最近更新 更多