2012-08-01 67 views
4

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

是否有任何工具,這是否對我來說,還是一個簡單的方法,通過數據進行迭代,並得到這個代表性?

+0

一個簡單的辦法是做在讀該步: http://stackoverflow.com/questions/5048638/automatically-expanding-an -r-factor-into-a-collection-of-1-indicator-variables – 2013-05-25 21:18:16

回答

4

據我所知,scikit-learn並沒有提供數據加載功能,但它更喜歡Numpy數組作爲輸入。 Numpy的loadtxt函數及其converters參數可用於加載您的csv並指定每列的類型。它沒有二元化你的第二列。

+0

那麼什麼是在scikit-learn中表示多類分類數據的正確方法?據我所知,二元化分類變量是實現它的方法。 – genekogan 2012-08-02 05:37:09

+4

是的,您必須對數據進行二進制化,以便生成的數組與float數據類型是同類的。你可以看看[DictVectorizer]的實現(http://scikit-learn.org/dev/modules/feature_extraction.html#loading-features-from-dicts)來舉例說明如何做到這一點。代碼是[here](https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/feature_extraction/dict_vectorizer.py)。 – ogrisel 2012-08-02 07:09:58

2

在這個答案中,我假設你試圖將你的CSV轉換成LibSVMLIBLINEARscikit-learn可以加載的文件。

您可以使用csv2libsvm,把作爲紅寶石寶石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,請確保您的第一列被稱爲「標籤」:

$ 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")