为什么 Spark MLLib 中决策树的输入 LibSVM dat 格式看起来像这样?

Why does the input LibSVM dat format for Decision Tree in Spark MLLib look like this?

我正在查看 Spark MLLib 中决策树的文档。下面是一行代码

data = MLUtils.loadLibSVMFile(sc, 'data/mllib/sample_libsvm_data.txt')

加载输入数据。当我打开 sample_libsv_data.txt 文件时,其中一行看起来像:

0 128:51 129:159 130:253 131:159 132:50 155:48 156:238 157:252 158:252 159:252 160:237 182:54 183:227 184:253 185:252 186:239 187:233 188:252 189:57 190:6 208:10 209:60 210:224 211:252 212:253 213:252 214:202 215:84 216:252 217:253 218:122 236:163 237:252 238:252 239:252 240:253 241:252 242:252 243:96 244:189 245:253 246:167 263:51 264:238 265:253 266:253 267:190 268:114 269:253 270:228 271:47 272:79 273:255 274:168 290:48 291:238 292:252 293:252 294:179 295:12 296:75 297:121 298:21 301:253 302:243 303:50 317:38 318:165 319:253 320:233 321:208 322:84 329:253 330:252 331:165 344:7 345:178 346:252 347:240 348:71 349:19 350:28 357:253 358:252 359:195 372:57 373:252 374:252 375:63 385:253 386:252 387:195 400:198 401:253 402:190 413:255 414:253 415:196 427:76 428:246 429:252 430:112 441:253 442:252 443:148 455:85 456:252 457:230 458:25 467:7 468:135 469:253 470:186 471:12 483:85 484:252 485:223 494:7 495:131 496:252 497:225 498:71 511:85 512:252 513:145 521:48 522:165 523:252 524:173 539:86 540:253 541:225 548:114 549:238 550:253 551:162 567:85 568:252 569:249 570:146 571:48 572:29 573:85 574:178 575:225 576:253 577:223 578:167 579:56 595:85 596:252 597:252 598:252 599:229 600:215 601:252 602:252 603:252 604:196 605:130 623:28 624:199 625:252 626:252 627:253 628:252 629:252 630:233 631:145 652:25 653:128 654:252 655:253 656:252 657:141 658:37

我能理解第一个元素是class标签(0),我知道决策树算法,但我不明白为什么每个特征都像一个元组?我们不应该只有代表特征的数字吗?这里128:51作为特征值是什么意思?

128:51 作为特征值在这里表示第 128 列中有值 51。这是 svmlight 中首次引入的 SVMLight 格式,适合表示稀疏向量。所有未按名称提及的索引都从列表中省略,这些特征的值为 0。换句话说,在您的示例中,从 1 到 127 的所有列都是 0。

注意:像上面这样的Spark稀疏向量中列的索引是从0开始的。所以,有一个索引为0的列,0:100是SVMLight格式中可能的条目。