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')
응답 변수를 시뮬레이션하는 C/C++ 코드 생성하기
일반화 선형 회귀 모델을 피팅한 다음 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 및 Specify 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')
관측된 응답 변수와 시뮬레이션된 응답 변수는 유사하게 분포된 것으로 보입니다.
입력 인수
mdl
— 일반화 선형 회귀 모델
GeneralizedLinearModel
객체 | CompactGeneralizedLinearModel
객체
일반화 선형 회귀 모델로, fitglm
이나 stepwiseglm
을 사용하여 만든 GeneralizedLinearModel
객체 또는 compact
를 사용하여 만든 CompactGeneralizedLinearModel
객체로 지정됩니다.
Xnew
— 새 예측 변수 입력값
table형 | dataset형 배열 | 행렬
새 예측 변수 입력값으로, 테이블, dataset형 배열 또는 행렬로 지정됩니다. Xnew
의 각 행은 하나의 관측값에 대응되고, 각 열은 하나의 변수에 대응됩니다.
Xnew
가 테이블 또는 dataset형 배열이면mdl
의PredictorNames
속성에서와 동일한 예측 변수 이름을 가진 예측 변수를 포함해야 합니다.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
— 이항분포에 사용할 시행 횟수
1 (디폴트 값) | 스칼라 | 벡터
이항분포에 대한 시행 횟수로, 'BinomialSize'
와 함께 스칼라 또는 응답 변수와 동일한 길이의 벡터가 쉼표로 구분되어 지정됩니다. random
함수는 스칼라 입력값을 응답 변수와 동일한 크기의 상수 배열로 확장합니다. 스칼라 입력값은 모든 관측값의 시행 횟수가 동일함을 의미합니다.
ysim
의 출력값의 의미는 'BinomialSize'
의 값에 따라 달라집니다.
'BinomialSize'
가 1(디폴트 값)인 경우 출력ysim
의 각 값은 성공 확률입니다.'BinomialSize'
가 1이 아닌 경우 출력ysim
의 각 값은 시행에서 예상되는 성공 횟수입니다.
데이터형: single
| double
Offset
— 오프셋 값
zeros(size(Xnew,1))
(디폴트 값) | 스칼라 | 벡터
Xnew
의 각 행에 대한 오프셋 값으로, 'Offset'
와 함께 스칼라 또는 응답 변수와 동일한 길이의 벡터가 쉼표로 구분되어 지정됩니다. random
함수는 스칼라 입력값을 응답 변수와 동일한 크기의 상수 배열로 확장합니다.
모델을 피팅할 때 'Offset'
이름-값 쌍 인수를 지정하는 경우에도 이 인수의 디폴트 값은 0으로 구성된 벡터입니다. 피팅에 'Offset'
을 지정하는 경우, 오프셋은 계수 값이 1로 고정된 추가 예측 변수로 처리됩니다. 즉, 피팅 수식은 다음과 같습니다.
f(μ) = Offset + X*b
,
여기서 f는 연결 함수이고, μ는 평균 응답 변수이고, X*b는 예측 변수 X의 선형 결합입니다. Offset
예측 변수의 계수는 1
입니다.
데이터형: single
| double
출력 인수
ysim
— 시뮬레이션된 응답 변수 값
숫자형 벡터
시뮬레이션된 응답 변수 값으로, 숫자형 벡터로 반환됩니다. 시뮬레이션된 값은 피팅된 모델에 의해 주어진 분포에서 랜덤 잡음에 의해 교란된 Xnew
에서의 예측된 응답 변수 값입니다. ysim
의 값은 예측 변수에 대해 독립적이며 조건부입니다. 이항 및 푸아송 피팅의 경우 random
은 지정된 분포를 사용하여 ysim
을 생성하며 추정된 분산에 대한 조정은 없습니다.
'BinomialSize'
가 1(디폴트 값)인 경우 출력ysim
의 각 값은 성공 확률입니다.'BinomialSize'
가 1이 아닌 경우 출력ysim
의 각 값은 시행에서 예상되는 성공 횟수입니다.
대체 기능
랜덤 잡음이 없는 예측의 경우 predict
또는 feval
을 사용합니다.
predict
는 모든 예측 변수가 포함된 단일 입력 인수를 받고 해당 예측에 대한 신뢰구간을 제공합니다.feval
은 각 예측 변수에 대해 입력값이 1개인 여러 입력 인수를 받으며, 이는 테이블 또는 dataset형 배열에서 생성된 모델에 사용하면 더 편합니다.feval
함수는 이름-값 쌍 인수'Offset'
및'BinomialSize'
를 지원하지 않습니다. 이 함수는 0을 오프셋 값으로 사용하고, 출력값은 예측 확률입니다.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
saveLearnerForCoder
,loadLearnerForCoder
,codegen
(MATLAB Coder)을 사용하여random
에 대한 코드를 생성합니다.saveLearnerForCoder
를 사용하여 훈련된 모델을 저장합니다.loadLearnerForCoder
를 사용하여 저장된 모델을 불러오고random
함수를 호출하는 진입점 함수를 정의합니다. 그런 다음codegen
을 사용하여 진입점 함수에 대한 코드를 생성합니다.random
은 다음 중 하나에 해당하는 경우 MATLAB®과 다른 수열을 반환할 수 있습니다.출력값이 비 스칼라입니다.
입력 모수가 분포에 유효하지 않습니다.
다음 표에는
random
의 인수에 대한 참고 사항 포함되어 있습니다. 이 표에 포함되지 않은 인수는 완전히 지원됩니다.인수 참고 및 제한 사항 mdl
모델 객체의 사용법 관련 참고 및 제한 사항은
CompactGeneralizedLinearModel
객체의 Code Generation 항목을 참조하십시오.Xnew
Xnew
는 단정밀도 또는 배정밀도 행렬이거나 숫자형 변수, 범주형 변수 또는 둘 다 포함하는 테이블이어야 합니다.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 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
이 함수는 GPU 배열을 완전히 지원합니다. 자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2012a에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)