将分类数据从CSV导入scikit学习
我想从CSV文件导入数据以用于scikit学习。它混合了数字数据和分类数据,例如将分类数据从CSV导入scikit学习,csv,scikit-learn,Csv,Scikit Learn,我想从CSV文件导入数据以用于scikit学习。它混合了数字数据和分类数据,例如 someValue,color,someOtherValue 1.2,red,55.6 1.9,blue,20.5 3.2,red,16.5 我需要将此表示转换为纯数字表示,其中分类数据点转换为多个二进制列,例如 someValue,colorIsRed,colorIsBlue,someOtherValue 1.2,1,0,55.6 1.9,0,1,20.5 3.2,1,0,16.5 是否有任何实用程序可以为我
someValue,color,someOtherValue
1.2,red,55.6
1.9,blue,20.5
3.2,red,16.5
我需要将此表示转换为纯数字表示,其中分类数据点转换为多个二进制列,例如
someValue,colorIsRed,colorIsBlue,someOtherValue
1.2,1,0,55.6
1.9,0,1,20.5
3.2,1,0,16.5
是否有任何实用程序可以为我实现这一点,或者有一种简单的方法来迭代数据并获得此表示?据我所知,scikit learn不提供数据加载功能,但它更喜欢Numpy数组作为输入。Numpy函数及其
转换器
参数可用于加载csv并指定每列的类型。但它不会对第二列进行二值化。在这个回答中,我假设您正在尝试将CSV转换为一个文件,该文件可以加载
您可以使用csv2libsvm
,它是Ruby gem的一部分:
您需要Ruby 1.9+
$ ruby -v
ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-darwin12.2.0]
如果您没有Ruby 1.9,安装起来很容易,不需要(或建议使用)root:
成功运行gem install vector_embed
后,确保第一列名为“label”:
请注意,它同时处理分类数据和连续数据,并使用版本3生成功能名称(“colorIsBlue”对应于1089740,“colorIsRed”对应于1997960…尽管Ruby代码实际上是在散列类似“color\0red”的内容)
如果您使用的是svm,请确保按照他们在中建议的方式缩放数据
最后,假设您正在使用:
那么,在scikit learn中表示多类分类数据的正确方法是什么?据我所知,对分类变量进行二值化是一种方法。是的,您必须对数据进行二值化,以便生成的数组与浮点数据类型相同。您可以查看的实现,以获得一个关于如何实现的示例。代码是。一个简单的解决方案是在R中执行此步骤:
$ ruby -v
ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-darwin12.2.0]
$ curl -#L https://get.rvm.io | bash -s stable
$ rvm install 1.9.3
$ cat example.csv
label,color,someOtherValue
1.2,red,55.6
1.9,blue,20.5
3.2,red,16.5
$ csv2libsvm example.csv > example.libsvm
$ cat example.libsvm
1.2 1139043:55.6 1997960:1
1.9 1089740:1 1139043:20.5
3.2 1139043:16.5 1997960:1
>>> from sklearn.datasets import load_svmlight_file
>>> X_train, y_train = load_svmlight_file("/path/to/example.libsvm")