регрессионный анализ с разреженной матрицей на большом наборе данных - PullRequest
0 голосов
/ 30 октября 2019

Моя цель - применить регуляризованный скорректированный метод плюс / минус (обычно используемый в аналитике баскетбола для измерения вклада игроков в баскетбол в их игру) для бега по пересеченной местности. У меня есть большой набор данных из 10 миллионов выступлений бегунов из 1 миллиона на тысячах курсов. В моем сценарии это «бегун против курса», и каждая гонка - это ограничение.

Мне нужно создать матрицу с 1, когда присутствует бегун, и 1 для конкретного хода выступления, а остальные 0 сцелевая переменная как время, которое бегун записал на этом курсе. Затем мне нужно передать это как входные данные для регрессионной модели.

Мой фрейм данных выглядит следующим образом с 3 столбцами: athleteID, courseID и time - обратите внимание, что у меня на самом деле 10M строк:

df = pd.DataFrame([['a1','c1', 111],
               ['a2','c3', 222],
               ['a3','c3', 333],
               ['a1','c5', 444],
               ['a4','c4', 555],
               ['a3','c5', 666],
               ['a2','c3', 777]], columns=['aid','cid','T'])

Я могу использовать следующее в моих примерах данных и получить желаемый результат:

df=pd.get_dummies(df,columns=['aid','cid'],prefix_sep='',prefix='')
df
Out[113]: 
     T  a1  a2  a3  a4  c1  c3  c4  c5
0  111   1   0   0   0   1   0   0   0
1  222   0   1   0   0   0   1   0   0
2  333   0   0   1   0   0   1   0   0
3  444   1   0   0   0   0   0   0   1
4  555   0   0   0   1   0   0   1   0
5  666   0   0   1   0   0   0   0   1
6  777   0   1   0   0   0   1   0   0

Но если я попробую это на моем фактическом наборе данных, то произойдет сбой. Поэтому я попробовал следующее:

import scipy.sparse as sps
df_matrix = sps.csr_matrix((df.T, (df.aid, df.cid)))

Это возвращает ошибку «Ошибка типа: невозможно выполнить уменьшение с гибким типом»

Я ожидал:

(a1,c1) 111
(a2,c3) 222
(a3,c3) 333
(a1,c5) 444
(a4,c4) 555
(a3,c5) 666
(a2,c3) 777

I 'Мы никогда не работали с этим форматом, но я предполагаю, что ожидаемый результат выше - это координаты, где будет 1, а везде - 0. Если так, то следующее, что мне нужно выяснить, это как ввести этов регрессионную модель с разделением тест / поезд. Другими словами, как вызывать переменные x & y в модели.

...