Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

CVPARTITION

교차 검증을 위한 데이터 분할

설명

CVPARTITION은데이터대한의분할정의합니다합니다。이분할하여검증을통계모델검증하기훈련훈련세트와검정세트세트를정의정의할할수수。训练을사용훈련인덱스를하고하고测试를사용하여 교차 검증을 위한 검정 인덱스를 추출합니다.重新分配을사용하여주어진CVPARTITION객체와유형새임의을합니다합니다합니다。

생성

설명

C= cvpartition(n,,,,'KFold',kn개관측값대한k겹 교차 검증에 사용할 층화되지 않은 임의 분할을 정의하는CVPARTITION객체C를반환합니다. 이 분할은 관측값을 각각 관측값 개수가 거의 같은k개의또는겹임의나눕니다나눕니다나눕니다。

예제

C= cvpartition(n,,,,'Holdout',pn개의 관측값에 대한 홀드아웃 검증에 사용할 층화되지 않은 임의 분할을 생성합니다. 이 분할은 관측값을 훈련 세트 하나와 검정(홀드아웃) 세트 하나로 분할합니다.

예제

C= cvpartition(group,,,,'KFold',k는 층화된k겹교차사용임분할분할합니다합니다합니다。각부표본겹은값개수가같으며클래스비율이group에서의 클래스 비율과 거의 같습니다.

group을첫입력인수로하면하면CVPARTITIONgroup의 누락값에 대응되는 관측값 행을 버립니다.

예제

C= cvpartition(group,,,,'KFold',k,'分层',分层k겹교차을임의분할을하는하는CVPARTITION객체C를반환합니다.“分层”,错误를지정경우,CVPARTITIONgroup의 클래스 정보를 무시하고 층화되지 않은 임의 분할을 생성합니다. 그렇지 않은 경우, 기본적으로 층화가 구현됩니다.

C= cvpartition(group,,,,'Holdout',pgroup의 클래스 정보를 사용하여 관측값을 층화된 훈련 세트 하나와 검정(홀드아웃) 세트 하나로 임의로 분할합니다. 훈련 세트와 검정 세트 모두 클래스 비율이group에서의 클래스 비율과 거의 같습니다.

예제

C= cvpartition(group,,,,'Holdout',p,'分层',分层은임을세트하나와(홀드홀드)세트세트로정의객체객체C를반환합니다.“分层”,错误를지정경우,CVPARTITION은 층화되지 않은 임의 분할을 생성합니다. 그렇지 않은 경우, 기본적으로 층화가 구현됩니다.

예제

C= cvpartition(n,,,,'忽略')n개의 관측값에 대한 리브-원-아웃 교차 검증에 사용할 임의 분할을 생성합니다. 리브-원-아웃은'KFold'의 특수한 사례로, 겹의 개수가 관측값 개수와 같습니다.

c = cvpartition(n,“重新结论”)은데이터분할하지않는객체C를생성합니다。훈련 세트와 검정 세트 모두n개의관측전체포함합니다합니다。

입력 인수

모두확장

표본데이터값개수로,양의스칼라로됩니다됩니다。

예:100

데이터형:single|double

분할에겹의개수로,양의스칼라로됩니다됩니다。k는 총 관측값 개수보다 작아야 합니다.

예:5

데이터형:single|double

홀드아웃 검증에 사용된 검정 세트의 관측값 비율 또는 개수로, 범위 (0,1)의 스칼라 또는 범위 [1,n)의 정수 스칼라로 지정됩니다. 여기서 n은 총 관측값 개수입니다.

  • p가 범위 (0,1)의 스칼라인 경우,CVPARTITION은검정세트대해대략p*n개의 관측값을 임의로 선택합니다.

  • p가 범위 [1,n)의 정수 스칼라인 경우,CVPARTITION은검정세트대해p개의 관측값을 임의로 선택합니다.

예:0.2

예:50

데이터형:single|double

층화를 위한 그룹화 변수로, 각 관측값의 클래스를 나타내는 숫자형 벡터 또는 논리형 벡터, categorical형 배열, 문자형 배열 또는 string형 배열 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다.CVPARTITIONgroup의관측에서을합니다합니다。

데이터형:single|double|逻辑|Categorical|Char|string|细胞

층화표시자로,true또는错误的로 지정됩니다.

  • CVPARTITION에대한번째입력인수가group인 경우,CVPARTITION은 기본적으로 층화를 구현합니다('Stratify',true)。층화되지 않은 임의 분할의 경우,“分层”,错误를지정하십시오。

  • CVPARTITION에대한번째입력인수가n인 경우,CVPARTITION은 항상 층화되지 않은 임의 분할을 생성합니다(“分层”,错误)。이 경우,'Stratify',true를지정수없습니다。

데이터형:逻辑

속성

모두확장

이 속성은 읽기 전용입니다.

누락된group값을값포함한관측값개수로,양의스칼라로됩니다됩니다됩니다。

데이터형:double

이 속성은 읽기 전용입니다.

분할의 총 검정 세트 개수로, 분할 유형이'kfold'또는'leaveout'인경우개수로되고,분분유형이이'holdout'또는“重新结论”인 경우1로 지정됩니다.

데이터형:double

이 속성은 읽기 전용입니다.

각검정세트크기로, 분할 유형이'kfold'또는'leaveout'인경우의벡터로되고,분분유형이이'holdout'또는“重新结论”인 경우 양의 정수 스칼라로 지정됩니다.

데이터형:double

이 속성은 읽기 전용입니다.

각 훈련 세트의 크기로, 분할 유형이'kfold'또는'leaveout'인경우의벡터로되고,분분유형이이'holdout'또는“重新结论”인 경우 양의 정수 스칼라로 지정됩니다.

데이터형:double

이 속성은 읽기 전용입니다.

검증 분할의 유형으로,'kfold',,,,'holdout',,,,'leaveout'또는“重新结论”으로 지정됩니다.

객체함수

重新分配 Repartition data for cross-validation
测试 Test indices for cross-validation
训练 Training indices for cross-validation

예제

모두 축소

교차검증를하여새데이터대한의성능추정합니다합니다합니다。

一世onosphere데이터세트불러옵니다。예측 변수 데이터X와 응답 변수y를포함테이블생성합니다。

加载一世onospheretbl = array2table(x);tbl.y = y;

층화되지 않은 임의 분할hpartition을사용데이터를데이터(tblTrain)와 나중에 사용할 데이터 세트(tblNew)로 분할합니다. 데이터의 약 30%를 따로 남겨둡니다.

rng('default'% For reproducibilityn =length(tbl.Y); hpartition = cvpartition(n,'Holdout',0.3);% Nonstratified partition一世dxTrain = training(hpartition); tblTrain = tbl(idxTrain,:); idxNew = test(hpartition); tblNew = tbl(idxNew,:);

훈련 데이터tblTrain을 사용하여 서포트 벡터 머신(SVM) 분류 모델을 훈련시킵니다. 훈련 데이터에 대한 오분류 오차와 분류 정확도를 계산합니다.

Mdl = fitcsvm(tblTrain,'y');trainerror =重新公开(MDL)
TrainError = 0.0569
火车准确性= 1-trainError
TrainAccuracy = 0.9431

일반적으로, 훈련 데이터에 대한 오분류 오차는 새 데이터에 대한 모델의 성능을 추정하기에 좋은 척도가 아닙니다. 새 데이터에 대한 오분류율을 과소평가할 수 있기 때문입니다. 보다 효과적인 척도는 교차 검증 오차입니다.

분할된 모델简历Mdl을생성합니다。10겹교차오차정확도를합니다합니다합니다。기본적,杂交은 각 겹의 클래스 비율이 응답 변수tblTrain.Y의 클래스 비율과 거의 동일하게 유지되도록 합니다.

CVMDL = CrossVal(MDL);%执行分层的10倍交叉验证CVTrainError= kfoldLoss(cvMdl)
CVTrainError= 0.1220
cvtrainAccuracy = 1-cvtrainError
简历火车准确性= 0.8780

교차검증오차CVTrainError가 재대입 오차trainError보다크다는에하십시오하십시오。

훈련된 SVM 모델을 사용하여tblNew에 있는 새 데이터를 분류합니다. 새 데이터에 대한 분류 정확도를 정확도 추정값火车准确性简历火车准确性와 비교합니다.

newError = loss(Mdl,tblNew,'y');newAccuracy = 1-newError
newAccuracy = 0.8700

새 데이터에서 교차 검증 오차가 재대입 오차보다 더 효과적으로 모델 성능을 추정합니다.

5겹 교차 검증에 층화된 동일한 분할을 사용하여 두 모델의 오분류율을 계산합니다.

渔业데이터세트불러옵니다。행렬meas는 150개의 서로 다른 꽃에 대한 꽃 측정치를 포함합니다. 변수物种는 각 꽃의 종을 나열합니다.

加载渔业

5된겹검증사용할의분할생성합니다합니다합니다。훈련세트검정세트는대략으로으로物种와 동일한 비율의 꽃 종을 가집니다.

rng('default'% For reproducibilityc = cvpartition(物种,,,,'KFold',5);

C를사용해 분할된 판별분석 모델과 분할된 분류 트리 모델을 생성합니다.

discrCVModel = fitcdiscr(meas,species,'CVPartition',C);treecvmodel = fitctree(MES,物种,'CVPartition',C);

두개된의오분류율계산합니다합니다。

discrRate = kfoldLoss(discrCVModel)
discrRate = 0.0200
treeRate = kfoldLoss(treeCVModel)
treeRate = 0.0333

판별분석교차검증이작습니다작습니다작습니다。

渔业데이터의되지않은않은겹에서세트세트세트세트세트세트세트클래스클래스을합니다합니다합니다。클래스비율겹다릅니다다릅니다。

渔业데이터세트불러옵니다。物种변수는 각 꽃(관측값)에 대한 종 이름(클래스)을 포함합니다.物种Categorical형변수변환합니다。

加载渔业物种=分类(物种);

각 클래스에서 관측값의 개수를 구합니다. 세 클래스가 동일한 비율로 발생합니다.

C =类别(物种)%班级名称
C =3x1单元{'setosa'} {'versicolor'} {'virginica'}
numClasses = size(C,1); n = countcats(species)% Number of observations in each class
n =3×150 50 50

층화되지않은겹임분할을합니다합니다합니다

rng('default'% For reproducibilitycv = cvpartition(物种,'KFold',,,,5,,,,'Stratify',,,,错误的)
cv = k折交叉验证分区数字:150 numtestsets:5训练:120 120 120 120 120 120 Testsize:30 30 30 30 30 30 30

세 클래스가 5개의 검정 세트(또는 겹)에서 동일한 비율로 발생하지 않는 것을 확인해 보겠습니다. for 루프를 사용하여 각 요소ntestdata(i,j)가검정세트一世및클래스C(J)의 관측값 개수에 대응하도록ntestdata행렬을업데이트합니다。ntestdata의 데이터에서 막대 차트를 생성합니다.

numfolds = cv.numtestsets;ntestData = zeros(numfolds,numClasses);为了一世= 1:numFolds testClasses = species(cv.test(i)); nCounts = countcats(testClasses);% Number of test set observations in each classntestdata(i,:) = ncounts';结尾bar(nTestData) xlabel(“测试集(折)”)ylabel(“观察数”)title('Nonstratified Partition')legend(C)

Figure contains an axes object. The axes object with title Nonstratified Partition contains 3 objects of type bar. These objects represent setosa, versicolor, virginica.

클래스 비율이 일부 검정 세트에서 다르게 나타납니다. 예를 들어, 첫 번째 검정 세트에는 종마다 10송이씩 있는 것이 아니라 setosa 8송이, versicolor 13송이, virginica 9송이가 포함되어 있습니다.简历渔业데이터의않은임분할이기때문세트세트세트(겹)각각각각마다클래스비율이物种의클래스과보장없습니다없습니다。즉,각각각각검정세트는는物种에서처럼 클래스가 동일하게 나타나지 않습니다.

高大的형대해되지홀드분할층화홀드아웃분할을합니다합니다。두개세트에대해대해,각클래스값개수를합니다합니다합니다합니다합니다。

tall형 배열에서 계산을 수행할 때, MATLAB®은 병렬 풀(Parallel Computing Toolbox™를 사용할 경우 디폴트 값) 또는 로컬 MATLAB 세션을 사용합니다. Parallel Computing Toolbox가 있는 상태에서 로컬 MATLAB 세션을 사용하여 예제를 실행하려면mapreducer함수를사용하여전역 실행 환경을 변경하십시오.

MapReducer(0)

두개로된벡터벡터합니다합니다합니다。여기서클래스1과클래스21:10비율로 나타납니다.

组= [一个(20,1); 2*一个(200,1)]
group =220×11111111111 ⋮

group에서 tall형 배열을 생성합니다.

tgroup= tall(group)
tgroup = 220x1高柱向量1 1 1 1 1 1 1 1:::

Holdout高个子형형에지원되는한한CVPARTITION옵션입니다. 층화되지 않은 홀드아웃 임의 분할을 생성합니다.

CV0 = cvpartition(tgroup,'Holdout',,,,1/4,'Stratify',,,,错误的)
cv0 =持有交叉验证分区数字:[1x1高] numtestsets:1 trainsize:[1x1高] testsize:[1x1高]

收集함수를사용하여cv0.test의 결과를 메모리에 반환합니다.

testIdx0 = chater(cv0.test);
使用本地MATLAB会话评估高表情: -  1 of 1:在0.69秒完成的0.51秒评估完成

각클래스(즉,홀드)세트나타나는를구합니다구합니다。

accumarray(group(testIdx0),1)% Number of observations per class in the holdout set
ans =2×1551

CVPARTITION을 사용하면 결과가 임의성을 띠게 되므로 각 클래스의 관측값 개수가 여기에 표시된 결과와 다를 수 있습니다.

CV0은 층화되지 않은 분할이기 때문에 홀드아웃 세트에서 클래스1관측값과 클래스2관측값이tgroup에서와비율로보장없습니다없습니다。하지만,CVPARTITION의 내재된 임의성으로 인해,“分层”,错误를지정하더라도 홀드아웃 세트에서 클래스가tgroup에서와비율로경우있습니다있습니다。훈련세트는아웃세트보수이므로,또는누락을시켜훈련세트유사한결과수있습니다있습니다있습니다。

CV0.training의 결과를 메모리에 반환합니다.

trainidx0 =聚集(cv0.training);
使用当地的MATLAB评估高表达Session: - Pass 1 of 1: Completed in 0.16 sec Evaluation completed in 0.21 sec

훈련 세트에서 각 클래스가 나타나는 횟수를 구합니다.

AccumArray(Group(TrainIDX0),1)培训集中的每个课程观测值%
ans =2×115 149

층화되지훈련세트의는는tgroup에서와비율로보장없습니다없습니다。

층화된임의을합니다합니다합니다。

CV1 = cvpartition(tgroup,'Holdout',,,,1/4)
CV1 = Hold-out cross validation partition NumObservations: [1x1 tall] NumTestSets: 1 TrainSize: [1x1 tall] TestSize: [1x1 tall]

CV1.test의 결과를 메모리에 반환합니다.

testIdx1 = chater(cv1.test);
使用当地的MATLAB评估高表达Session: - Pass 1 of 1: Completed in 0.092 sec Evaluation completed in 0.13 sec

각클래스(즉,홀드)세트나타나는를구합니다구합니다。

accumarray(group(testIdx1),1)% Number of observations per class in the holdout set
ans =2×1551

층화된분할의홀드아웃세트클래스과과과tgroup의클래스비율동일하게(1:10)입니다。

리브-원-아웃 교차 검증을 위해 임의의 데이터 분할을 생성합니다. 훈련 세트 평균을 계산하고 비교합니다. 어떤 반복에서 평균이 크게 다르게 나올 경우 영향 관측값이 존재함을 의미합니다.

어느 한 값이 나머지 다른 값들보다 훨씬 큰 데이터 세트X를생성합니다。

x = [1 2 3 4 5 6 7 8 9 20]';

관측값이 10개이고 훈련 데이터와 검정 데이터의 반복이 10회인CVPARTITION객체를생성합니다.CVPARTITION은각반복마다훈련세트에서제외할관측값을한개선택하여검정세트용으로남겨둡니다。

c = cvpartition(10,'忽略'
c = Leave-one-out cross validation partition NumObservations: 10 NumTestSets: 10 TrainSize: 9 9 9 9 9 9 9 9 9 9 TestSize: 1 1 1 1 1 1 1 1 1 1

X에 리브-원-아웃 분할을 적용하고杂交을사용반복훈련관측값평균취합니다취합니다취합니다。

values = crossval(@(Xtrain,Xtest)mean(Xtrain),X,'Partition',C)
values =10×16.5556 6.4444 7.0000 6.3333 6.6667 7.1111 6.8889 6.7778 6.2222 5.0000

상자 차트(또는 상자 플롯)를 사용하여 훈련 세트 평균의 분포를 확인합니다. 플롯은 하나의 이상값을 표시합니다.

Boxchart(值)

Figure contains an axes object. The axes object contains an object of type boxchart.

이상값에 대응하는 반복을 찾습니다. 해당 반복에서 검정 세트에 들어 있는 관측값을 찾습니다.

[〜,repetitionIdx] = min(values)
RepetitionIdx = 10
observationIdx = test(c,repetitionIdx); influentialObservation = X(observationIdx)
一世nfluentialObservation = 20

이 관측값이 들어 있는 훈련 세트의 평균이 이 관측값이 없는 훈련 세트의 평균과 크게 다릅니다. 이렇게 큰 평균 변화는X에서 값20이 영향 관측값임을 나타냅니다.

  • groupCVPARTITION에 대한 첫 번째 입력 인수로 지정하는 경우,group에서 누락값에 대응되는 관측값 행이 버려집니다.

  • groupCVPARTITION에대한인수로지정하는경우,기본으로층화됩니다됩니다됩니다됩니다됩니다。“分层”,错误를지정하면 층화되지 않은 임의 분할을 생성할 수 있습니다.

  • 'Stratify',trueCVPARTITION에대한번째입력인수가group인 경우에만 지정할 수 있습니다.

확장 기능

버전내역

R2008A에됨됨

참고 항목

|||

도움말 항목