XGBOOST:多维数组作为模型的输入

XGBOOST: Multiple dimension array as input to model

您将如何使用每行有 4 个矩阵的数据集训练模型? 下面是一个最小的可重现示例,其中包含要训练的(2 行,4 个矩阵,3 X 6 矩阵)数据集。

import numpy as np
import xgboost as xgb
# from scipy.sparse import csr_matrix
x =   [np.array([[[ 985. ,  935. ,  396. ,   258.5,  268. ,  333. ],
         [ 968. , 1000. , 1048. ,   237.5,  308.5,  359.5],
         [ 350. ,  336. ,  422. ,   182.5,  264.5,  291.5]],
 
        [[ 867. ,  863. ,  512. ,   511. ,  485.5,  525. ],
         [ 917. ,  914. ,  739. ,   450. ,  524.5,  571. ],
         [ 663. ,  656. ,  768. ,   352.5,  460. ,  439. ]],
 
        [[ 569. ,  554. ,  269. ,   240. ,  240. ,  263.5],
         [ 597. ,  592. ,  560. ,   222. ,  244.5,  290. ],
         [ 390. ,  377. ,  457. ,   154.5,  289.5,  272. ]],
 
        [[2002. , 2305. , 3246. ,  3586.5, 3421.5, 3410. ],
         [2378. , 2374. , 1722. ,  3351.5, 3524. , 3456. ],
         [3590. , 3457. , 3984. ,  2620. , 2736.5, 2290. ]]]),
        
 np.array([[[ 412. ,  521. ,  642. ,   735. ,  847.5,  358.5],
         [ 471. ,  737. ,  558. ,   331.5,  324. ,  317.5],
         [ 985. ,  935. ,  396. ,   258.5,  268. ,  333. ]],
 
        [[ 603. ,  674. ,  786. ,   966. , 1048. ,  605.5],
         [ 657. ,  810. ,  789. ,   582. ,  573. ,  569.5],
         [ 867. ,  863. ,  512. ,   511. ,  485.5,  525. ]],
 
        [[ 325. ,  426. ,  544. ,   730.5,  804.5,  366.5],
         [ 396. ,  543. ,  486. ,   339.5,  334. ,  331. ],
         [ 569. ,  554. ,  269. ,   240. ,  240. ,  263.5]],
 
        [[3133. , 3808. , 3617. ,  4194.5, 4098. , 3802. ],
         [3479. , 3488. , 3854. ,  3860. , 3778.5, 3643. ],
         [2002. , 2305. , 3246. ,  3586.5, 3421.5, 3410. ]]])]
    
y = [np.array(6), np.array(10)]

这是将矩阵转换为 DMatrix 的尝试,但会导致错误。 我也尝试过其他解决方案,例如使用 csr_matrix。

一个解决方案可能是: (2 行,4 个矩阵,3 X 6 矩阵) 至
(2 行,~10 长度) 通过对矩阵应用降维并重塑它? 不确定这是否是最佳解决方案?

# X = csr_matrix(x)
dtrain_xbg = xgb.DMatrix(x, label=y)

params = {'max_depth': 3, 'learning_rate': .05, 'min_child_weight' : 4, 'subsample' : 0.8}
model = xgb.train(dtrain=dtrain_xbg, params=params,num_boost_round=200)

将数组重塑为数据帧

data = pd.concat([pd.DataFrame(x[i].reshape(4,x[i][0].shape[0]*x[i][0].shape[1]).reshape(1,x[i].reshape(4,x[i][0].shape[0]*x[i][0].shape[1]).shape[0]*x[i].reshape(4,x[i][0].shape[0]*x[i][0].shape[1]).shape[1])) for i in range(len(x))], ignore_index=True)

将数据帧从 100K 列减少到 100 列

from sklearn.decomposition import PCA
pca = PCA(n_components=100)
principalComponents = pca.fit_transform(pca_data.fillna(0))
principalDf = pd.DataFrame(data = principalComponents)
principalDf