LibSVM 输入格式

Posted

技术标签:

【中文标题】LibSVM 输入格式【英文标题】:LibSVM Input format 【发布时间】:2011-07-14 13:49:09 【问题描述】:

我想在一个文件中表示一组带标签的实例(数据),作为训练数据输入 LibSVM。对于this问题中提到的问题。它将包括,

    登录日期 登录时间 位置(国家代码?) 星期几 真实性(0 - 非真实性,1 - 真实性)- 标签

如何格式化这些数据以输入到 SVM?

【问题讨论】:

位置和 IP 地址重叠,因此您可能只想选择其中之一(实验找出哪个最好)。 你不需要从问题中删除它:) 【参考方案1】:

您是询问数据格式还是如何转换数据?对于后者,您将不得不尝试找到正确的方法来做到这一点。总体思路是将您的数据转换为名义或有序值属性。其中一些很简单——#4、#6——其中一些会很困难——#1-#3。

例如,您可以将 #1 表示为日、月和年的三个属性,或者通过将其转换为类似 UNIX 的时间戳来仅表示一个。

IP 更加困难 - 没有直接的方法可以将其转换为有意义的序数值。根据您的问题,使用每个 IP 作为名义属性可能没有用。

一旦你弄清楚这一点,转换你的数据,检查 LibSVM 文档。一般格式后跟:即+1 1:0 2:0 ..

【讨论】:

IP 地址等于用户以前的(或最常见的)IP 地址可能是一个很好的功能,并且只是二进制。 所以.. 我应该能够使用日期(dd/mm/yyyy)、时间(hh:mm - 24h 格式)、位置(国家代码 - 为简单起见)、日期本周(0-6),真实性(1或0)来实现这一点..我不应该吗? 您将无法使用任何非数字格式,例如日期 - 这里的区别是您有 3 个维度(日/月/年)与一个维度(自 1972 年以来的秒数)。无论哪种方式,您都必须进行转换。 这里的问题是,我需要 SVM 来识别涉及星期几和一天中时间(例如星期五 0830h 或星期日 1845h)的模式(关系),使用起来会更灵活吗从午夜开始的时间而不是 UNIX 时间戳? 是的。如果您有大量数据,请不要害怕包含冗余维度。让 SVM 做你想做的事更像是一门艺术,而不是一门科学,你必须尝试找出最有效的方法。【参考方案2】:

我相信之前的答案中有一个未说明的假设。未说明的假设是 libSVM 的用户知道他们应该避免将分类数据放入分类器中。

例如,libSVM 不知道如何处理国家代码。如果您试图预测哪些访问者最有可能在您的网站上购买商品,那么如果美国在您的国家代码列表中位于乍得和尼日尔之间,您可能会遇到问题。来自美国的隆起可能会扭曲对位于它附近的国家的预测。

为了解决这个问题,我将为正在考虑的每个国家/地区创建一个类别(也许还有一个“其他”类别)。然后对于您要分类的每个实例,我会将所有国家/地区类别设置为零,但该实例所属的类别除外。 (要使用 libSVM 稀疏文件格式执行此操作,这并不是什么大问题)。

【讨论】:

以上是关于LibSVM 输入格式的主要内容,如果未能解决你的问题,请参考以下文章

遇到和错误:尝试使用带有 LibSVM 的预计算内核时出现“错误的输入格式:sample_serial_number 超出范围”

将数据帧转换为 libsvm 格式

如何从 libSVM 中使用的数据集转换为 weka 中使用的格式数据(*.arff 或 *.csv)

如何在 libsvm 训练代码中输入示例图像

使用 LibSVM 进行分类

将带有分类数据的 csv 转换为 libsvm