나는 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");
다른 사람이 도와 주시겠습니까? 고맙습니다.
편집 : 테스트 데이터를 전달하고 학습 된 트리에서 결과를 얻는 방법? 그게 내 질문이다. 얻기 위해
aforelinked 예제의 맥락에서int output = tree.Compute(inputs);
,이처럼 사용할 수 있습니다
나는 당신이 무엇을 요구하고 있는지 잘 모르겠습니다. 'Compile'은'var result = func (arg)'와 같은 것을 통해 호출 할 수있는 델리게이트를 반환합니다. 델리게이트는 대리자 타입이 무엇인지 명확하지 않습니다. 동적 어셈블리 생성에 대한 링크는 기본 생성 코드를 보는 방법을 설명하려고합니다. 사용자가 생성 된 코드를 이해하려고 시도하지 않는 한 사용자가 정상적으로 수행 할 수있는 작업이 아닐 수 있습니다. –