Как исправить ошибку HPCC ECL Learning Trees: у объекта «типы» нет элемента с именем «t_Work-Item»?

#machine-learning #classification #ecl #hpcc-ecl

#машинное обучение #классификация #ecl #hpcc-ecl

Вопрос:

Я пытаюсь использовать HPCC ML_Core и библиотеку LearningTree для классификации некоторых данных. Все данные являются числовыми, а зависимая переменная представляет собой целое число без знака. Независимо от того, что я делаю, я получаю одну и ту же ошибку «Объект ‘types’ не имеет члена с именем ‘t_Work_Item’ «.

Местоположение ошибки даже не указано в моем файле. Он находится в файле с именем RF_Base.ecl.

Я не могу понять, как исправить эту ошибку.

Я использовал это руководство для настройки своего кода: https://hpccsystems.com/blog/HPCC-Sytems-Machine-Learning .

Это сообщения об ошибках, которые я получаю:

Ссылка на изображение: https://i.imgur.com/4WxElRJ.jpg

Я переместил файл, над которым работаю, в тот же файл, что и пакеты, которые я установил, чтобы посмотреть, поможет ли размещение моего файла в том же месте, что и библиотека, но это не помогло.

Ошибка возникает в строке 62: myLearnerC := LT.ClassificationForest();

 IMPORT ML_Core, std;
IMPORT ML_Core.Discretize;
IMPORT LearningTrees AS LT;

articles_layout := RECORD
    INTEGER articleID;
    UNSIGNED INTEGER sectionName; //dependent variable I'm trying to classify
    INTEGER newsDesk; //newsDesk to key9 are independent variables I'm using to classify the section name
    INTEGER key1;
    INTEGER key2;
    INTEGER key3;
    INTEGER key4;
    INTEGER key5;
    INTEGER key6;
    INTEGER key7;
    INTEGER key8;
    INTEGER key9; //not all key attributes have data, some are empty
END;

all_articles := DATASET('~online::hjj::parsed_articles_reordered', articles_layout, CSV) : PERSIST('online::hjj::all_articles');
//all_articles[1..40];

known_articles := all_articles(sectionName != 25);
//known_articles[1..40];

unknown_articles := all_articles(sectionName = 25) : PERSIST('online::hjj::unknown_articles');
//unknown_articles[1..40];


articles_layout_ext := RECORD(articles_layout)
  UNSIGNED4 RND;
END;

articles_ext := PROJECT(known_articles, TRANSFORM(articles_layout_ext, SELF.rnd := RANDOM(), SELF := LEFT));

articles_shuffled := SORT(articles_ext, rnd);

training_articles := PROJECT(articles_shuffled[1..2330], articles_layout) : PERSIST('online:hjj::training_articles');
//training_articles[1..30];

testing_articles := PROJECT(articles_shuffled[2331..2923], articles_layout) : PERSIST('online:hjj::testing_articles');
//testing_articles[1..30];

ML_Core.ToField(training_articles, training_articles_NF);
training_articles_NF[1..50];

ML_Core.ToField(testing_articles, testing_articles_NF);
testing_articles_NF[1..50];

myIndTrainDataNF := training_articles_NF(number > 1);

myDepTrainDataNF := PROJECT(training_articles_NF(number = 1), TRANSFORM(RECORDOF(LEFT), SELF.number := 1, SELF := LEFT));

myIndTestDataNF := training_articles_NF(number > 1);

myDepTestDataNF := PROJECT(testing_articles_NF(number = 1), TRANSFORM(RECORDOF(LEFT), SELF.number := 1, SELF := LEFT));

myDepTrainDataDF := Discretize.ByRounding(myDepTrainDataNF);

myDepTestDataDF := Discretize.ByRounding(myDepTestDataNF);

//PROBLEM STATEMENT HERE
myLearnerC := LT.ClassificationForest();

myModelC := myLearnerC.GetModel(myIndTrainDataNF, myDepTrainDataDF);

predictedClasses := myLearnerC.Classify(myModelC, myIndTestDataNF) : PERSIST('online::hjj::predicted_classes');

assessmentC := ML_Core.Analysis.Classification.Accuracy(predictedClasses, myDepTestDataDF) : PERSIST('online::hjj::assessment');
 

Ошибка находится в строке 14 файла RF_Base.ecl

 IMPORT $.^ AS LT;
IMPORT LT.Internal AS int;
IMPORT LT.LT_Types as Types;
IMPORT ML_Core as ML;
IMPORT ML.Types AS CTypes;
IMPORT std.system.Thorlib;
IMPORT ML_Core.ModelOps2;

GenField := Types.GenField;
ModelStats := Types.ModelStats;

//ERROR HERE
t_Work_Item := CTypes.t_Work_Item;

t_Count := CTypes.t_Count;
t_RecordId := CTypes.t_RecordID;
t_FieldNumber := CTypes.t_FieldNumber;
t_TreeId := t_FieldNumber;
Layout_Model := CTypes.Layout_Model;
wiInfo := Types.wiInfo;
TreeNodeDat := Types.TreeNodeDat;
NumericField := CTypes.NumericField;
DiscreteField := CTypes.DiscreteField;
Layout_Model2 := CTypes.Layout_Model2;
FeatureImportanceRec := Types.FeatureImportanceRec;
nfNull := DATASET([], NumericField);
 

Действительно не уверен, как исправить эту проблему. Заранее спасибо.

Ответ №1:

Что здесь происходит?

1- Ваш код завершается с ошибкой, потому что LearningTrees (LT) завершается с ошибкой:

 IMPORT LearningTrees AS LT;
[...]
myLearnerC := LT.ClassificationForest();
 

2- LearningTrees использует RF_Base.ecl, который не создается из-за ошибок.

3- Файлы RF_Base.ecl содержат 3 синтаксические ошибки в строках 14, 19 и 24… таким образом, он не создан.

РЕШЕНИЕ: «Исправьте RF_Base.ecl, и все должно работать».

Легко сказать, но сложно сделать.

Я клонировал:

  • ML_Core
  • ecl-ml
  • LearningTrees

…и RF_Base.ecl и работает.

Что вы должны попробовать?

  • Убедитесь, что вы клонировали все 3 библиотеки
  • Проверьте, чтобы путь был похож на мой:

введите описание изображения здесь