我正在尝试学习如何使用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");
有人可以帮我吗?谢谢。
编辑:如何传递测试数据并从学习树中获取结果?这是我的问题。
答案 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);
没有必要编译/生成新程序集以使用树。当评估新样本时需要绝对性能时,可以使用此功能,例如在实时应用程序中。