2017-11-14 10 views
0

나는 가우시안 프로세스 회귀 모델에 각각 맞는 많은 데이터 세트를 가지고있다. fitrgp으로 선택된 기본 하이퍼 매개 변수는 주관적으로 덜 이상적인 모델을 생성합니다. 하이퍼 매개 변수 최적화를 사용하면 의미있는 개선이 이루어 지지만 때로 극단적 인 초과 값을 생성하고 모든 모델에 대한 최적화를 어쨌든 금지하는 계산적으로 배가 고픈 프로세스입니다. fitrgp 이후기계 학습 하이퍼 매개 변수를 여러 모델에서 재사용하도록 최적화하는 방법은 무엇입니까?

단순히 여러 모델의 손실 (예를 들어, 평균)보다는 한 번에 하나 개의 모델에 대한 손실의 일부 집계를 최소화하기 위해 직접 bayesopt를 호출 할 수 있습니다, 그 hyperparameter 최적화를위한 bayesopt를 래핑?

gprMdls = cellfun(@(tbl) {fitrgp(tbl,'ResponseVarName', 'Sigma',sigma)}, tbls); 

numel(tbls) == 1 : 각 데이터 세트는 테이블 tbls의 셀 어레이에 포함되는 경우

예를 들어, 나는 각 테이블에 대해 fitrgp에 전화 부과 될 수 sigma에 대한 단일 값을 찾으려면 처리는 동등한 것 :

gprMdl = fitrgp(tbls{1},'ResponseVarName', 'OptimizeHyperparameters','auto'); 
sigma = gprMdl.Sigma; 

그러한 구현 자연스럽게 단일 시그마 값이 여러 모델의 최적화 된 결과로 연장되지 않는다.

답변

0

필자는 결국 내장 된 최적화 루틴에 직접 개입시켜 이것을 관리했습니다.

은 (edit bayesopt 통해) bayesopt의 시작에서 브레이크를 배치하고, 하나의 입력 데이터 세트와 fitrgp를 호출하여, I는 bayesopt 의해 사용되는 목적 함수는 classreg.learning.paramoptim.createObjFcn 호출로 구성되는 함수 호출 스택에서 확인할 수 있었다 . 또한 나머지 입력 인수를 캡처하여 bayesopt에 저장하여 함수 호출이 fitrgp으로 생성 된 함수와 정확히 일치하는지 확인했습니다.

classreg.learning.paramoptim.createObjFcn의 시작 부분에 중단 점을 배치하고 fitrgp으로 새로 전화를 겁니다.이 함수의 입력 인수를 캡처하고 저장할 수 있었기 때문에 여러 예측 테이블에 대한 객관적인 함수를 만들 수있었습니다. 촬상 createObjFcn 범위에 이름으로서 테이블 tbls 다른 모든 변수 내 셀 어레이

는 유지 :

전체적인 목적 함수는 다음 각 목표 함수의 평균을 취함으로써 생성 될 수
objFcns = cell(size(tbls)); 
for ii = 1:numel(tbls) 
    objFcn{ii} = classreg.learning.paramoptim.createObjFcn(... 
     BOInfo, FitFunctionArgs, tbls{ii}, Response, ... 
     ValidationMethod, ValidationVal, Repartition, Verbose); 
end 

데이터 집합 :

objFcn = @(varargin) mean(cellfun(@(f) f(varargin{:}),objFcns)); 

나는 다음 원래 통화에서 캡처 한 나머지 인수와 함께이 objFcn으로 bayesopt를 호출 할 수 있었다. 이것은 필요에 따라 하이퍼 파라미터 세트를 생성했으며 모든 데이터 세트에 대해 잘 수행되는 것으로 보입니다.