LIBSVM 数据准备:将 Excel 数据转换为 LIBSVM 格式
Posted
技术标签:
【中文标题】LIBSVM 数据准备:将 Excel 数据转换为 LIBSVM 格式【英文标题】:LIBSVM Data Preparation: Excel data to LIBSVM format 【发布时间】:2017-03-19 02:45:47 【问题描述】:我想研究如何执行 LIBSVM 进行回归,我目前正忙于准备数据。目前我有这种 .csv 和 .xlsx 格式的数据,我想把它转换成 libsvm 数据格式。
到目前为止,我了解数据应该是这种格式,以便可以在 LIBSVM 中使用:
根据我阅读的内容,对于回归,“标签”是可以是任何实数的目标值。
我正在进行电力负荷预测研究。谁能告诉我它是什么?最后,我应该如何组织我的列和行?
【问题讨论】:
【参考方案1】:LIBSVM 数据格式由下式给出:
如您所见,这形成了一个矩阵 [(IndexCount + 1) 列,LineCount 行]。更准确地说是一个稀疏矩阵。如果您为 each index
指定一个值,则您有一个 dense 矩阵,但如果您只指定几个索引,如 <label> <5:value> <8:value>
,则只有索引 5
和8
当然label
将有一个自定义值,所有其他值都设置为0
。这只是为了符号简单或节省空间,因为数据集可能很大。
对于标签的含义,我引用ReadMe file:
如您所见,label
是您要预测的数据。 index
标记您的数据及其value
的功能。特征只是与您的目标值相关联或关联的指标,因此可以做出更好的预测。
完全虚构故事时间:Gabriel Luna(一个完全虚构的角色)想要预测他未来几天的能量消耗。他发现,前一天的室外温度是一个很好的指标,因此他选择索引为1
的Temperature
作为特征。 重要提示: 索引总是从一开始,零有时会导致奇怪的 LIBSVM 行为。然后,他惊讶地注意到,一周中的某一天(周一到周日或 0
到 6
)也会影响他的负载,因此他选择它作为第二个功能,索引为 2
. LIBSVM 的矩阵行现在具有以下格式:
<myLoad_Value> <1:outsideTemperatureFromYesterday_Value> <2:dayOfTheWeek_Value>
Gabriel Luna(他是夜间的蝙蝠侠)现在在几周内捕获这些数据,可能看起来像这样(负载以 kWh 为单位,温度以°C 为单位,如上所述的白天):
0.72 1:25 2:0
0.65 1:21 2:1
0.68 2:29 2:2
...
注意,由于 稀疏矩阵 格式,我们可以省略 2:0
。这将是您训练 LIBSVM 模型的训练数据。然后,我们预测明天的负载如下。你知道今天的温度,让我们说23
°C,今天是星期二,即1
,所以明天是2
。所以,这是与模型一起使用的线或向量:
0 1:23 2:2
在这里,您可以任意设置<label>
的值。它将被预测值覆盖。我希望这会有所帮助。
【讨论】:
哇!非常感谢这个非常全面的解释.. 我对 libsvm 的数据格式一无所知,但这真的帮助我理解它.. 非常感谢! 网络上最好的解释之一。当我尝试使用 SVM 构建模型时,libSVM 格式有何重要意义?我不能只是缩放数据并通过算法运行它以获得经过训练的模型吗? @thatguy,我想我遗漏了一些东西......索引特征对应关系是否保存在不同的文件中?对我来说,libsvm 文件中只使用任意索引似乎很奇怪......以上是关于LIBSVM 数据准备:将 Excel 数据转换为 LIBSVM 格式的主要内容,如果未能解决你的问题,请参考以下文章
在带有 Excel 数据的 Matlab 中使用 lbsvm