2016-12-15 4 views
0

Заранее благодарим за любые рекомендации. Я пытаюсь сделать классификацию с помощью логистической регрессии, используя scikit-learn, где X является Intercept и одно поле, которое представляет собой массив данных сердечного ритма, называемых heartrate. Основываясь на исследовании других, которые также столкнулись с этой ошибкой, я убедился, что массивы сердечных сокращений имеют одинаковую форму и размер.ValueError: установка элемента массива с последовательностью (LogisticRegression с функцией на основе массива)

Он получает ошибку значения в строке sklearn/utils/validation.py 382, ​​в файле check_array в строке, где копия dataframe выполняется через 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, check_X_y secure_min_features, warn_on_dtype, оценочная) Файл" /lib/python3.5/site-packages/sklearn/utils/validation.py ", строка 382, ​​в check_array array = np.array (array, dtype = dtype, order = order, copy = copy) ValueError: установка элемента массива с последовательностью. –

+0

Итак, 'X' - массив (29,2) объекта dtype =, а один из элементов (второй столбец) сам по себе является массивом. Не вдаваясь в подробности, я могу понять, почему он будет жаловаться на «настройку с последовательностью» - последовательность, являющаяся массивом. Является ли весь массив предполагаемой «особенностью» или каждый элемент массива отдельной особенностью? – 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) 

(а) будет генерироваться Последовательность правильной длиной
(б) Использование значения для возвращения Numpy массива вместо другого dataframe
(с) подходят делаются Inplace

+0

Цените помощь. Получение такой же ошибки в функции соответствия. ValueError в check_array. X и y выглядят так: X.shape = (29, 2) y.shape = (29,) X = [[1 массив ([74, 74, 77, ..., 0, 0, 0])] [1 массив ([66, 67, 69, ..., 0, 0, 0])] ... [1 массив ([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 learn не может обрабатывать функцию, являющуюся массивом. Вы должны включать каждый элемент массива в отдельный столбец. Это действительно должно быть сделано на уровне данных, но я включил в свое решение временное решение. – AlexG