Моя цель - применить регуляризованный скорректированный метод плюс / минус (обычно используемый в аналитике баскетбола для измерения вклада игроков в баскетбол в их игру) для бега по пересеченной местности. У меня есть большой набор данных из 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 в модели.