我的目标是将正则化调整后的加减法(通常用于篮球分析中以衡量篮球运动员对比赛的贡献)应用于越野比赛。我有一个庞大的数据集,其中有成千上万个课程的100万跑步者的1000万表现。在我的情况下,这是跑步者对球场的比赛,每场比赛都是短暂的比赛。
我需要创建一个矩阵,当有跑步者在场时为1,在特定的表演过程中为1,其余0为目标变量作为跑步者在该路线上录制的时间。然后,我需要将其作为输入传递给回归模型。
我的数据框如下所示,分为3列:运动员ID,课程ID和时间-请注意,我实际上有1000万行:
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)))
这将返回错误“ TypeError:无法使用灵活类型执行归约”
我期望:
(a1,c1) 111
(a2,c3) 222
(a3,c3) 333
(a1,c5) 444
(a4,c4) 555
(a3,c5) 666
(a2,c3) 777
我从未使用过这种格式,但我假设上面的预期输出是坐标,该坐标将是1,而其他所有地方都是0。如果是这样,我需要弄清楚下一件事情如何将其输入到具有测试/训练拆分的回归模型中。换句话说,如何在模型中调用变量x和y。