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

다른 사람이 도와 주시겠습니까? 고맙습니다.

편집 : 테스트 데이터를 전달하고 학습 된 트리에서 결과를 얻는 방법? 그게 내 질문이다. 얻기 위해

aforelinked 예제의 맥락에서
int output = tree.Compute(inputs); 

,이처럼 사용할 수 있습니다

+0

나는 당신이 무엇을 요구하고 있는지 잘 모르겠습니다. 'Compile'은'var result = func (arg)'와 같은 것을 통해 호출 할 수있는 델리게이트를 반환합니다. 델리게이트는 대리자 타입이 무엇인지 명확하지 않습니다. 동적 어셈블리 생성에 대한 링크는 기본 생성 코드를 보는 방법을 설명하려고합니다. 사용자가 생성 된 코드를 이해하려고 시도하지 않는 한 사용자가 정상적으로 수행 할 수있는 작업이 아닐 수 있습니다. –

답변

1

학습 트리에서 결과를 테스트 데이터를 전달하고 얻기 위해, 당신은 단순히 the tree's Compute method 사용할 수 A (써니, 핫, 높은, 강한) 입력을위한 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); 

은/트리를 사용하기 위해 새 어셈블리를 생성합니다. 이 기능은 실시간 응용 프로그램과 같이 새 샘플을 평가할 때 절대 성능이 필요할 때 사용할 수 있습니다.