cvpartition
교차 검증을 위한 데이터 분할
설명
cvpartition은 데이터 세트에 대한 임의 분할을 정의합니다. 이 분할을 사용하여 교차 검증을 통해 통계 모델을 검증하기 위한 훈련 세트와 테스트 세트를 정의할 수 있습니다. training을 사용하여 훈련 인덱스를 추출하고 test를 사용하여 교차 검증을 위한 테스트 인덱스를 추출합니다. repartition을 사용하여 주어진 cvpartition 객체와 동일한 유형의 새 임의 분할을 정의합니다.
cvpartition 객체를 생성할 때 층화 변수나 그룹화 변수를 지정하는 경우 summary를 사용하여 데이터 분할에 대한 자세한 정보를 표시할 수 있습니다.
생성
구문
설명
는 k겹 교차 검증을 위한 임의 분할을 정의하는 객체 c = cvpartition(n,KFold=k,GroupingVariables=groupingVariables)c를 반환합니다. 이 함수는 groupingVariables로 지정된 대로, 그룹 레이블의 조합이 동일한 관측값들이 같은 겹에 있도록 합니다. (R2025a 이후)
groupingVariables를 지정하면 cvpartition은 groupingVariables의 누락값에 대응되는 관측값 행을 버립니다.
은 c = cvpartition(stratvar,KFold=k,Stratify=stratifyOption)k겹 교차 검증을 위한 임의 분할을 정의하는 객체 c를 반환합니다. Stratify=false를 지정하는 경우, cvpartition은 stratvar의 클래스 정보를 무시하고 층화되지 않은 임의 분할을 생성합니다. 그렇지 않은 경우, 기본적으로 층화가 구현됩니다.
은 임의 분할을 훈련 세트 하나와 테스트(홀드아웃) 세트 하나로 정의하는 객체 c = cvpartition(stratvar,Holdout=p,Stratify=stratifyOption)c를 반환합니다. Stratify=false를 지정하는 경우, cvpartition은 층화되지 않은 임의 분할을 생성합니다. 그렇지 않은 경우, 기본적으로 층화가 구현됩니다.
입력 인수
표본 데이터의 관측값 개수로, 양의 정수 스칼라로 지정됩니다.
예: 100
데이터형: single | double
분할에 포함된 겹의 개수로, 양의 정수 스칼라로 지정됩니다. k는 총 관측값 개수보다 작아야 합니다.
예: KFold=5
데이터형: single | double
R2025a 이후
그룹화 변수로, 다음 중 하나로 지정됩니다.
하나의 그룹화 변수를 포함하는 숫자형 벡터, 논리형 벡터, categorical형 벡터, 문자형 배열, string형 배열 또는 문자형 벡터로 구성된 셀형 배열.
2개 이상의 그룹화 변수를 포함하는 숫자형 행렬 또는 셀형 배열. 행렬 또는 배열의 각 열은 하나의 그룹화 변수에 대응되어야 합니다.
그룹 레이블의 조합이 동일한 관측값은 같은 겹에 있습니다.
데이터형: single | double | logical | char | string | cell | categorical
홀드아웃 검증에 사용된 테스트 세트의 관측값 비율 또는 개수로, 범위 (0,1)의 스칼라 또는 범위 [1,n)의 정수 스칼라로 지정됩니다. 여기서 n은 총 관측값 개수입니다.
p가 범위 (0,1)의 스칼라인 경우,cvpartition은 테스트 세트에 대해 대략p*n개의 관측값을 임의로 선택합니다.p가 범위 [1,n)의 정수 스칼라인 경우,cvpartition은 테스트 세트에 대해p개의 관측값을 임의로 선택합니다.
예: Holdout=0.2
예: Holdout=50
데이터형: single | double
층화를 위한 변수로, 각 관측값의 클래스를 나타내는 숫자형 벡터, 논리형 벡터, categorical형 벡터, 문자형 배열, string형 배열 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. cvpartition은 stratvar의 관측값에서 분할을 생성합니다.
데이터형: single | double | logical | char | string | cell | categorical
층화 표시자로, true 또는 false로 지정됩니다.
cvpartition에 대한 첫 번째 입력 인수가stratvar인 경우,cvpartition은 기본적으로 층화를 구현합니다(Stratify=true). 층화되지 않은 임의 분할의 경우,Stratify=false를 지정하십시오.cvpartition에 대한 첫 번째 입력 인수가n인 경우,cvpartition은 항상 층화되지 않은 임의 분할을 생성합니다(Stratify=false). 이 경우,Stratify=true를 지정할 수 없습니다.
예: Stratify=false
데이터형: logical
R2023b 이후
사용자 지정 테스트 세트로, 양의 정수 벡터, 논리형 벡터 또는 논리형 행렬로 지정됩니다.
홀드아웃 검증의 경우, 논리형 벡터를 사용하여 테스트 세트 관측값을 지정합니다. 값
1(true)은 대응되는 관측값이 테스트 세트에 있음을 나타내고, 값0(false)은 대응되는 관측값이 훈련 세트에 있음을 나타냅니다.k겹 교차 검증의 경우, 정수 벡터(범위 [1,k] 내에 있는 값을 가짐) 또는 k개 열을 가진 논리형 행렬을 사용하여 테스트 세트 관측값을 지정합니다.
정수 벡터 — 값
j는 대응되는 관측값이 테스트 세트j에 있음을 나타냅니다.논리형 행렬 — 행 i와 열 j에 있는 값은 관측값 i가 테스트 세트 j에 있는지 여부를 나타냅니다.
각각의 k 테스트 세트는 적어도 하나의 관측값을 포함해야 합니다.
리브-원-아웃 교차 검증의 경우, 정수 벡터(범위 [1,n] 내에 있는 값을 가짐) 또는 n×n 논리형 행렬(여기서 n은 데이터에 있는 관측값 개수임)을 사용하여 테스트 세트 관측값을 지정합니다.
정수 벡터 — 값
j는 대응되는 관측값이 테스트 세트j에 있음을 나타냅니다.논리형 행렬 — 행 i와 열 j에 있는 값은 관측값 i가 테스트 세트 j에 있는지 여부를 나타냅니다.
예: CustomPartition=[true false true false false]는 첫 번째 관측값과 세 번째 관측값이 테스트 세트에 있는 홀드아웃 검증 방식을 나타냅니다.
예: CustomPartition=[1 2 2 1 3 3 1 2 3 2]는 첫 번째 관측값, 네 번째 관측값, 일곱 번째 관측값이 첫 번째 테스트 세트에 있는 3겹 교차 검증 방식을 나타냅니다.
데이터형: single | double | logical
속성
읽기 전용 속성입니다.
누락된 stratvar 값을 갖는 관측값을 포함한 관측값 개수로, 양의 정수 스칼라로 지정됩니다.
데이터형: double
읽기 전용 속성입니다.
분할의 총 테스트 세트 개수로, 분할 유형이 'kfold' 또는 'leaveout'인 경우 겹의 개수로 지정되고, 분할 유형이 'holdout' 또는 'resubstitution'인 경우 1로 지정됩니다.
데이터형: double
읽기 전용 속성입니다.
각 테스트 세트의 크기로, 분할 유형이 'kfold' 또는 'leaveout'인 경우 양의 정수 벡터로 지정되고, 분할 유형이 'holdout' 또는 'resubstitution'인 경우 양의 정수 스칼라로 지정됩니다.
데이터형: double
읽기 전용 속성입니다.
각 훈련 세트의 크기로, 분할 유형이 'kfold' 또는 'leaveout'인 경우 양의 정수 벡터로 지정되고, 분할 유형이 'holdout' 또는 'resubstitution'인 경우 양의 정수 스칼라로 지정됩니다.
데이터형: double
읽기 전용 속성입니다.
검증 분할의 유형으로, 'kfold', 'holdout', 'leaveout' 또는 'resubstitution'으로 지정됩니다.
R2023b 이후
읽기 전용 속성입니다.
사용자 지정 분할의 표시자로, 논리형 스칼라로 지정됩니다. 객체가 사용자 지정 분할을 사용하여 생성된 경우, 값은 1(true)입니다. 그렇지 않으면 값은 0(false)입니다.
데이터형: logical
R2025a 이후
읽기 전용 속성입니다.
그룹화된 분할의 표시자로, 논리형 스칼라로 지정됩니다. 객체가 그룹화 변수(groupingVariables)를 사용하여 생성된 경우, 값은 1(true)입니다. 그렇지 않으면 값은 0(false)입니다.
데이터형: logical
R2025a 이후
읽기 전용 속성입니다.
층화된 분할의 표시자로, 논리형 스칼라로 지정됩니다. stratifyOption 값이 true로 지정된 stratvar을 사용하여 객체가 생성된 경우 값은 1(true)입니다. 그렇지 않으면 값은 0(false)입니다.
데이터형: logical
객체 함수
repartition | Repartition data for cross-validation |
summary | Summarize cross-validation partition with stratification or grouping variable |
test | 교차 검증을 위한 테스트 인덱스 |
training | 교차 검증을 위한 훈련 인덱스 |
예제
교차 검증 오분류 오차를 사용하여 새 데이터에 대한 모델의 성능을 추정합니다.
ionosphere 데이터 세트를 불러옵니다. 예측 변수 데이터 X와 응답 변수 Y를 포함하는 테이블을 생성합니다.
load ionosphere
tbl = array2table(X);
tbl.Y = Y;층화되지 않은 임의 분할 hpartition을 사용하여 데이터를 훈련 데이터(tblTrain)와 나중에 사용할 데이터 세트(tblNew)로 분할합니다. 데이터의 약 30%를 따로 남겨둡니다.
rng(0,"twister") % For reproducibility n = length(tbl.Y); hpartition = cvpartition(n,Holdout=0.3); idxTrain = training(hpartition); tblTrain = tbl(idxTrain,:); idxNew = test(hpartition); tblNew = tbl(idxNew,:);
훈련 데이터 tblTrain을 사용하여 서포트 벡터 머신(SVM) 분류 모델을 훈련시킵니다. 훈련 데이터에 대한 오분류 오차와 분류 정확도를 계산합니다.
Mdl = fitcsvm(tblTrain,"Y");
trainError = resubLoss(Mdl)trainError = 0.0569
trainAccuracy = 1-trainError
trainAccuracy = 0.9431
일반적으로, 훈련 데이터에 대한 오분류 오차는 새 데이터에 대한 모델의 성능을 추정하기에 좋은 척도가 아닙니다. 새 데이터에 대한 오분류율을 과소평가할 수 있기 때문입니다. 보다 효과적인 척도는 교차 검증 오차입니다.
분할된 모델 cvMdl을 생성합니다. 10겹 교차 검증 오분류 오차와 분류 정확도를 계산합니다. 기본적으로, crossval은 각 겹의 클래스 비율이 응답 변수 tblTrain.Y의 클래스 비율과 거의 동일하게 유지되도록 합니다.
cvMdl = crossval(Mdl); cvtrainError = kfoldLoss(cvMdl)
cvtrainError = 0.1220
cvtrainAccuracy = 1-cvtrainError
cvtrainAccuracy = 0.8780
교차 검증 오차 cvtrainError가 재대입 오차 trainError보다 크다는 점에 유의하십시오.
훈련된 SVM 모델을 사용하여 tblNew에 있는 새 데이터를 분류합니다. 새 데이터에 대한 분류 정확도를 정확도 추정값 trainAccuracy 및 cvtrainAccuracy와 비교합니다.
newError = loss(Mdl,tblNew,"Y");
newAccuracy = 1-newErrornewAccuracy = 0.8700
새 데이터에서 교차 검증 오차가 재대입 오차보다 더 효과적으로 모델 성능을 추정합니다.
5겹 교차 검증에 층화된 동일한 분할을 사용하여 두 모델의 오분류율을 계산합니다.
fisheriris 데이터 세트를 불러옵니다. 행렬 meas는 150개의 서로 다른 꽃에 대한 꽃 측정치를 포함합니다. 변수 species는 각 꽃의 종을 나열합니다.
load fisheriris층화된 5겹 교차 검증에 사용할 임의 분할을 생성합니다. 훈련 세트와 테스트 세트는 대략적으로 species와 동일한 비율의 꽃 종을 가집니다.
rng(0,"twister") % For reproducibility c = cvpartition(species,KFold=5);
c를 사용해 분할된 판별분석 모델과 분할된 분류 트리 모델을 생성합니다.
discrCVModel = fitcdiscr(meas,species,CVPartition=c); treeCVModel = fitctree(meas,species,CVPartition=c);
두 개의 분할된 모델의 오분류율을 계산합니다.
discrRate = kfoldLoss(discrCVModel)
discrRate = 0.0200
treeRate = kfoldLoss(treeCVModel)
treeRate = 0.0600
판별분석 모델의 교차 검증 오분류율이 더 작습니다.
fisheriris 데이터의 층화되지 않은 5겹 분할에서 테스트 세트(겹) 클래스 비율을 관측합니다. 클래스 비율은 겹마다 다릅니다.
fisheriris 데이터 세트를 불러옵니다. species 변수는 각 꽃(관측값)에 대한 종 이름(클래스)을 포함합니다. species를 categorical형 변수로 변환합니다.
load fisheriris
species = categorical(species);각 클래스에서 관측값의 개수를 구합니다. 세 클래스가 동일한 비율로 발생합니다.
C = categories(species)
C = 3×1 cell
{'setosa' }
{'versicolor'}
{'virginica' }
numClasses = size(C,1); n = countcats(species)
n = 3×1
50
50
50
층화되지 않은 5겹 임의 분할을 생성합니다.
rng(0,"twister") % For reproducibility cv = cvpartition(species,KFold=5,Stratify=false)
cv =
K-fold cross validation partition
NumObservations: 150
NumTestSets: 5
TrainSize: [120 120 120 120 120]
TestSize: [30 30 30 30 30]
IsCustom: 0
IsGrouped: 0
IsStratified: 0
Properties, Methods
세 클래스가 5개의 테스트 세트(또는 겹)에서 동일한 비율로 발생하지 않는 것을 확인해 보겠습니다. for 루프를 사용하여 각 요소 nTestData(i,j)가 테스트 세트 i 및 클래스 C(j)의 관측값 개수에 대응하도록 nTestData 행렬을 업데이트합니다. nTestData의 데이터에서 막대 차트를 생성합니다.
numFolds = cv.NumTestSets; nTestData = zeros(numFolds,numClasses); for i = 1:numFolds testClasses = species(cv.test(i)); nCounts = countcats(testClasses); nTestData(i,:) = nCounts'; end bar(nTestData) xlabel("Test Set (Fold)") ylabel("Number of Observations") title("Nonstratified Partition") legend(C)

클래스 비율이 일부 테스트 세트에서 다르게 나타납니다. 예를 들어, 첫 번째 테스트 세트에는 종마다 10송이씩 있는 것이 아니라 setosa 8송이, versicolor 13송이, virginica 9송이가 포함되어 있습니다. cv는 fisheriris 데이터의 층화되지 않은 임의 분할이기 때문에 테스트 세트(겹) 각각마다 클래스 비율이 species의 클래스 비율과 같다는 보장이 없습니다. 즉, 각각의 테스트 세트에서는 species에서처럼 클래스가 동일하게 나타나지 않습니다.
R2025a 이후
그룹화 변수를 사용하여 cvpartition 객체를 만듭니다. 교차 검증의 요약을 표시합니다.
쓰나미 발생에 관한 데이터를 불러오고 데이터로부터 테이블을 만듭니다. 테이블에 처음 8개 관측값을 표시합니다.
Tbl = readtable("tsunamis.xlsx");
head(Tbl) Latitude Longitude Year Month Day Hour Minute Second ValidityCode Validity CauseCode Cause EarthquakeMagnitude Country Location MaxHeight IidaMagnitude Intensity NumDeaths DescDeaths
________ _________ ____ _____ ___ ____ ______ ______ ____________ _________________________ _________ __________________ ___________________ ___________________ __________________________ _________ _____________ _________ _________ __________
-3.8 128.3 1950 10 8 3 23 NaN 2 {'questionable tsunami' } 1 {'Earthquake' } 7.6 {'INDONESIA' } {'JAVA TRENCH, INDONESIA'} 2.8 1.5 1.5 NaN NaN
19.5 -156 1951 8 21 10 57 NaN 4 {'definite tsunami' } 1 {'Earthquake' } 6.9 {'USA' } {'HAWAII' } 3.6 1.8 NaN NaN NaN
-9.02 157.95 1951 12 22 NaN NaN NaN 2 {'questionable tsunami' } 6 {'Volcano' } NaN {'SOLOMON ISLANDS'} {'KAVACHI' } 6 2.6 NaN NaN NaN
42.15 143.85 1952 3 4 1 22 41 4 {'definite tsunami' } 1 {'Earthquake' } 8.1 {'JAPAN' } {'SE. HOKKAIDO ISLAND' } 6.5 2.7 2 33 1
19.1 -155 1952 3 17 3 58 NaN 4 {'definite tsunami' } 1 {'Earthquake' } 4.5 {'USA' } {'HAWAII' } 1 NaN NaN NaN NaN
43.1 -82.4 1952 5 6 NaN NaN NaN 1 {'very doubtful tsunami'} 9 {'Meteorological'} NaN {'USA' } {'LAKE HURON, MI' } 1.52 NaN NaN NaN NaN
52.75 159.5 1952 11 4 16 58 NaN 4 {'definite tsunami' } 1 {'Earthquake' } 9 {'RUSSIA' } {'KAMCHATKA' } 18 4.2 4 2236 3
50 156.5 1953 3 18 NaN NaN NaN 3 {'probable tsunami' } 1 {'Earthquake' } 5.8 {'RUSSIA' } {'N. KURIL ISLANDS' } 1.5 0.6 NaN NaN NaN
Tbl의 관측값에 대한 5겹 교차 검증에 사용할 층화되지 않은 임의 분할을 생성합니다. GroupingVariables 이름-값 인수를 사용하여 Country 값이 동일한 관측값들이 같은 겹에 있도록 합니다.
rng(0,"twister") % For reproducibility c = cvpartition(size(Tbl,1),KFold=5, ... GroupingVariables=Tbl.Country)
c =
Group k-fold cross validation partition
NumObservations: 162
NumTestSets: 5
TrainSize: [126 130 130 131 131]
TestSize: [36 32 32 31 31]
IsCustom: 0
IsGrouped: 1
IsStratified: 0
Properties, Methods
c는 cvpartition 객체입니다. IsGrouped 속성값은 1(true)이며, 이는 적어도 하나의 그룹화 변수가 객체를 생성하는 데 사용되었음을 나타냅니다.
cvpartition 객체 c의 요약을 표시합니다.
summaryTbl = summary(c)
summaryTbl=150×5 table
Set SetSize GroupLabel GroupCount PercentInSet
________ _______ ___________________ __________ ____________
"train1" 126 {'INDONESIA' } 25 19.841
"train1" 126 {'USA' } 15 11.905
"train1" 126 {'SOLOMON ISLANDS'} 10 7.9365
"train1" 126 {'JAPAN' } 19 15.079
"train1" 126 {'RUSSIA' } 19 15.079
"train1" 126 {'FIJI' } 1 0.79365
"train1" 126 {'GREENLAND' } 1 0.79365
"train1" 126 {'CHILE' } 6 4.7619
"train1" 126 {'GREECE' } 5 3.9683
"train1" 126 {'ECUADOR' } 1 0.79365
"train1" 126 {'VANUATU' } 5 3.9683
"train1" 126 {'TONGA' } 1 0.79365
"train1" 126 {'PHILIPPINES' } 7 5.5556
"train1" 126 {'CANADA' } 1 0.79365
"train1" 126 {'ATLANTIC OCEAN' } 1 0.79365
"train1" 126 {'FRANCE' } 1 0.79365
⋮
summaryTbl의 첫 번째 행은 첫 번째 훈련 세트 Tbl(training(c,1),:)의 126개 관측값 중 25개(약 20%)가 Country 값 INDONESIA를 가지고 있음을 보여줍니다. 소프트웨어는 첫 번째 테스트 세트 Tbl(test(c,1),:)에 이 값을 가진 관측값이 포함되지 않도록 합니다.
첫 번째 테스트 세트의 관측값에 대한 Country 값을 확인합니다.
summaryTest1 = summaryTbl(summaryTbl.Set=="test1",:)summaryTest1=6×5 table
Set SetSize GroupLabel GroupCount PercentInSet
_______ _______ ____________________ __________ ____________
"test1" 36 {'PAPUA NEW GUINEA'} 13 36.111
"test1" 36 {'MEXICO' } 8 22.222
"test1" 36 {'PERU' } 9 25
"test1" 36 {'JAPAN SEA' } 1 2.7778
"test1" 36 {'MONTSERRAT' } 4 11.111
"test1" 36 {'TURKEY' } 1 2.7778
예상대로 첫 번째 테스트 세트에는 Country 값 INDONESIA를 가진 관측값이 포함되어 있지 않습니다.
tall형 배열에 대해 층화되지 않은 홀드아웃 분할과 층화된 홀드아웃 분할을 생성합니다. 두 개의 홀드아웃 세트에 대해, 각 클래스의 관측값 개수를 비교합니다.
tall형 배열에서 계산을 수행할 때, MATLAB®은 병렬 풀(Parallel Computing Toolbox™를 사용할 경우 디폴트 값) 또는 로컬 MATLAB 세션을 사용합니다. Parallel Computing Toolbox가 있는 상태에서 로컬 MATLAB 세션을 사용하여 예제를 실행하려면 mapreducer 함수를 사용하여 전역 실행 환경을 변경하십시오.
mapreducer(0)
두 개의 클래스로 구성된 숫자형 벡터를 생성합니다. 여기서 클래스 1과 클래스 2는 1:10 비율로 나타납니다.
group = [ones(20,1);2*ones(200,1)]
group = 220×1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
⋮
group에서 tall형 배열을 생성합니다.
tgroup = tall(group)
tgroup =
220×1 tall double column vector
1
1
1
1
1
1
1
1
:
:
Holdout은 tall형 배열에 지원되는 유일한 cvpartition 옵션입니다. 층화되지 않은 홀드아웃 임의 분할을 생성합니다.
CV0 = cvpartition(tgroup,Holdout=1/4,Stratify=false)
CV0 =
Hold-out cross validation partition
NumObservations: [M×N×... tall]
NumTestSets: 1
TrainSize: [M×N×... tall]
TestSize: [M×N×... tall]
IsCustom: 0
IsGrouped: 0
IsStratified: 0
Properties, Methods
gather 함수를 사용하여 CV0.test의 결과를 메모리에 반환합니다.
testIdx0 = gather(CV0.test);
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 0.32 sec Evaluation completed in 0.42 sec
각 클래스가 테스트(즉, 홀드아웃) 세트에 나타나는 횟수를 구합니다.
accumarray(group(testIdx0),1)
ans = 2×1
5
51
cvpartition을 사용하면 결과가 임의성을 띠게 되므로 각 클래스의 관측값 개수가 여기에 표시된 결과와 다를 수 있습니다.
CV0은 층화되지 않은 분할이기 때문에 홀드아웃 세트에서 클래스 1 관측값과 클래스 2 관측값이 tgroup에서와 같은 비율로 나타난다는 보장이 없습니다. 하지만, cvpartition의 내재된 임의성으로 인해, Stratify=false를 지정하더라도 홀드아웃 세트에서 클래스가 tgroup에서와 같은 비율로 나타나는 경우가 있습니다. 훈련 세트는 홀드아웃 세트의 보수이므로, NaN 또는 누락 관측값을 제외시켜 훈련 세트에 대해 유사한 결과를 얻을 수 있습니다.
CV0.training의 결과를 메모리에 반환합니다.
trainIdx0 = gather(CV0.training);
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 0.12 sec Evaluation completed in 0.16 sec
훈련 세트에서 각 클래스가 나타나는 횟수를 구합니다.
accumarray(group(trainIdx0),1)
ans = 2×1
15
149
층화되지 않은 훈련 세트의 클래스는 tgroup에서와 같은 비율로 나타난다는 보장이 없습니다.
층화된 홀드아웃 임의 분할을 생성합니다.
CV1 = cvpartition(tgroup,Holdout=1/4)
CV1 =
Hold-out cross validation partition
NumObservations: [M×N×... tall]
NumTestSets: 1
TrainSize: [M×N×... tall]
TestSize: [M×N×... tall]
IsCustom: 0
IsGrouped: 0
IsStratified: 1
Properties, Methods
CV1.test의 결과를 메모리에 반환합니다.
testIdx1 = gather(CV1.test);
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 0.066 sec Evaluation completed in 0.083 sec
각 클래스가 테스트(즉, 홀드아웃) 세트에 나타나는 횟수를 구합니다.
accumarray(group(testIdx1),1)
ans = 2×1
5
51
층화된 홀드아웃 분할의 경우 홀드아웃 세트의 클래스 비율과 tgroup의 클래스 비율은 동일하게 (1:10)입니다.
리브-원-아웃 교차 검증을 위해 임의의 데이터 분할을 생성합니다. 훈련 세트 평균을 계산하고 비교합니다. 어떤 반복에서 평균이 크게 다르게 나올 경우 영향 관측값이 존재함을 의미합니다.
어느 한 값이 나머지 다른 값들보다 훨씬 큰 데이터 세트 X를 생성합니다.
X = [1 2 3 4 5 6 7 8 9 20]';
관측값이 10개이고 훈련 데이터와 테스트 데이터의 반복이 10회인 cvpartition 객체를 생성합니다. cvpartition은 각 반복마다 훈련 세트에서 제외할 관측값을 한 개 선택하여 테스트 세트용으로 남겨둡니다.
c = cvpartition(10,"Leaveout")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]
IsCustom: 0
IsGrouped: 0
IsStratified: 0
Properties, Methods
X에 리브-원-아웃 분할을 적용하고 crossval을 사용하여 각 반복에서 훈련 관측값의 평균을 취합니다.
values = crossval(@(Xtrain,Xtest)mean(Xtrain),X,Partition=c)
values = 10×1
6.5556
6.4444
7.0000
6.3333
6.6667
7.1111
6.8889
6.7778
6.2222
5.0000
상자 차트(또는 상자 플롯)를 사용하여 훈련 세트 평균의 분포를 확인합니다. 플롯은 하나의 이상값을 표시합니다.
boxchart(values)

이상값에 대응하는 반복을 찾습니다. 해당 반복에서 테스트 세트에 들어 있는 관측값을 찾습니다.
[~,repetitionIdx] = min(values)
repetitionIdx = 10
observationIdx = test(c,repetitionIdx); influentialObservation = X(observationIdx)
influentialObservation = 20
이 관측값이 들어 있는 훈련 세트의 평균이 이 관측값이 없는 훈련 세트의 평균과 크게 다릅니다. 이렇게 큰 평균 변화는 X에서 값 20이 영향 관측값임을 나타냅니다.
사용자 지정 4겹 교차 검증 분할을 지정하여 교차 검증된 회귀 트리를 생성합니다.
carbig 데이터 세트를 불러옵니다. 응답 변수 MPG와 예측 변수 Acceleration, Cylinders 등을 포함하는 테이블 Tbl을 생성합니다.
load carbig Tbl = table(Acceleration,Cylinders,Displacement, ... Horsepower,Model_Year,Weight,Origin,MPG);
누락값이 있는 관측값을 제거합니다. 누락값이 있는 관측값을 제거한 후 테이블 데이터의 크기를 확인합니다.
Tbl = rmmissing(Tbl); dimensions = size(Tbl)
dimensions = 1×2
392 8
결과로 생성된 테이블은 392개의 관측값을 포함하며, 입니다.
Tbl 데이터의 사용자 지정 4겹 교차 검증 분할을 생성합니다. 처음 98개 관측값은 첫 번째 테스트 세트에 배치하고, 그 다음 98개 관측값은 두 번째 테스트 세트에 배치하는 식으로 수행합니다.
testSet = ones(98,1);
testIndices = [testSet; 2*testSet; ...
3*testSet; 4*testSet];
c = cvpartition(CustomPartition=testIndices)c =
K-fold cross validation partition
NumObservations: 392
NumTestSets: 4
TrainSize: [294 294 294 294]
TestSize: [98 98 98 98]
IsCustom: 1
IsGrouped: 0
IsStratified: 0
Properties, Methods
사용자 지정 분할 c를 사용하여, 교차 검증된 회귀 트리를 훈련시킵니다. 모델 성능을 평가하기 위해 교차 검증 MSE(평균제곱오차)를 계산합니다.
cvMdl = fitrtree(Tbl,"MPG",CVPartition=c);
cvMSE = kfoldLoss(cvMdl)cvMSE = 21.2223
팁
stratvar을cvpartition에 대한 첫 번째 입력 인수로 지정하는 경우, 함수는stratvar에서 누락값에 대응되는 관측값의 행을 버립니다. 마찬가지로groupingVariables를 사용하여 하나 이상의 그룹화 변수를 지정하는 경우, 함수는groupingVariables에서 누락값에 대응되는 관측값의 행을 버립니다.stratvar을cvpartition에 대한 첫 번째 입력 인수로 지정하는 경우, 함수는 기본적으로 층화를 구현합니다.Stratify=false를 지정하여 층화되지 않은 임의 분할을 생성할 수 있습니다.Stratify=true는cvpartition에 대한 첫 번째 입력 인수가stratvar인 경우에만 지정할 수 있습니다.
확장 기능
cvpartition 함수는 메모리에 담을 수 없는 데이터에 대한 tall형 배열을 지원하지만 다음과 같은 몇 가지 제한 사항이 있습니다.
cvpartition에 tall형 배열을 사용하는 경우 첫 번째 입력 인수는 층화 변수tstratvar이어야 합니다. tall형 스칼라를 첫 번째 입력 인수로 지정하면cvpartition에서 오류를 발생시킵니다.cvpartition은 tall형 배열에 대한Holdout교차 검증만 지원합니다(예:c = cvpartition(tstratvar,Holdout=p)). 기본적으로cvpartition은tstratvar의 클래스 정보를 사용하여 관측값을 층화된 훈련 세트 하나와 테스트 세트 하나로 임의로 분할합니다. 모수p는0 < p < 1을 충족하는 스칼라입니다.층화되지 않은
Holdout분할을 생성하려면Stratify이름-값 인수에 대한 값을false로 지정해야 합니다(예:c = cvpartition(tstratvar,Holdout=p,Stratify=false)).
자세한 내용은 메모리에 담을 수 없는 큰 데이터를 위한 tall형 배열 항목을 참조하십시오.
버전 내역
R2008a에 개발됨cvpartition 함수는 그룹 k겹 교차 검증 분할을 만드는 것을 지원합니다. 이러한 유형의 분할을 만들려면 GroupingVariables=를 지정하십시오. 이때 groupingVariablesgroupingVariables는 하나 이상의 그룹화 변수를 포함해야 합니다. 층화 변수 stratvar을 사용하면 그룹화 변수를 지정할 수 없습니다.
cvpartition 객체에는 2개의 추가 속성 IsGrouped와 IsStratified가 있습니다. 두 속성값 중 하나라도 1(true)인 경우에는 summary 객체 함수를 사용하여 해당 객체에 대한 요약 정보를 표시할 수 있습니다.
cvpartition 함수가 사용자 지정 교차 검증 분할을 생성할 수 있습니다. CustomPartition 이름-값 인수를 사용하여 테스트 세트 관측값을 지정합니다. 예를 들어 cvpartition("CustomPartition",testSets)는 testSets에 있는 테스트 세트를 기반으로 데이터를 분할하도록 지정합니다. 결과로 생성된 cvpartition 객체의 IsCustom 속성은 1(true)로 설정됩니다.
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)