2014-04-15 50 views
1

剛開始使用ML,需要一些幫助讓sklearn與熊貓一起工作。讓scikit學習與熊貓一起工作

http://scikit-learn.org/stable/modules/feature_selection.html#feature-selection-as-part-of-a-pipeline

我讀這一點,決定了數據幀,我不得不嘗試一下。以下是我所做的,以及來自它的錯誤。我對所有這些都很陌生,所以如果我忽略了一些愚蠢的東西,請原諒我,但我認爲最好在這裏問一下,而不要試圖在沒有真正理解的情況下找到答案。

謝謝你們!

In [518]: cols = ['A','B','C','D','E','F','G','H','I','J','K'] 

In [519]: x = df['Miss'].values 

In [520]: y = df[list(cols)].values 

In [532]: y.shape 
Out[532]: (11345, 11) 

In [533]: x.shape 
Out[533]: (11345,) 

clf = Pipeline([ 
    ('feature_selection', LinearSVC(penalty="l1", dual=False)), 
    ('classification', RandomForestClassifier())]) 

In [536]: clf.fit(x,y) 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
/home/cschwalbach/as_research_repo/logs/<ipython-input-536-5c1831092d7a> in <module>() 
----> 1 clf.fit(x,y) 

/usr/lib64/python2.7/site-packages/sklearn/pipeline.pyc in fit(self, X, y, **fit_params) 
    124   data, then fit the transformed data using the final estimator. 
    125   """ 
--> 126   Xt, fit_params = self._pre_transform(X, y, **fit_params) 
    127   self.steps[-1][-1].fit(Xt, y, **fit_params) 
    128   return self 

/usr/lib64/python2.7/site-packages/sklearn/pipeline.pyc in _pre_transform(self, X, y, **fit_params) 
    114   for name, transform in self.steps[:-1]: 
    115    if hasattr(transform, "fit_transform"): 
--> 116     Xt = transform.fit_transform(Xt, y, **fit_params_steps[name]) 
    117    else: 
    118     Xt = transform.fit(Xt, y, **fit_params_steps[name]) \ 

/usr/lib64/python2.7/site-packages/sklearn/base.pyc in fit_transform(self, X, y, **fit_params) 
    362   else: 
    363    # fit method of arity 2 (supervised transformation) 

--> 364    return self.fit(X, y, **fit_params).transform(X) 
    365 
    366 

/usr/lib64/python2.7/site-packages/sklearn/svm/base.pyc in fit(self, X, y) 
    684    raise ValueError("X and y have incompatible shapes.\n" 
    685        "X has %s samples, but y has %s." % 
--> 686        (X.shape[0], y.shape[0])) 
    687 
    688   liblinear.set_verbosity_wrap(self.verbose) 

ValueError: X and y have incompatible shapes. 
X has 1 samples, but y has 124795. 
+3

模型相信scikit學習API,通常是'* .fit(X,Y)''那裏是X'的具有'N'觀測值'和'd'特徵的'N×d'陣列。所以你想交換你的'x'和'y'。你應該重新定義它們與其他人一致,而不是'clf.fit(y,x)'。 – TomAugspurger

+0

是的,這看起來像是問題所在。讓我們知道是否修復它。 – eickenberg

+0

太愚蠢了!非常感謝你們!我很高興這很容易,而不是更難。 @larsmans,我不需要轉換任何東西 – user1610719

回答

2

大多數人使用X作爲特徵,y作爲標籤。不幸的是,你有相反的方式。所以你可能會在文檔中感到困惑。

使用以下代替

In [519]: y = df['Miss'].values 

In [520]: X = df[list(cols)].values 

然後你就可以通過適合clf.fit(X, y)