4

我想从 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

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

4

2 回答 2

4

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

于 2012-08-01T23:40:11.303 回答
2

在这个答案中,我假设您正在尝试将 CSV 转换为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\ 0红色”)。

如果您使用的是支持向量机,请务必按照他们在“支持向量机分类的实用指南”中的建议来扩展您的数据。

最后,假设您正在使用scikit-learnsvmlight/libsvm 加载程序

>>> from sklearn.datasets import load_svmlight_file
>>> X_train, y_train = load_svmlight_file("/path/to/example.libsvm")
于 2013-04-02T01:46:41.380 回答