支持向量机-文本挖掘
亲爱的所有,
我正在使用线性支持向量机进行情感分析的概念验证项目。我遇到了性能问题,当训练数据集超过几千行时,这个过程——特别是SVM训练——需要很长时间才能运行,内存使用也非常高,达到> 8gb。
详情请参阅xml文件。
我不是这个领域的专家,但我的理解是SVM的一个特性是它们的学习能力可以独立于特征空间的维度,并且训练时间与记录数量成平方。
因此,我希望~20k个示例行不会因此成为问题。
我在一台不错的机器上运行Rapidminer——6核12线程——和32GB可用ram,并且在可用/适用的地方使用了并行处理。
非常感谢
尼科
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<过程version = " 6.0.002 " >
> <上下文
<输入/ >
<输出/ >
<宏/ >
> < /上下文
<过程扩展= " true " >
.
.
<列出关键= " specify_weights " / >
<过程扩展= " true " >
< /操作符>
.
.
.
> < /过程
< /操作符>
.
<列出关键= " set_additional_roles " >
< / >列表
< /操作符>
< /操作符>
“参数”<列表键= >
<参数键= " SVM(线性). c”value = "[-1.0; 10; 10;线性]" / >
< / >列表
<过程扩展= " true " >
<过程扩展= " true " >
< /操作符>
< /操作符>
/> .
.
.
> < /过程
<过程扩展= " true " >
<列出关键= " application_parameters " / >
< /操作符>
.
.
.
> < /过程
< /操作符>
<列出关键= "日志" >
<参数key="C" value="操作符。支持向量机(线性).parameter.C " / >
/> .
. .
.
> < /过程
< /操作符>
/> . .
.
.
.
.
.
.
> < /过程
< /操作符>
> < /过程
我正在使用线性支持向量机进行情感分析的概念验证项目。我遇到了性能问题,当训练数据集超过几千行时,这个过程——特别是SVM训练——需要很长时间才能运行,内存使用也非常高,达到> 8gb。
详情请参阅xml文件。
我不是这个领域的专家,但我的理解是SVM的一个特性是它们的学习能力可以独立于特征空间的维度,并且训练时间与记录数量成平方。
因此,我希望~20k个示例行不会因此成为问题。
我在一台不错的机器上运行Rapidminer——6核12线程——和32GB可用ram,并且在可用/适用的地方使用了并行处理。
非常感谢
尼科
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<过程version = " 6.0.002 " >
> <上下文
<输入/ >
<输出/ >
<宏/ >
> < /上下文
<过程扩展= " true " >
<列出关键= " specify_weights " / >
<过程扩展= " true " >
< /操作符>
> < /过程
< /操作符>
<列出关键= " set_additional_roles " >
< / >列表
< /操作符>
< /操作符>
“参数”<列表键= >
<参数键= " SVM(线性). c”value = "[-1.0; 10; 10;线性]" / >
< / >列表
<过程扩展= " true " >
<过程扩展= " true " >
< /操作符>
< /操作符>
/> .
> < /过程
<过程扩展= " true " >
<列出关键= " application_parameters " / >
< /操作符>
> < /过程
< /操作符>
<列出关键= "日志" >
<参数key="C" value="操作符。支持向量机(线性).parameter.C " / >
/> .
> < /过程
< /操作符>
/> .
> < /过程
< /操作符>
> < /过程
0
答案
SVM在样本数量上的运行时间是三次的,而不是二次的。您说得对,它是高维数据的一个很好的学习模式,但是它的运行时间随着特性数量的增加而线性增加:如果属性数量增加一倍,运行时间也会增加一倍。
这意味着对于具有许多示例的高维数据,SVM将需要一些时间。但运行时也受参数C的影响。一般来说,C越大,运行时越高。
在第一步中,您应该在*对数*(非线性)尺度上将C从0.000001优化到1。您可以在“优化参数”对话框中设置该选项。C不能为负数。
您还可以在X-Validation之后添加一个Log操作符,记录SVM的C值和X-Validation的性能值(不是performance操作符-它只提供交叉验证的最后一次折叠的准确性)。如果你看到精度朝着更高的C数增加,你应该增加它的值。否则,如果只计算到C=1,就可以跳过对更高的C值进行昂贵的计算。
支持向量机是一种由于其算法特性而不能并行化的算法。这意味着计算一个SVM只能使用一个线程。但是,您可以从市场安装并行执行扩展。它包括一个X-Validation(并行)操作符,用于并行执行其折叠。使用12个线程,您可以轻松计算X-Validation的所有10次折叠。请注意,您不应该级联不同的XXX(并行)操作符,例如优化参数(并行)和x验证(并行)。这可能导致未定义的行为。
“并行测试/训练”参数并不并行算法本身,而是并行地在流程布局中执行并行分支(例如,如果在一个Multiply操作符后面有两个流程分支)。
为了进一步加快速度,通常只使用5倍交叉验证来进行优化就足够了——对于粗略的估计来说,这就足够了,并且您仍然可以在优化后使用标准的10倍交叉验证来确认结果。此外,优化步骤的数量也可以在以后减少和细化。
最后请注意,通常X-Validation两边的步骤应该是相同的。也许您可以删除左边的标称到二项式运算符。尽管有警告,该过程应该运行正常。
请查看下面修改后的流程(尚未使用X-Validation(并行))。由于我没有你的数据,我无法测试它,但你应该能够在必要时调整它。
如果您还有任何问题,请与我们联系。额外的售前支持,请联系我们的销售团队之一//www.turtlecreekpls.com/about-us/contact-us/.
最好的问候,
马吕斯
非常感谢您详尽的回复。
我将尝试更新后的流程。我以前确实使用过X-Validation(并行),但那是与其他并行操作符结合使用的,并没有走得很远,所以这可能解释了为什么。
亲切的问候
尼科
我已经运行了编辑的进程,现在遇到内存分配障碍,因为我超过了8gb。
我正在使用的单词向量有20k个案例和大约25k个单独的单词。这对于支持向量机来说是不是太多了,你会建议某种形式的降维吗?
理想情况下,我希望使用一个更大的例子集。
谢谢
尼科
否则,您可以尝试减少样本(分层)操作符作为第一次射击的示例数量。
最好的问候,
马吕斯