将分类数据从CSV导入scikit-learn

时间:2012-08-01 22:40:54

标签: csv scikit-learn

我想从CSV文件导入数据以用于scikit-learn。它混合了数值数据分类数据,例如

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

是否有任何实用程序可以为我执行此操作,或者是一种简单的方法来迭代数据并获得此表示形式?

2 个答案:

答案 0 :(得分:4)

据我所知,scikit-learn不提供数据加载功能,但它确实更喜欢Numpy数组作为输入。 Numpy的loadtxt函数及其converters参数可用于加载csv并指定每列的类型。但它不会将您的第二列二值化。

答案 1 :(得分:2)

在此回答中,我假设您尝试将CS​​V转换为LibSVMLIBLINEARscikit-learn可以加载的文件。

您可以使用csv2libsvm,它是作为Ruby gem vector_embed的一部分提供的:

$ gem install vector_embed
Successfully installed vector_embed-0.1.0
1 gem installed

你需要Ruby 1.9 + ...

$ ruby -v
ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-darwin12.2.0]

如果您没有Ruby 1.9,则可以使用rvm轻松安装,但不需要(或建议使用)root:

$ curl -#L https://get.rvm.io | bash -s stable
$ rvm install 1.9.3

成功运行gem install vector_embed后,请确保您的第一列名为“label”:

$ 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

请注意,它处理分类和连续数据,并使用MurmurHash版本3生成要素名称(“colorIsBlue”对应于1089740,“colorIsRed”为1997960 ...虽然Ruby代码是真的哈希像“color \ 0red”)。

如果您使用的是svm,请务必按照"A practical guide to SVM classification"中建议的方式扩展数据。

最后,假设您正在使用scikit-learn's svmlight/libsvm loader

>>> from sklearn.datasets import load_svmlight_file
>>> X_train, y_train = load_svmlight_file("/path/to/example.libsvm")