random
일반화 선형 회귀 모델에 대해 랜덤 잡음이 있는 응답 변수 시뮬레이션하기
설명
예제
일반화 선형 회귀 모델을 만들고, 랜덤 잡음이 있는 응답 변수를 새 데이터에 대해 시뮬레이션합니다.
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')

일반화 선형 회귀 모델을 피팅한 다음 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의 표본 데이터를 생성합니다.
.
및
.
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 Generation 및 진입점 함수 입력값의 유형 지정하기 (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')

관측된 응답 변수와 시뮬레이션된 응답 변수는 유사하게 분포된 것으로 보입니다.
입력 인수
일반화 선형 회귀 모델로, fitglm이나 stepwiseglm을 사용하여 만든 GeneralizedLinearModel 객체 또는 compact를 사용하여 만든 CompactGeneralizedLinearModel 객체로 지정됩니다.
새 예측 변수 입력값으로, 테이블 또는 행렬로 지정됩니다. Xnew의 각 행은 하나의 관측값에 대응되고, 각 열은 하나의 변수에 대응됩니다.
Xnew가 테이블이면mdl의PredictorNames속성에 있는 예측 변수와 이름이 동일한 예측 변수를 포함해야 합니다.Xnew가 행렬이면mdl을 만드는 데 사용된 예측 변수 입력과 같은 순서로 같은 개수의 변수(열)를 가져야 합니다.mdl을 만드는 데 사용되는 모든 변수는 숫자형이어야 합니다. 숫자형 예측 변수를 범주형으로 처리하려면mdl을 만들 때CategoricalVars이름-값 인수를 사용하여 예측 변수를 지정하십시오.
Xnew는 피팅된 모델에서 예측 변수로 사용되지 않는 예측 변수도 모두 포함해야 합니다.
데이터형: 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을 오프셋 값으로 사용하고, 출력값은 예측 확률입니다.
확장 기능
사용법 관련 참고 및 제한 사항:
saveLearnerForCoder,loadLearnerForCoder,codegen(MATLAB Coder)을 사용하여random에 대한 코드를 생성합니다.saveLearnerForCoder를 사용하여 훈련된 모델을 저장합니다.loadLearnerForCoder를 사용하여 저장된 모델을 불러오고random함수를 호출하는 진입점 함수를 정의합니다. 그런 다음codegen을 사용하여 진입점 함수에 대한 코드를 생성합니다.random은 다음 중 하나에 해당하는 경우 MATLAB®과 다른 수열을 반환할 수 있습니다.출력값이 비 스칼라입니다.
입력 모수가 분포에 유효하지 않습니다.
다음 표에는
random의 인수에 대한 참고 사항 포함되어 있습니다. 이 표에 포함되지 않은 인수는 완전히 지원됩니다.인수 참고 및 제한 사항 mdl모델 객체의 사용법 관련 참고 및 제한 사항은
CompactGeneralizedLinearModel객체의 Code Generation 항목을 참조하십시오.XnewXnew는 단정밀도 또는 배정밀도 행렬이거나 숫자형 변수, 범주형 변수 또는 둘 다 포함하는 테이블이어야 합니다.Xnew의 행 개수 또는 관측값 개수는 가변 크기를 가질 수 있지만,Xnew의 열 개수는 고정되어야 합니다.Xnew를 테이블로 지정하려면 테이블을 사용하여 모델을 훈련해야 하며, 예측을 위한 진입점 함수는 다음을 수행해야 합니다.데이터를 배열로 받음
데이터 입력 인수에서 테이블을 생성하고 테이블에 변수 이름 지정
테이블을
predict로 전달
이 테이블 워크플로의 예제는 Generate Code to Classify Data in Table 항목을 참조하십시오. 코드 생성에 테이블을 사용하는 방법에 대한 자세한 내용은 Code Generation for Tables (MATLAB Coder) 항목 및 Table Limitations for Code Generation (MATLAB Coder) 항목을 참조하십시오.
이름-값 쌍의 인수 이름-값 인수에 지정하는 이름은 컴파일타임 상수여야 합니다. 예를 들어, 생성되는 코드에
'BinomialSize'이름-값 쌍의 인수를 사용하려면codegen(MATLAB Coder)의-args값에{coder.Constant('BinomialSize'),0}을 포함시키십시오.
자세한 내용은 Introduction to Code Generation 항목을 참조하십시오.
이 함수는 GPU 배열을 완전히 지원합니다. 자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2012a에 개발됨
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)