我在机器学习scikit-learn包中使用SVM分类器进行python.我的功能是整数.当我调用fit函数时,我得到用户警告"Scaler假定浮点值为输入,得到int32",SVM返回其预测,我计算混淆矩阵(我有2个类)和预测精度.我试图避免用户警告,所以我将这些功能保存为浮动.事实上,警告消失了,但我得到了一个完全不同的混淆矩阵和预测准确度(令人惊讶的是更不准确)有人知道它为什么会发生吗?什么是可取的,我应该将功能发送为浮点数还是整数?谢谢!
你应该将它们转换为浮点数,但这样做的方式取决于整数特征实际代表什么.
你的整数是什么意思?它们是类别成员指标(例如:1 = =运动,2 = =业务,3 ==媒体,4 = =人......)或具有订单关系的数字度量(3大于2依次是大于1).例如,你不能说"人"比"媒体"大.它没有意义,会混淆机器学习算法给它这个假设.
因此,应该转换分类特征以将每个特征分解为每个可能类别的几个布尔特征(值为0.0或1.0).看看scikit 中的DictVectorizer类 - 学习如何更好地理解我的分类特征.
如果有数值只是将它们转换为浮点数,并且可能使用Scaler将它们松散地放在[-1,1]范围内.如果它们跨越几个数量级(例如,单词出现次数),那么取对数可能会产生更好的结果.有关功能预处理的更多文档以及本文档的此部分中的示例:http://scikit-learn.org/stable/modules/preprocessing.html
编辑:还阅读本指南,其中包含有关功能表示和预处理的更多详细信息:http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf
| 归档时间: |
|
| 查看次数: |
2815 次 |
| 最近记录: |