2016-12-15 76 views
0

預先感謝您提供任何指導。我試圖通過使用scikit-learn進行Logistic迴歸分類,其中X是Intercept,而一個字段是一組心臟數據,稱爲heartrate。基於研究其他誰也面臨這個錯誤,我已經確定心臟陣列都是相同的形狀/大小。ValueError:使用序列設置數組元素(LogisticRegression使用基於數組的元素)

它獲取sklearn/utils/validation.py行382中的值錯誤,在check_array中通過array = np.array(array,dtype = dtype,order = order,複製=副本)。我懷疑我的數組不是在內存中連續的,那正是喬裝的問題,但不知道...

下面是一些代碼剪斷,它能夠幫助偵探出了問題:

def get_training_set(self): 
     training_set = [] 
     after_date = datetime.utcnow() - timedelta(weeks=8) 
     before_date = datetime.utcnow() - timedelta(hours=12) 
     activities = self.strava_client.get_activities(after=after_date, before=before_date) 
     for act in activities: 
      if act.has_heartrate: 
       streams = self.strava_client.get_activity_streams(activity_id=act.id, types=['heartrate']) 
       heartrate = np.array(list(filter(lambda x: x is not None, streams['heartrate'].data))) 
       fixed_heartrate = np.pad(heartrate, (0, 15000 - len(heartrate)), 'constant') 
       item = {'activity_type': self.classes.index(act.type),'heartrate': fixed_heartrate} 
       training_set.append(item) 
     return pd.DataFrame(training_set) 

    def train(self): 
     df = self.get_training_set() 
     df['Intercept'] = np.ones((len(df),)) 
     y = df[['activity_type']] 
     X = df[['Intercept', 'heartrate']] 
     y = np.ravel(y) 
     # 
     model = LogisticRegression() 
     self.debug('y={}'.format(y)) 
     model = model.fit(X,y) 

異常發生在適合...

在此先感謝您的任何指導。

尊重,

邁克

從改進的格式化評論複製:

/python3.5/site-packages/sklearn/linear_model/logistic.py", line 1173, in 
    fit order="C") 
File "/python3.5/site-packages/sklearn/utils/validation.py", line 521, in 
    check_X_y ensure_min_features, warn_on_dtype, estimator) 
File "/lib/python3.5/site-packages/sklearn/utils/validation.py", line 382, in 
    check_array array = np.array(array, dtype=dtype, order=order, copy=copy) 
ValueError: setting an array element with a sequence 

和其他評論:

X和Y是這樣的:

X.shape=(29, 2) 
y.shape=(29,) 
X=[[1 array([74, 74, 77, ..., 0, 0, 0])] 
    [1 array([66, 67, 69, ..., 0, 0, 0])] 
    ...   
    [1 array([92, 92, 91, ..., 0, 0, 0])] 
    [1 array([79, 79, 79, ..., 0, 0, 0])]] 
y=[ 0 11 11 0 1 0 11 0 11 1 0 11 0 0 11 0 0 0 0 0 11 0 11 0 0 0 11 0 0] 
+0

的問題是在'fit'你做.... ?????編輯您的問題,以便提供關於錯誤及其位置的真實和清晰的信息。如果錯誤不明顯,我們將需要足夠的信息來自己重新創建問題。 – hpaulj

+0

錯誤發生在模型的擬合函數中。堆疊如下: 「/python3.5/site-packages/sklearn/linear_model/logistic.py」,第1173行,適合 order =「C」) 文件「/python3.5/site-packages/sklearn/ utils/validation.py「,第521行,in check_X_y ensure_min_features,warn_on_dtype,estimator) check_array中的文件」/lib/python3.5/site-packages/sklearn/utils/validation.py「,第382行 array = np.array(array,dtype = dtype,order = order,copy = copy) ValueError:使用序列設置數組元素。 –

+0

所以'X'是一個(29,2)dtype = object的數組,其中一個元素(第二列)本身就是一個數組。沒有深入細節,我可以明白爲什麼它會抱怨'用序列設置' - 序列是數組。整個數組是否應該是一個「特徵」,或者數組中的每個元素是一個單獨的特徵? – hpaulj

回答

0

如果你改變火車(),所以看起來像這樣嗎?

def train(self): 
    df = self.get_training_set() 
    df['Intercept'] = 1      # (a) 
    y = df['activity_type'].values   # (b) 
    X = [np.concatenate((np.array([col1]), col2)) for col1, col2 in df[['Intercept', 'heartrate']].values.T] 
    model = LogisticRegression() 
    model.fit(X,y)       # (c) 

(a)中,將產生正確長度的序列
(b)利用值來代替返回另一個數據幀
(c)中配合完成的numpy的陣列就地

+0

欣賞幫助。在擬合函數中獲得相同的錯誤。在check_array中的ValueError。 X和y看起來像這樣: X.shape =(29,2) y.shape =(29,) X = [[1陣列([74,74,77,...,0,0, 0]]] [1 array([66,67,69,...,0,0,0])] ... [1 array([92,92,91,...,0, 0,0])] [1陣列([79,79,79,...,0,0,0])]]] y = [0 11 11 0 1 0 11 0 11 1 0 11 0 0 11 0 0 0 0 0 11 0 11 0 0 0 11 0 0] –

+0

單個特徵能夠是矢量數組還是整行需要是一個數組?我第一次使用數組作爲特徵... :) –

+0

這是一個問題 - scikit學習不能處理數組的特徵。您應該將數組的每個元素包含在單獨的列中。這應該是在數據框級完成的,但我在回答中包含了一個臨時解決方案 – AlexG

相關問題