Main Content

random

일반화 선형 회귀 모델에 대해 랜덤 잡음이 있는 응답 변수 시뮬레이션하기

설명

예제

ysim = random(mdl,Xnew)는 일반화 선형 회귀 모델 mdl을 사용하고 랜덤 잡음을 추가하여 Xnew의 예측 변수 데이터에 대한 응답 변수를 시뮬레이션합니다.

예제

ysim = random(mdl,Xnew,Name,Value)는 하나 이상의 이름-값 쌍의 인수를 사용하여 옵션을 추가로 지정합니다. 예를 들어, 이항분포에 대한 시행 횟수 또는 피팅에 사용되는 오프셋 값을 지정할 수 있습니다.

예제

모두 축소

일반화 선형 회귀 모델을 만들고, 랜덤 잡음이 있는 응답 변수를 새 데이터에 대해 시뮬레이션합니다.

1개의 기본 예측 변수 X를 갖는 푸아송 난수를 사용하여 표본 데이터를 생성합니다.

rng('default') % For reproducibility
X = rand(20,1);
mu = exp(1 + 2*X);
y = poissrnd(mu);

푸아송 데이터의 일반화 선형 회귀 모델을 만듭니다.

mdl = fitglm(X,y,'y ~ x1','Distribution','poisson');

예측을 위한 데이터 점을 만듭니다.

Xnew = (0:.05:1)';

데이터 점에서 랜덤 잡음이 있는 응답 변수를 시뮬레이션합니다.

ysim = random(mdl,Xnew);

시뮬레이션된 값과 원래 값을 플로팅합니다.

plot(X,y,'rx',Xnew,ysim,'bo',Xnew,feval(mdl,Xnew),'g-')
legend('Data','Simulated Response with Noise','Predicted Response', ...
    'Location','best')

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, Simulated Response with Noise, Predicted Response.

일반화 선형 회귀 모델을 피팅한 다음 saveLearnerForCoder를 사용하여 모델을 저장합니다. loadLearnerForCoder를 사용하여 모델을 불러오고 피팅된 모델의 predict 함수를 호출하는 진입점 함수를 정의합니다. 그런 다음 codegen (MATLAB Coder)을 사용하여 C/C++ 코드를 생성합니다. C/C++ 코드를 생성하려면 MATLAB® Coder™가 필요합니다.

이 예제에서는 명령줄에서 선형 회귀 모델을 예측하기 위한 코드 생성 워크플로를 간략하게 설명합니다. 자세한 내용은 Code Generation for Prediction of Machine Learning Model at Command Line 항목을 참조하십시오. MATLAB Coder 앱을 사용하여 코드를 생성할 수도 있습니다. 자세한 내용은 Code Generation for Prediction of Machine Learning Model Using MATLAB Coder App 항목을 참조하십시오.

모델 훈련시키기

다음 분포를 사용하여 예측 변수 x와 응답 변수 y의 표본 데이터를 생성합니다.

  • xN(1,0.52).

  • β0=1β=-2

  • yBinomial(10,exp(1+xβ)1+exp(1+xβ)).

rng('default') % For reproducibility
x = 1 + randn(100,1)*0.5;
beta = -2;
p = exp(1 + x*beta)./(1 + exp(1 + x*beta)); % Inverse logit
n = 10;
y = binornd(n,p,100,1);

이항 데이터의 일반화 선형 회귀 모델을 만듭니다. 이항 표본 크기를 10으로 지정합니다.

mdl = fitglm(x,y,'y ~ x1','Distribution','Binomial','BinomialSize',n);

모델 저장하기

피팅된 일반화 선형 회귀 모델을 saveLearnerForCoder를 사용하여 파일 GLMMdl.mat에 저장합니다.

saveLearnerForCoder(mdl,'GLMMdl');

진입점 함수 정의하기

현재 폴더에서 다음을 수행하는 myrandomGLM.m이라는 이름의 진입점 함수를 정의합니다.

  • 새 예측 변수 입력값과 유효한 이름-값 쌍의 인수를 받습니다.

  • GLMMdl.mat의 피팅된 일반화 선형 회귀 모델을 loadLearnerForCoder를 사용하여 불러옵니다.

  • 불러온 GLM 모델의 응답 변수를 시뮬레이션합니다.

function y = myrandomGLM(x,varargin) %#codegen
%MYRANDOMGLM Simulate responses using GLM model 
%   MYRANDOMGLM simulates responses for the n observations in the n-by-1
%   vector x using the GLM model stored in the MAT-file GLMMdl.mat, and
%   then returns the simulations in the n-by-1 vector y.
CompactMdl = loadLearnerForCoder('GLMMdl');
narginchk(1,Inf);
y = random(CompactMdl,x,varargin{:});
end

진입점 함수의 함수 시그니처 뒤에 %#codegen 컴파일러 지시문(또는 pragma)을 추가하여 MATLAB 알고리즘을 위한 코드를 생성하고자 함을 표시합니다. 이 지시문을 추가하면 코드를 생성하는 동안 오류를 유발할 수 있는 위반을 MATLAB 코드 분석기가 진단하고 수정할 수 있도록 안내합니다.

코드 생성하기

codegen (MATLAB Coder)을 사용하여 진입점 함수에 대한 코드를 생성합니다. C와 C++는 정적 유형 언어이므로 컴파일 시점에 진입점 함수의 모든 변수의 속성을 결정해야 합니다. 데이터형과 정확한 입력 배열 크기를 지정하려면 특정 데이터형과 배열 크기를 포함하는 값 세트를 나타내는 MATLAB® 표현식을 전달하십시오. 이름-값 쌍 인수 이름의 경우 coder.Constant (MATLAB Coder)를 사용합니다.

예측 변수 데이터 x와 이항 모수 n을 지정합니다.

codegen -config:mex myrandomGLM -args {x,coder.Constant('BinomialSize'),coder.Constant(n)}
Code generation successful.

codegen은 플랫폼별 확장자를 갖는 MEX 함수 myrandomGLM_mex를 생성합니다.

컴파일 시점에 몇몇 관측값이 알려지지 않은 경우에는 coder.typeof (MATLAB Coder)를 사용하여 입력값을 가변 크기로 지정할 수도 있습니다. 자세한 내용은 Specify Variable-Size Arguments for Code GenerationSpecify Properties of Entry-Point Function Inputs (MATLAB Coder) 항목을 참조하십시오.

생성된 코드 확인하기

MEX 함수를 사용하여 응답 변수를 시뮬레이션합니다. 예측 변수 데이터 x와 이항 모수 n을 지정합니다.

ysim = myrandomGLM_mex(x,'BinomialSize',n);

시뮬레이션된 값과 데이터를 동일한 Figure에 플로팅합니다.

figure
plot(x,y,'bo',x,ysim,'r*')
legend('Observed responses','Simulated responses')
xlabel('x')
ylabel('y')

Figure contains an axes object. The axes object with xlabel x, ylabel y contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Observed responses, Simulated responses.

관측된 응답 변수와 시뮬레이션된 응답 변수는 유사하게 분포된 것으로 보입니다.

입력 인수

모두 축소

일반화 선형 회귀 모델로, fitglm이나 stepwiseglm을 사용하여 만든 GeneralizedLinearModel 객체 또는 compact를 사용하여 만든 CompactGeneralizedLinearModel 객체로 지정됩니다.

새 예측 변수 입력값으로, 테이블, dataset형 배열 또는 행렬로 지정됩니다. Xnew의 각 행은 하나의 관측값에 대응되고, 각 열은 하나의 변수에 대응됩니다.

  • Xnew가 테이블 또는 dataset형 배열이면 mdlPredictorNames 속성에서와 동일한 예측 변수 이름을 가진 예측 변수를 포함해야 합니다.

  • Xnew가 행렬이면 mdl을 만드는 데 사용된 예측 변수 입력과 같은 순서로 같은 개수의 변수(열)를 가져야 합니다. Xnew는 피팅된 모델에서 예측 변수로 사용되지 않는 예측 변수도 포함해야 합니다. 또한 mdl을 만드는 데 사용되는 모든 변수는 숫자형이어야 합니다. 숫자형 예측 변수를 범주형으로 처리하려면 mdl을 만들 때 'CategoricalVars' 이름-값 쌍 인수를 사용하여 예측 변수를 식별하십시오.

데이터형: single | double | table

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: ysim = random(Mdl,Xnew,'BinomialSize',50)'BinomialSize'로 지정된 시행 횟수를 사용하여 랜덤 잡음에 의해 교란된 성공 횟수를 반환합니다.

이항분포에 대한 시행 횟수로, 'BinomialSize'와 함께 스칼라 또는 응답 변수와 동일한 길이의 벡터가 쉼표로 구분되어 지정됩니다. random 함수는 스칼라 입력값을 응답 변수와 동일한 크기의 상수 배열로 확장합니다. 스칼라 입력값은 모든 관측값의 시행 횟수가 동일함을 의미합니다.

ysim의 출력값의 의미는 'BinomialSize'의 값에 따라 달라집니다.

  • 'BinomialSize'가 1(디폴트 값)인 경우 출력 ysim의 각 값은 성공 확률입니다.

  • 'BinomialSize'가 1이 아닌 경우 출력 ysim의 각 값은 시행에서 예상되는 성공 횟수입니다.

데이터형: single | double

Xnew의 각 행에 대한 오프셋 값으로, 'Offset'와 함께 스칼라 또는 응답 변수와 동일한 길이의 벡터가 쉼표로 구분되어 지정됩니다. random 함수는 스칼라 입력값을 응답 변수와 동일한 크기의 상수 배열로 확장합니다.

모델을 피팅할 때 'Offset' 이름-값 쌍 인수를 지정하는 경우에도 이 인수의 디폴트 값은 0으로 구성된 벡터입니다. 피팅에 'Offset'을 지정하는 경우, 오프셋은 계수 값이 1로 고정된 추가 예측 변수로 처리됩니다. 즉, 피팅 수식은 다음과 같습니다.

f(μ) = Offset + X*b,

여기서 f는 연결 함수이고, μ는 평균 응답 변수이고, X*b는 예측 변수 X의 선형 결합입니다. Offset 예측 변수의 계수는 1입니다.

데이터형: single | double

출력 인수

모두 축소

시뮬레이션된 응답 변수 값으로, 숫자형 벡터로 반환됩니다. 시뮬레이션된 값은 피팅된 모델에 의해 주어진 분포에서 랜덤 잡음에 의해 교란된 Xnew에서의 예측된 응답 변수 값입니다. ysim의 값은 예측 변수에 대해 독립적이며 조건부입니다. 이항 및 푸아송 피팅의 경우 random은 지정된 분포를 사용하여 ysim을 생성하며 추정된 분산에 대한 조정은 없습니다.

  • 'BinomialSize'가 1(디폴트 값)인 경우 출력 ysim의 각 값은 성공 확률입니다.

  • 'BinomialSize'가 1이 아닌 경우 출력 ysim의 각 값은 시행에서 예상되는 성공 횟수입니다.

대체 기능

랜덤 잡음이 없는 예측의 경우 predict 또는 feval을 사용합니다.

  • predict는 모든 예측 변수가 포함된 단일 입력 인수를 받고 해당 예측에 대한 신뢰구간을 제공합니다.

  • feval은 각 예측 변수에 대해 입력값이 1개인 여러 입력 인수를 받으며, 이는 테이블 또는 dataset형 배열에서 생성된 모델에 사용하면 더 편합니다. feval 함수는 이름-값 쌍 인수 'Offset''BinomialSize'를 지원하지 않습니다. 이 함수는 0을 오프셋 값으로 사용하고, 출력값은 예측 확률입니다.

확장 기능

버전 내역

R2012a에 개발됨