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
您将如何使用每行有 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