为什么一个专栏会让我的SVM花一个小时?

2024-04-20 00:06:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用sklearn.SVC文件在数据帧上预测分类数据。名为“feature\u train”的特征向量是单个时间列(数字.int64)和几千个tfidf列numpy.float64个值):

     Timestamp Start  able  acceptance  acceptance criterion  access  account  
113              646   0.0         0.0                   0.0     0.0      0.0   
342             1775   0.0         0.0                   0.0     0.0      0.0   
3                202   0.0         0.0                   0.0     0.0      0.0   
129              728   0.0         0.0                   0.0     0.0      0.0   
32               257   0.0         0.0                   0.0     0.0      0.0   
..               ...   ...         ...                   ...     ...      ...   
140              793   0.0         0.0                   0.0     0.0      0.0   
165              919   0.0         0.0                   0.0     0.0      0.0   
180             1290   0.0         0.0                   0.0     0.0      0.0   
275             1644   0.0         0.0                   0.0     0.0      0.0   
400             2402   0.0         0.0                   0.0     0.0      0.0   

作为参考,以下是我试图预测的一个名为“label\u train”的专栏:

113    14
342    17
3       1
129     0
32     12
       ..
140    15
165     1
180    15
275    12
400    14

我立即将这两个变量输入线性支持向量机:

clf = svm.SVC(kernel="linear")
clf.fit(feature_train, label_train) #<-- this takes forever

因为我使用了一个列测试分裂函数,所以索引是无序的。 当我运行这个数据帧时sklearn.SVC文件(kernel=“linear”)完成需要4275秒,但是当我删除'Timestamp Start'列时,需要6秒。此外,如果我删除所有tfidf列以便只剩下“Timestamp Start”,那么训练模型也需要很长时间。你知道吗

为什么一列整数比2000+个浮点数更难训练?这是正常的行为吗?如果这是真的,那么如果我添加剩下的3个timestamp列,那么将花费太长的时间,不值得一起使用timestamp。你知道吗


Tags: 文件数据时间trainsklearnkernelstartlabel
2条回答

答案是在0-1之间缩放列的值。较大的值会导致性能急剧下降。你知道吗

当你使用基于距离的算法,如支持向量机,你希望你的特征是正常的,所以没有特征是主导你的训练。看看罗伯托·雷夫的博客。你也会找到大量关于为什么,做什么和如何做的资源。你知道吗

https://www.robertoreif.com/blog/2017/12/16/importance-of-feature-scaling-in-data-modeling-part-1-h8nla

相关问题 更多 >