2014-10-05 94 views
2

我想在Python中使用sk-learn運行通常的線性迴歸,但我有一些分類數據,我不知道如何處理,特別是因爲我導入了數據大熊貓read.csv(),我從之前的經驗中得知,讀到熊貓和sk-learn並沒有相處得很好(還)。使用分類變量sklearn的線性迴歸

我的數據是這樣的:使用AtBat

Salary AtBat Hits League EastDivision 
475  315  81  1  0 
480  479  130  0  0 
500  496  141  1  1 

我想預測薪水,命中,聯賽和EastDivision,在聯賽和EastDivision是絕對的。

如果我通過numpy的loadtext()導入數據,我得到一個numpy數組,理論上我可以使用sklearn,但是當我使用DictVectorizer時出現錯誤。我的代碼是:

import numpy as np 
from sklearn.feature_extraction import DictVectorizer as DV 

nphitters=np.loadtxt('Hitters.csv',delimiter=',', skiprows=1) 
vec = DV(sparse = False) 
catL=vec.fit_transform(nphitters[:,3:4]) 

而我得到的錯誤,當我運行的最後一行catL=vec.fit_transform(nphitters[:,3:4]),誤差

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/dist-packages/sklearn/feature_extraction/dict_vectorizer.py", line 142, in fit_transform 
    self.fit(X) 
    File "/usr/lib/python2.7/dist-packages/sklearn/feature_extraction/dict_vectorizer.py", line 107, in fit 
    for f, v in six.iteritems(x): 
    File "/usr/lib/python2.7/dist-packages/sklearn/externals/six.py", line 268, in iteritems 
    return iter(getattr(d, _iteritems)()) 
AttributeError: 'numpy.ndarray' object has no attribute 'iteritems' 

我不知道如何解決它,而另一件事是,一旦我得到分類數據的工作,我該如何運行迴歸?就好像分類變量是另一個數字變量一樣?

我發現了幾個類似於我的問題,但他們都沒有真正爲我工作。

回答

1

基本上發生的事情是要傳遞的1和0組成的向量,將採取鍵和值(如字典)的功能,並創建一個表,你

D = [{'foo': 1, 'bar': 2}, {'foo': 3, 'baz': 1}] 

將成爲

array([[ 2., 0., 1.], 
     [ 0., 1., 3.]]) 

|bar|baz|foo |<br> 
|---|---|-----|<br> 
| 2 | 0 | 1 |<br> 
| 0 | 0 | 3 |<br> 

讀:http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.DictVectorizer.html

對於您的情況,數據已準備好進行線性迴歸,因爲功能聯盟和東區分區已經是假的了。

+0

關於熊貓和sklearn,他們在一起工作得很好。這只是一個習慣它的問題。如果你只想要價值,。數據幀末尾的值 – 2014-10-08 23:39:56

+0

是的,我後來看到我的數據已準備好;並找出了一些使sklearn和熊貓一起工作的方法。非常感謝! – 2014-10-28 22:34:57

+0

嘿,馬里奧。小心分享一個描述你可以讓Pandas和Sklearn很好地結合在一起的方式的鏈接?謝謝。 – 2017-04-03 02:24:37

2

它看起來像.fit_transform()預計dict.loadtxt()創建一個numpy數組。

在用pandas讀取數據後,您可以使用.to_dict()

0

scikit學習有兩個新的功能,這對你

sklearn.preprocessing.LabelBinarizer 
sklearn.preprocessing.LabelEncoder 

如果你想在一行中處理多個值,

sklearn.preprocessing.MultiLabelBinarizer 

做到這一點。例如:

array = [(dog, cat),(dog),(dog,fish)] 
mb = MultiLabelBinarizer() 
mb.fit_transform(array) 

>> array([1, 0, 1, 0, 0, 0], 
     [0, 1, 0, 0, 1, 1], 
     [0, 0, 1, 1, 0, 0]])