【问题标题】:How to convert numpy array into libsvm format如何将numpy数组转换为libsvm格式
【发布时间】:2014-12-18 00:18:55
【问题描述】:

我有一个图像的 numpy 数组,并试图将其转储为 LABEL I0:V0 I1:V1 I2:V2..IN:VN 的 libsvm 格式。我看到 scikit-learn 有一个 dump_svmlight_file 并希望尽可能使用它,因为它经过优化且稳定。

它接受参数 X、y 和文件输出名称。我正在考虑的价值观是: X - numpy 数组 你 - ???? 文件输出名称 - 不言自明

这是对 X 的正确假设吗?我很困惑我应该为你做些什么。 看来它需要是某种功能集。但是,我不知道我将如何获得它。提前感谢您的帮助!

【问题讨论】:

    标签: python arrays numpy svm libsvm


    【解决方案1】:

    svmlight 格式是为分类/回归问题量身定制的。因此,数组X 是一个矩阵,其行数与集合中的数据点一样多,列数与特征一样多。 y 是实例标签的向量。

    例如,假设您有 1000 个对象(例如自行车和香蕉的图像),具有 400 个维度的特征。 X 将是 1000x400,y 将是一个 1000 向量,其中应该有自行车的条目为 1,应该有香蕉的条目为 -1。

    【讨论】:

    • 这让事情变得更加清晰。所以我有 500 张图片 *6 类 = 3000 张图片。我将它们从 JPEG 图像转换为 numpy 数组,所以我假设我的 X 为 3000x3(3 来自 RGB 尺寸)。我仍然对我的 y 会是什么感到困惑。有没有一种简单的方法可以将其扩展到 6 个类,或者我是否必须为标记类中的每个类做类似 1 if class1 else -1 的事情?
    • 好吧,让我们退后一步……你最终想要做什么?您是否尝试在数据上训练多类分类器?您是否有理由导出数据,而不仅仅是使用sklearn.SVC? SVM 是一个二元分类器,这意味着它实际上只处理两类情况(尽管有一些泛化可以处理更多类)。人们通常做的是训练几个一对多或一对一的分类器,然后汇总结果。
    • 我正在尝试训练一个多类分类器,是的。我尝试导出它的原因是为了测试我在 libsvm 中的 easy.py 文件中设置的数据,以测试单个类的准确性,因为我在这方面没有经验。理想情况下,我想使用sklearn.SVC。我对自己的技能没有足够的信心来扩展它并自己找到 C 和 y,以及交叉验证结果。您会向完全的初学者推荐什么?
    • 我想我会建议坚持使用 sklearn。这是一个非常好的软件包,并且有完整的文档记录。页面here 列出了几个示例,例如this,应该会有所帮助。一般来说,我会先尝试使用线性内核,因为它更难过拟合并且只有一个参数C。然后您可以尝试使用 RBF 内核进行试验。 sklearn 也有交叉验证和参数选择的例子。
    • 非常感谢您的宝贵建议!只是为了让我明白这一点,我必须从 JPEG -> numpy array [R,G,B] -> sklearn Scale -> (我假设我在这里得到 y。我仍然对如何得到它感到困惑. 见最后一句) -> sklearn Fit -> sklearn Predict -> sklearn Score。对于 y:由于我有一个图像数组,例如)[[255,255,255]、[47,123,23]、[191,63,132]],一旦缩放后这将是 X,我将如何从中收集 y?
    猜你喜欢
    • 2017-10-10
    • 2017-03-19
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 2017-06-08
    • 2020-02-04
    • 2021-12-18
    • 2021-06-09
    相关资源
    最近更新 更多