支持向量机-文本挖掘

尼科尼科 成员职位:3.贡献我
2019年6月编辑 帮助
亲爱的所有,

我正在使用线性支持向量机进行情感分析的概念验证项目。我遇到了性能问题,当训练数据集超过几千行时,这个过程——特别是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 " / >
/> .


. .

.
> < /过程
< /操作符>


/> . .
.
.
.
.
.

.

> < /过程
< /操作符>
> < /过程

答案

  • MariusHelfMariusHelf RapidMiner认证专家,会员职位:1869年独角兽
    嗨,尼克,

    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/

    最好的问候,
    马吕斯
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <过程version = " 6.0.002 " >
    > <上下文
    <输入/ >
    <输出/ >
    <宏/ >
    > < /上下文


    <过程扩展= " true " >




    .
    .
    <列出关键= " specify_weights " / >

    <过程扩展= " true " >






    < /操作符>




    .


    .
    .
    > < /过程
    < /操作符>



    .
    <列出关键= " set_additional_roles " >

    < / >列表
    < /操作符>



    < /操作符>

    “参数”<列表键= >
    .
    < / >列表

    <过程扩展= " true " >

    .


    <过程扩展= " true " >




    < /操作符>



    < /操作符>
    /> .


    .
    .
    > < /过程
    <过程扩展= " true " >

    <列出关键= " application_parameters " / >
    < /操作符>



    .



    .
    .
    > < /过程
    < /操作符>

    <列出关键= "日志" >
    <参数key="C" value="操作符。支持向量机(线性).parameter.C " / >

    < / >列表
    < /操作符>



    . .

    .
    > < /过程
    < /操作符>


    /> . .
    .
    .
    .
    .
    .

    .

    > < /过程
    < /操作符>
    > < /过程
  • 尼科尼科 成员职位:3.贡献我
    嗨,马吕斯,

    非常感谢您详尽的回复。
    我将尝试更新后的流程。我以前确实使用过X-Validation(并行),但那是与其他并行操作符结合使用的,并没有走得很远,所以这可能解释了为什么。

    亲切的问候
    尼科
  • 尼科尼科 成员职位:3.贡献我
    嗨,马吕斯,

    我已经运行了编辑的进程,现在遇到内存分配障碍,因为我超过了8gb。
    我正在使用的单词向量有20k个案例和大约25k个单独的单词。这对于支持向量机来说是不是太多了,你会建议某种形式的降维吗?
    理想情况下,我希望使用一个更大的例子集。


    谢谢
    尼科
  • MariusHelfMariusHelf RapidMiner认证专家,会员职位:1869年独角兽
    你在使用并行化吗?当然,在这种情况下,内存消耗乘以线程数量,您应该尝试使用更少的并发线程。
    否则,您可以尝试减少样本(分层)操作符作为第一次射击的示例数量。

    最好的问候,
    马吕斯
登录注册置评。