Реализация кода SPLAM Java в R с использованием rJava - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь реализовать разреженную частично линейную аддитивную модель (SPLAM) из Инструментария машинного обучения Инь Лу (https://github.com/yinlou/mltk, написано в Java) в R, используя r Java.

В Java документация (https://github.com/yinlou/mltk/wiki/Generalized-Additive-Models#splam) говорит, что вы должны делать:

SPLAMLearner learner = new SPLAMLearner();
learner.setNumKnots(10);
learner.setMaxNumIters(100);
learner.setAlpha(0.6);
learner.setLambda(0.1);
learner.setTask(Task.REGRESSION);

GAM gam = learner.build(trainSet);

Пока у меня есть следующий код в R:

library(rJava)
.jinit()

.jaddClassPath("/Users/USER/mltk/mltk/target/mltk-0.1.0-SNAPSHOT.jar")

learner <- new(J("mltk.predictor.gam.SPLAMLearner"))

learner$setNumKnots(10L)
learner$setMaxNumIters(100L)
learner$setAlpha(0.6)
learner$setLambda(0.1)

У меня есть несколько вопросов:

  1. Имеет ли learner$setNumKnots(10L) тот же эффект в R, что и learner.setNumKnots(10) в Java? Если нет, то как мне сделать это вместо этого?
  2. Запуск .jmethods (ученик) в R, я нахожу следующие методы относительно setTask: "public mltk.predictor.Learner$Task mltk.predictor.gam.SPLAMLearner.getTask()" и "public void mltk.predictor.gam.SPLAMLearner.setTask(mltk.predictor.Learner$Task)". В банке также есть класс mltk.predictor.Learner. Как бы я go добился эквивалентного выполнения learner.setTask(Task.REGRESSION)?
  3. Для набора данных существует класс, который генерирует trainSet с использованием текстового файла с матрицей данных и текстового файла атрибута. Однако я не понимаю формат файла атрибутов. В документации говорится, что структура описания атрибута равна attribute_name: type [(target)|(x)], и в качестве примера для следующего файла данных
f1: cont (x)
f2: {a, b, c}
f3: binned (256) 
f4: binned (3;[1, 5, 6];[0.5, 2.5, 5.5])
label: cont (target) 

приводится также

. 1037 *

Атрибуты, указанные в «(x)», будут пропущены. Существует два типа атрибутов binned. Один указывается с использованием количества бинов, а другой - с использованием количества бинов, верхних границ и медиан для каждого бина.

Я не совсем понимаю attribute_name: type [(target)|(x)] или пример. Какие атрибуты есть? f2: {a, b, c} и f3: binned (256) не соответствуют заданной структуре атрибутов. Как это работает?

Извините за очень открытые вопросы - я совершенно новичок в Java, поэтому на данном этапе я просто пытаюсь выяснить, какие вопросы даже задавать.

...