SVM整数功能

时间:2012-09-02 11:03:53

标签: svm scikit-learn

我在机器学习scikit-learn包中使用SVM分类器进行python。 我的功能是整数。当我调用fit函数时,我得到用户警告“Scaler假定浮点值为输入,得到int32”,SVM返回其预测,我计算混淆矩阵(我有2个类)和预测精度。 我试图避免用户警告,所以我将这些功能保存为浮动。实际上,警告消失了,但我得到了一个完全不同的混淆矩阵和预测准确度(令人惊讶的是更不准确) 有人知道它为什么会发生吗?什么是可取的,我应该将功能发送为浮点数还是整数? 谢谢!

1 个答案:

答案 0 :(得分:8)

你应该将它们转换为浮点数,但这样做的方式取决于整数特征实际代表的含义。

整数是什么意思?它们是类别成员指标(例如:1 = =运动,2 = =业务,3 ==媒体,4 = =人......)或具有订单关系的数字度量(3大于2依次是大于1)。例如,你不能说“人”比“媒体”大。它没有意义,会混淆机器学习算法给它这个假设。

因此,应该转换分类特征,将每个特征作为几个布尔特征(值为0.0或1.0)分解为每个可能的类别。看看scikit中的DictVectorizer class - 学习如何更好地理解我的分类特征。

如果有数值,只需将它们转换为浮点数,也可以使用Scaler将它们松散地放在[-1,1]范围内。如果它们跨越几个数量级(例如,单词出现次数),则取对数的对数可能会产生更好的结果。有关功能预处理的更多文档以及本文档此部分中的示例:http://scikit-learn.org/stable/modules/preprocessing.html

修改:还请阅读本指南,其中包含有关功能表示和预处理的更多详细信息:http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf