我正在阅读the documentation for XGBoost,特别是创建CSR / CSC格式的DMatrix。文档不是很有帮助:
To load sparse matrix in CSR/CSC format is a little complicated,
the usage is like : suppose a sparse matrix : 1 0 2 0 4 0 0 3 3 1 2 0
目前尚不清楚上述假设是什么意思,也不清楚这是如何映射到标准耶鲁格式A, IA, JA
向量的。所以我尝试从Agaricus测试数据集(以libSVM格式)加载第一行
0 1:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
我按如下方式创建了一个DMatrix:
DMatrix dMatrix = new DMatrix(new long[] {0},
new int[] {1, 9, 19, 21, 24, 34, 36, 39, 42, 53, 56, 65, 69, 77, 86, 88, 92, 95, 102, 106, 117, 122},
new float[] {1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f},
DMatrix.SparseType.CSC, 1);
但这并没有给出任何明智的答案,应该是4.941254E-4,但它给出了0.5。
我在这里做错了什么,以及如何以稀疏DMatrix的形式向XGBoost呈现单行?
答案 0 :(得分:1)
回答我自己的问题:
这将有效:
DMatrix dMatrix = new DMatrix(new long[] {0, 22},
new int[] {1, 9, 19, 21, 24, 34, 36, 39, 42, 53, 56, 65, 69, 77, 86, 88, 92, 95, 102, 106, 117, 122},
new float[] {1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f},
DMatrix.SparseType.CSR, 123);
换句话说,要对单个观察进行分类,headers
应该有2个条目,0和非零指数(IA),indices
是索引列表(JA), data
是非零值列表(A),在这种情况下类型是CSR,shapeParam是列的总数(在这种情况下为agaricus.txt的123)。