将功能转储到动态组件中

时间:2014-09-06 19:19:15

标签: c# dll decision-tree accord.net

我正在尝试学习如何使用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)

以某种方式生成此函数。在本教程中,还有一个关于如何将函数转储到动态集合中的链接,但我不确定如何使用它。这是代码:

 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");

有人可以帮我吗?谢谢。

编辑:如何传递测试数据并从学习树中获取结果?这是我的问题。

1 个答案:

答案 0 :(得分:1)

为了传递测试数据并从学习树中获取结果,您只需使用the tree's Compute method

int output = tree.Compute(inputs);

在上述示例的上下文中,您可以像这样使用它来获取(Sunny,Hot,High,Strong)输入的PlayTennis答案:

// 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);

没有必要编译/生成新程序集以使用树。当评估新样本时需要绝对性能时,可以使用此功能,例如在实时应用程序中。