Main Content

predict

선형 회귀 모델의 응답 변수 예측

설명

예제

ypred = predict(mdl,Xnew)Xnew의 점에 대한 선형 회귀 모델 mdl의 예측된 응답 변수 값을 반환합니다.

[ypred,yci] = predict(mdl,Xnew)Xnew에서 응답 변수에 대한 신뢰구간도 반환합니다.

예제

[ypred,yci] = predict(mdl,Xnew,Name,Value)는 하나 이상의 이름-값 쌍의 인수를 사용하여 옵션을 추가로 지정합니다. 예를 들어 신뢰구간의 신뢰수준과 예측 유형을 지정할 수 있습니다.

예제

모두 축소

carsmall 데이터 세트에서 자동차 주행거리의 2차 모델을 가중치의 함수로 만듭니다.

load carsmall
X = Weight;
y = MPG;
mdl = fitlm(X,y,'quadratic');

데이터에 대한 예측된 응답 변수를 만듭니다.

ypred = predict(mdl,X);

원래 응답 변수와 예측된 응답 변수를 플로팅하여 두 응답 변수가 어떻게 다른지 확인합니다.

plot(X,y,'o',X,ypred,'x')
legend('Data','Predictions')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, Predictions.

선형 회귀 모델을 피팅한 다음 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 항목을 참조하십시오.

모델 훈련시키기

carsmall 데이터 세트를 불러온 다음 2차 회귀 모델을 피팅합니다.

load carsmall
X = Weight;
y = MPG;
mdl = fitlm(X,y,'quadratic');

모델 저장하기

saveLearnerForCoder를 사용하여 피팅된 2차 모델을 파일 QLMMdl.mat에 저장합니다.

saveLearnerForCoder(mdl,'QLMMdl');

진입점 함수 정의하기

다음을 수행하는 mypredictQLM이라는 이름의 진입점 함수를 정의합니다.

  • X에 대응되는 측정값과 선택적인 유효한 이름-값 쌍 인수를 받습니다.

  • QLMMdl.mat의 피팅된 2차 모델을 불러옵니다.

  • 예측 범위와 신뢰구간 범위를 반환합니다.

function [yhat,ci] = mypredictQLM(x,varargin) %#codegen
%MYPREDICTQLM Predict response using linear model
%   MYPREDICTQLM predicts responses for the n observations in the n-by-1
%   vector x using the linear model stored in the MAT-file QLMMdl.mat, and
%   then returns the predictions in the n-by-1 vector yhat. MYPREDICTQLM
%   also returns confidence interval bounds for the predictions in the
%   n-by-2 vector ci.
CompactMdl = loadLearnerForCoder('QLMMdl');
[yhat,ci] = predict(CompactMdl,x,varargin{:});
end

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

참고: 이 예제의 오른쪽 위 섹션에 있는 버튼을 클릭하고 MATLAB®에서 예제를 열면 MATLAB이 예제 폴더를 엽니다. 이 폴더에는 진입점 함수 파일이 포함되어 있습니다.

코드 생성하기

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

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

codegen mypredictQLM -args {X,coder.Constant('Alpha'),0.1,coder.Constant('Simultaneous'),true}
Code generation successful.

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

생성된 코드 확인하기

predictmypredictQLM_mex를 사용하여 예측값과 신뢰구간을 비교합니다. codegen에 대한 호출에서의 -args 인수와 동일한 순서로 이름-값 쌍 인수를 지정합니다.

Xnew = sort(X);
[yhat1,ci1] = predict(mdl,Xnew,'Alpha',0.1,'Simultaneous',true);
[yhat2,ci2] = mypredictQLM_mex(Xnew,'Alpha',0.1,'Simultaneous',true);

mypredictQLM_mex에서 반환된 값은 predict에서의 값과 비교하여 반올림 차이가 있을 수도 있습니다. 이 경우, 작은 허용오차를 허용하며 값을 비교합니다.

find(abs(yhat1-yhat2) > 1e-6)
ans =

  0x1 empty double column vector
find(abs(ci1-ci2) > 1e-6)
ans =

  0x1 empty double column vector

비교를 통해 반환된 값이 허용오차 1e–6 내에서 동일한지 확인할 수 있습니다.

반환된 값을 플로팅하여 비교합니다.

h1 = plot(X,y,'k.');
hold on
h2 = plot(Xnew,yhat1,'ro',Xnew,yhat2,'gx');
h3 = plot(Xnew,ci1,'r-','LineWidth',4);
h4 = plot(Xnew,ci2,'g--','LineWidth',2);
legend([h1; h2; h3(1); h4(1)], ...
    {'Data','predict estimates','MEX estimates','predict CIs','MEX CIs'});
xlabel('Weight');
ylabel('MPG');

Figure contains an axes object. The axes object with xlabel Weight, ylabel MPG contains 7 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, predict estimates, MEX estimates, predict CIs, MEX CIs.

입력 인수

모두 축소

선형 회귀 모델 객체로, fitlm 또는 stepwiselm을 사용하여 만든 LinearModel 객체 또는 compact를 사용하여 만든 CompactLinearModel 객체로 지정됩니다.

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

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

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

데이터형: single | double | table

이름-값 인수

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

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

예: [ypred,yci] = predict(Mdl,Xnew,'Alpha',0.01,'Simultaneous',true)는 모든 예측 변수 값에 대해 동시에 계산하여 99% 신뢰수준으로 신뢰구간 yci를 반환합니다.

신뢰구간에 대한 유의수준으로, 'Alpha'와 함께 범위 [0,1] 내에 있는 숫자형 값이 쉼표로 구분되어 지정됩니다. yci의 신뢰수준은 100(1 – Alpha)%입니다. Alpha는 신뢰구간에 실제 값이 포함되지 않을 확률입니다.

예: 'Alpha',0.01

데이터형: single | double

예측 유형으로, 'Prediction'과 함께 'curve' 또는 'observation'이 쉼표로 구분되어 지정됩니다.

예측 변수 X와 응답 변수 y에 대한 회귀 모델의 형식은 다음과 같습니다.

y = f(X) + ε,

여기서 f는 피팅된 회귀 함수이고 ε은 임의효과 잡음 항입니다.

  • 'Prediction''curve'이면 predict 함수는 Xnew에서 피팅된 응답 변수인 f(Xnew)에 대한 신뢰한계를 예측합니다.

  • 'Prediction''observation'이면 predict 함수는 Xnew에서의 응답 변수 관측값인 y에 대한 신뢰한계를 예측합니다.

y에 대한 한계는 잡음 항의 추가 변동성 때문에 f(X)에 대한 한계보다 넓습니다.

예: 'Prediction','observation'

동시 신뢰한계를 계산할지 지정하는 플래그로, 'Simultaneous'와 함께 true 또는 false가 쉼표로 구분되어 지정됩니다.

  • truepredict 함수는 쉐폐 검정법(Scheffé's method)을 사용하여 Xnew의 모든 예측 변수 값에 대응하는 응답 변수 값의 곡선에 대한 신뢰한계를 계산합니다. 상한과 하한 사이의 범위는 100(1 – α)% 신뢰의 실제 응답 변수 값으로 구성된 곡선을 포함합니다.

  • falsepredict 함수는 Xnew의 각 관측값에서 응답 변수 값에 대한 신뢰한계를 계산합니다. 특정 예측 변수 값에서 응답 변수 값에 대한 신뢰구간은 100(1 – α)% 신뢰의 실제 응답 변수 값을 포함합니다.

응답 변수 값의 전체 곡선이 한계 내에 있어야 한다는 요건은 단일 예측 변수 값에서 응답 변수 값이 한계 내에 있어야 한다는 요건보다 엄격하기 때문에 동시 한계는 개별 한계보다 넓습니다.

예: 'Simultaneous',true

출력 인수

모두 축소

Xnew에서 계산된 예측된 응답 변수 값으로, 숫자형 벡터로 반환됩니다.

응답 변수에 대한 신뢰구간으로, 각 행이 하나의 구간을 제공하는 2열 행렬로 반환됩니다. 신뢰구간의 의미는 이름-값 쌍 인수 'Alpha', 'Prediction', 'Simultaneous'의 설정에 따라 달라집니다.

대체 기능

  • fevalpredict와 동일한 예측값을 반환합니다. feval 함수는 각 예측 변수에 대해 입력값이 1개인 여러 입력 인수를 받을 수 있으며, 이는 테이블 또는 dataset형 배열에서 생성된 모델에 사용하면 더 편합니다. feval 함수는 해당 예측값에 대한 신뢰구간을 제공하지 않는다는 점에 유의하십시오.

  • random은 추가된 잡음과 함께 예측값을 반환합니다.

  • 각 조각이 예측된 회귀 곡면을 나타내는 일련의 플롯으로 구성된 Figure를 만들려면 plotSlice를 사용합니다. 각 플롯은 일정하게 유지되는 다른 예측 변수와 함께, 피팅된 응답 변수 값을 단일 예측 변수의 함수로 표시합니다.

확장 기능

버전 내역

R2012a에 개발됨