2014-09-06 2 views
2

Я пытаюсь узнать, как использовать схему Accord для работы с деревьями решений в C#. Я следую этому руководству: LINK. Пока я понимаю, как это работает, но я застрял после изучения и компиляции дерева. Я использую тот же код, как в учебнике, так что я нахожусь здесь:Демпинговая функция в динамическую сборку

// Convert to an expression tree 
    var expression = tree.ToExpression(); 

    // Compiles the expression to IL 
    var func = expression.Compile(); 

Теперь я хотел бы знать, как получить доступ к этой функции (она также в учебнике).

public static int Compute(double[] input) 

Эта функция как-то сгенерирована. В учебнике также есть ссылка о том, как сбрасывать функцию в сборку dynamicall, но я не уверен, как ее использовать. Вот код:

var da = AppDomain.CurrentDomain.DefineDynamicAssembly(
new AssemblyName("dyn"), // call it whatever you want 
AssemblyBuilderAccess.Save); 

var dm = da.DefineDynamicModule("dyn_mod", "dyn.dll"); 
var dt = dm.DefineType("dyn_type"); 
var method = dt.DefineMethod(
"Foo", 
MethodAttributes.Public | MethodAttributes.Static); 

lambda.CompileToMethod(method); 
dt.CreateType(); 

da.Save("dyn.dll"); 

Может кто-нибудь помочь мне в этом? Спасибо.

EDIT: Как передать тестовые данные и получить результат из полученного дерева? Это мой вопрос.

+0

Я не совсем уверен, что вы просите. 'Compile' возвращает делегат, который вы можете вызвать через нечто вроде' var result = func (arg) '(его непонятно, какой тип делегата). Я думаю, что ссылка на создание динамической сборки пытается объяснить, как смотреть на сгенерированный код. Вероятно, это не то, что пользователь обычно делал бы, если вы не пытаетесь понять сгенерированный код. –

ответ

1

Для того, чтобы пройти тестовые данные и получить результат от изученного дерева, вы можете просто использовать the tree's Compute method:

int output = tree.Compute(inputs); 

В контексте aforelinked Например, вы можете использовать его, как это для того, чтобы получить ответ PlayTennis для (Солнечный, Hot, High, Strong) вход:

// Convert the (Sunny, Hot, High, Strong) to a feature vector 
double[] inputs = codebook.Translate("Sunny", "Hot", "High", "Strong"); 

// Compute the tree's output for the given feature vector 
int output = tree.Compute(inputs); 

// Convert the generated output into one of the problem's outcomes: 
string answer = codebook.Translate("PlayTennis", y); 

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

Смежные вопросы