【问题标题】:importing categorical data from CSV into scikit-learn将分类数据从 CSV 导入 scikit-learn
【发布时间】:2012-07-30 21:38:03
【问题描述】:

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

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

【问题讨论】:

标签: csv scikit-learn


【解决方案1】:

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

【讨论】:

  • 那么在 scikit-learn 中表示多类分类数据的正确方法是什么?据我所知,将分类变量二值化是一种方法。
  • 是的,您必须对数据进行二值化,以便生成的数组与浮点数据类型是同质的。您可以查看DictVectorizer 的实现以获取有关如何执行此操作的示例。代码是here
【解决方案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\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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-16
    • 2015-02-24
    • 2018-01-27
    • 1970-01-01
    • 2015-03-07
    • 2017-01-09
    • 2012-07-12
    • 2015-12-09
    相关资源
    最近更新 更多