fitcknn
k-최근접이웃 분류기 피팅
구문
설명
은 테이블 Mdl = fitcknn(Tbl,ResponseVarName)Tbl에 포함된 입력 변수(예측 변수, 특징 또는 특성이라고도 함)와 출력값(응답 변수) Tbl.ResponseVarName을 기반으로 하여 k-최근접이웃 분류 모델을 반환합니다.
는 위에 열거된 구문 중 하나를 사용하여 하나 이상의 이름-값 인수로 지정된 추가 옵션으로 모델을 피팅합니다. 예를 들어, 우선 순위 결정(Tie-Breaking) 알고리즘, 거리 측정법 또는 관측값 가중치를 지정할 수 있습니다.Mdl = fitcknn(___,Name=Value)
[은 사용자가 Mdl,AggregateOptimizationResults] = fitcknn(___)OptimizeHyperparameters 이름-값 인수와 HyperparameterOptimizationOptions 이름-값 인수를 지정하는 경우 하이퍼파라미터 최적화 결과를 포함하는 AggregateOptimizationResults도 반환합니다. HyperparameterOptimizationOptions의 ConstraintType 옵션과 ConstraintBounds 옵션도 지정해야 합니다. 이 구문을 사용하면 교차 검증 손실 대신에 간소 모델 크기에 대해 최적화하고, 옵션은 동일하지만 제약 조건 범위가 다른 여러 최적화 문제 세트를 수행할 수 있습니다.
예제
피셔(Fisher)의 붓꽃 데이터를 사용하여 k-최근접이웃 분류기를 훈련시킵니다. 여기서 k는 예측 변수에 포함된 최근접이웃의 개수로 5입니다.
피셔의 붓꽃 데이터를 불러옵니다.
load fisheriris
X = meas;
Y = species;X는 150개 붓꽃에 대한 4개의 측정값을 포함하는 숫자형 행렬입니다. Y는 이에 대응되는 붓꽃 종을 포함하는 문자형 벡터로 구성된 셀형 배열입니다.
5-최근접이웃 분류기를 훈련시킵니다. 비범주형 예측 변수 데이터를 표준화합니다.
Mdl = fitcknn(X,Y,NumNeighbors=5,Standardize=true)
Mdl =
ClassificationKNN
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: {'setosa' 'versicolor' 'virginica'}
ScoreTransform: 'none'
NumObservations: 150
Distance: 'euclidean'
NumNeighbors: 5
Properties, Methods
Mdl은 훈련된 ClassificationKNN 분류기입니다.
Mdl의 속성에 액세스하려면 점 표기법을 사용하십시오.
Mdl.ClassNames
ans = 3×1 cell
{'setosa' }
{'versicolor'}
{'virginica' }
Mdl.Prior
ans = 1×3
0.3333 0.3333 0.3333
Mdl.Prior는 fitcknn에서 Prior 이름-값 인수를 사용하여 지정할 수 있는 클래스 사전 확률을 포함합니다. 클래스 사전 확률의 순서는 Mdl.ClassNames에 포함된 클래스의 순서와 일치합니다. 기본적으로, 사전 확률은 데이터에서 이러한 클래스가 나타날 각각의 상대 도수입니다.
훈련을 수행한 후 사전 확률을 재설정할 수도 있습니다. 예를 들어, 사전 확률을 각각 0.5, 0.2, 0.3으로 설정합니다.
Mdl.Prior = [0.5 0.2 0.3];
Mdl을 predict에 전달하여 새 측정값에 레이블을 지정하거나 crossval에 전달하여 분류기를 교차 검증할 수 있습니다.
민코프스키 거리 측정법을 사용하여 k-최근접이웃 분류기를 훈련시킵니다.
피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다.
load fisheriris
X = meas;
Y = species;X는 150개 붓꽃에 대한 4개의 측정값을 포함하는 숫자형 행렬입니다. Y는 이에 대응되는 붓꽃 종을 포함하는 문자형 벡터로 구성된 셀형 배열입니다.
민코프스키 측정법을 사용하여 3-최근접이웃 분류기를 훈련시킵니다. 민코프스키 측정법을 사용하려면 완전 탐색기를 사용해야 합니다. 비범주형 예측 변수 데이터를 표준화합니다.
Mdl = fitcknn(X,Y,NumNeighbors=3, ... NSMethod="exhaustive",Distance="minkowski", ... Standardize=true);
Mdl은 ClassificationKNN 분류기입니다.
Mdl을 훈련시키는 데 사용되는 민코프스키 거리 지수를 구합니다.
Mdl.DistParameter
ans = 2
ClassificationKNN 객체를 만든 후에 거리 파라미터를 수정할 수 있습니다. 예를 들어, 민코프스키 거리 지수를 4로 설정합니다.
Mdl.DistParameter = 4; Mdl.DistParameter
ans = 4
카이제곱 거리를 사용하여 k-최근접이웃 분류기를 훈련시킵니다.
피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다.
load fisheriris
X = meas;
Y = species;j차원 점 x와 z 간의 카이제곱 거리는 다음과 같습니다.
여기서 는 차원 j와 연결된 가중치입니다.
카이제곱 거리 함수를 지정합니다. 거리 함수는 다음과 같아야 합니다.
X의 한 행(예:x)과 행렬Z를 받습니다.x를Z의 각 행과 비교합니다.길이가 인 벡터
D를 반환합니다. 여기서 는Z의 행 개수입니다.D의 각 요소는x에 대응하는 관측값과Z의 각 행에 대응하는 관측값 간의 거리입니다.
chiSqrDist = @(x,Z,wt)sqrt(((x-Z).^2)*wt);
이 예제에서는 설명을 위해 임의의 가중치를 사용합니다.
3-최근접이웃 분류기를 훈련시킵니다. 비범주형 예측 변수 데이터는 표준화하는 것이 좋습니다.
k = 3;
w = [0.3; 0.3; 0.2; 0.2];
KNNMdl = fitcknn(X,Y,Distance=@(x,Z)chiSqrDist(x,Z,w), ...
NumNeighbors=k,Standardize=true);KNNMdl은 ClassificationKNN 분류기입니다.
디폴트 10겹 교차 검증을 사용하여 KNN 분류기를 교차 검증합니다. 분류 오차를 추정합니다.
rng(1); % For reproducibility
CVKNNMdl = crossval(KNNMdl);
classError = kfoldLoss(CVKNNMdl)classError = 0.0600
CVKNNMdl은 ClassificationPartitionedModel 분류기입니다.
이 분류기를 다른 가중치 부여 방식을 사용하는 분류기와 비교합니다.
w2 = [0.2; 0.2; 0.3; 0.3];
CVKNNMdl2 = fitcknn(X,Y,Distance=@(x,Z)chiSqrDist(x,Z,w2), ...
NumNeighbors=k,KFold=10,Standardize=true);
classError2 = kfoldLoss(CVKNNMdl2)classError2 = 0.0400
두 번째 가중치 부여 방식은 표본외 성능이 더 좋은 분류기를 생성합니다.
fitcknn을 사용하여 k-최근접이웃 분류기의 하이퍼파라미터를 자동으로 최적화합니다.
fisheriris 데이터 세트를 불러옵니다.
load fisheriris
X = meas;
Y = species;자동 하이퍼파라미터 최적화를 사용하여 5겹 교차 검증 손실을 최소화하는 하이퍼파라미터를 구합니다.
재현이 가능하도록 난수 시드값을 설정하고 "expected-improvement-plus" 획득 함수를 사용합니다.
rng(1) Mdl = fitcknn(X,Y,OptimizeHyperparameters="auto", ... HyperparameterOptimizationOptions= ... struct(AcquisitionFunctionName="expected-improvement-plus"))
|====================================================================================================================|
| Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | NumNeighbors | Distance | Standardize |
| | result | | runtime | (observed) | (estim.) | | | |
|====================================================================================================================|
| 1 | Best | 0.04 | 0.41715 | 0.04 | 0.04 | 13 | minkowski | true |
| 2 | Accept | 0.19333 | 0.19157 | 0.04 | 0.046097 | 1 | correlation | true |
| 3 | Accept | 0.053333 | 0.081495 | 0.04 | 0.047573 | 14 | chebychev | true |
| 4 | Accept | 0.046667 | 0.068536 | 0.04 | 0.041053 | 2 | minkowski | false |
| 5 | Accept | 0.053333 | 0.053916 | 0.04 | 0.046782 | 7 | minkowski | true |
| 6 | Accept | 0.10667 | 0.12176 | 0.04 | 0.046422 | 2 | mahalanobis | false |
| 7 | Accept | 0.093333 | 0.044255 | 0.04 | 0.040581 | 75 | minkowski | false |
| 8 | Accept | 0.15333 | 0.04828 | 0.04 | 0.040008 | 75 | minkowski | true |
| 9 | Best | 0.02 | 0.056142 | 0.02 | 0.02001 | 4 | minkowski | false |
| 10 | Accept | 0.026667 | 0.046662 | 0.02 | 0.020012 | 8 | minkowski | false |
| 11 | Accept | 0.21333 | 0.050638 | 0.02 | 0.020008 | 69 | chebychev | true |
| 12 | Accept | 0.053333 | 0.045234 | 0.02 | 0.020009 | 5 | chebychev | true |
| 13 | Accept | 0.053333 | 0.059507 | 0.02 | 0.020009 | 1 | chebychev | true |
| 14 | Accept | 0.053333 | 0.074969 | 0.02 | 0.020008 | 5 | seuclidean | false |
| 15 | Accept | 0.053333 | 0.048708 | 0.02 | 0.020008 | 21 | seuclidean | false |
| 16 | Accept | 0.053333 | 0.046055 | 0.02 | 0.020009 | 1 | seuclidean | false |
| 17 | Accept | 0.15333 | 0.046417 | 0.02 | 0.020007 | 75 | seuclidean | false |
| 18 | Accept | 0.02 | 0.046131 | 0.02 | 0.019969 | 5 | minkowski | false |
| 19 | Accept | 0.33333 | 0.091216 | 0.02 | 0.019898 | 2 | spearman | false |
| 20 | Accept | 0.23333 | 0.045818 | 0.02 | 0.019888 | 71 | mahalanobis | false |
|====================================================================================================================|
| Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | NumNeighbors | Distance | Standardize |
| | result | | runtime | (observed) | (estim.) | | | |
|====================================================================================================================|
| 21 | Accept | 0.046667 | 0.043897 | 0.02 | 0.019895 | 1 | cityblock | true |
| 22 | Accept | 0.053333 | 0.041483 | 0.02 | 0.019892 | 6 | cityblock | true |
| 23 | Accept | 0.12 | 0.052464 | 0.02 | 0.019895 | 75 | cityblock | true |
| 24 | Accept | 0.06 | 0.052353 | 0.02 | 0.019903 | 2 | cityblock | false |
| 25 | Accept | 0.033333 | 0.044571 | 0.02 | 0.019899 | 17 | cityblock | false |
| 26 | Accept | 0.12 | 0.041868 | 0.02 | 0.019907 | 74 | cityblock | false |
| 27 | Accept | 0.033333 | 0.048068 | 0.02 | 0.019894 | 7 | cityblock | false |
| 28 | Accept | 0.02 | 0.048772 | 0.02 | 0.019897 | 1 | chebychev | false |
| 29 | Accept | 0.02 | 0.051426 | 0.02 | 0.019891 | 4 | chebychev | false |
| 30 | Accept | 0.08 | 0.044348 | 0.02 | 0.019891 | 28 | chebychev | false |
__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 11.3991 seconds
Total objective function evaluation time: 2.1537
Best observed feasible point:
NumNeighbors Distance Standardize
____________ _________ ___________
4 minkowski false
Observed objective function value = 0.02
Estimated objective function value = 0.020124
Function evaluation time = 0.056142
Best estimated feasible point (according to models):
NumNeighbors Distance Standardize
____________ _________ ___________
5 minkowski false
Estimated objective function value = 0.019891
Estimated function evaluation time = 0.059452

Mdl =
ClassificationKNN
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: {'setosa' 'versicolor' 'virginica'}
ScoreTransform: 'none'
NumObservations: 150
HyperparameterOptimizationResults: [1×1 BayesianOptimization]
Distance: 'minkowski'
NumNeighbors: 5
Properties, Methods
훈련된 분류기 Mdl은 최선의 추정된 실현가능점에 대응되며 NumNeighbors, Distance, Standardize에 대해 동일한 하이퍼파라미터 값을 사용합니다.
결과를 확인합니다. ClassificationKNN 객체의 Mu 속성과 Sigma 속성은 k-최근접이웃 분류기가 표준화를 사용하지 않는 경우 비어 있다는 점에 유의하십시오.
bestEstimatedPoint = bestPoint(Mdl.HyperparameterOptimizationResults, ... Criterion="min-visited-upper-confidence-interval")
bestEstimatedPoint=1×3 table
NumNeighbors Distance Standardize
____________ _________ ___________
5 minkowski false
classifierProperties = table(Mdl.NumNeighbors,string(Mdl.Distance), ... struct(Means=Mdl.Mu,StandardDeviations=Mdl.Sigma), ... VariableNames=["NumNeighbors","Distance","Standardize"])
classifierProperties=1×3 table
NumNeighbors Distance Standardize
____________ ___________ ___________
5 "minkowski" 1×1 struct
classifierProperties.Standardize
ans = struct with fields:
Means: []
StandardDeviations: []
입력 인수
모델을 훈련시키는 데 사용되는 표본 데이터로, 테이블로 지정됩니다. Tbl의 각 행은 하나의 관측값에 대응되고, 각 열은 하나의 예측 변수에 대응됩니다. 선택적으로, Tbl은 응답 변수에 대해 하나의 추가 열을 포함할 수 있습니다. 문자형 벡터로 구성된 셀형 배열 이외의 셀형 배열과 다중 열 변수는 허용되지 않습니다.
Tbl이 응답 변수를 포함하며Tbl의 나머지 모든 변수를 예측 변수로 사용하려는 경우ResponseVarName을 사용하여 응답 변수를 지정하십시오.Tbl이 응답 변수를 포함하며Tbl의 나머지 변수 중 일부만 예측 변수로 사용하려는 경우formula를 사용하여 공식을 지정하십시오.Tbl이 응답 변수를 포함하지 않는 경우Y를 사용하여 응답 변수를 지정하십시오. 응답 변수의 길이와Tbl의 행 개수는 동일해야 합니다.
응답 변수 이름으로, Tbl의 변수 이름으로 지정됩니다.
ResponseVarName은 문자형 벡터나 string형 스칼라로 지정해야 합니다. 예를 들어, 응답 변수 Y가 Tbl.Y로 저장된 경우 이를 "Y"로 지정하십시오. 이렇게 하지 않으면 모델을 훈련시킬 때 Y를 포함한 Tbl의 모든 열이 예측 변수로 처리됩니다.
응답 변수는 categorical형 배열, 문자형 배열, string형 배열, 논리형 벡터 또는 숫자형 벡터, 문자형 벡터로 구성된 셀형 배열이어야 합니다. Y가 문자형 배열인 경우, 응답 변수의 각 요소는 배열의 각 행에 대응되어야 합니다.
ClassNames 이름-값 인수를 사용하여 클래스의 순서를 지정하는 것이 좋습니다.
데이터형: char | string
응답 변수, 그리고 예측 변수의 부분 집합에 대한 설명 모델로, "Y~x1+x2+x3" 형식의 문자형 벡터나 string형 스칼라로 지정됩니다. 이 형식에서 Y는 응답 변수를 나타내고, x1, x2, x3은 예측 변수를 나타냅니다.
Tbl의 일부 변수를 모델 훈련에 사용할 예측 변수로 지정하려면 식을 사용하십시오. 사용자가 식을 지정하면 Tbl의 변수 중 해당 formula에 표시되지 않은 변수는 사용되지 않습니다.
식에 포함되는 변수 이름은 Tbl에 포함된 변수 이름(Tbl.Properties.VariableNames)이면서 동시에 유효한 MATLAB® 식별자여야 합니다. isvarname 함수를 사용하여 Tbl에 포함된 변수 이름을 확인할 수 있습니다. 변수 이름이 유효하지 않으면 matlab.lang.makeValidName 함수를 사용하여 변수 이름을 변환할 수 있습니다.
데이터형: char | string
클래스 레이블로, categorical형 배열, 문자형 배열, string형 배열, 논리형 벡터, 숫자형 벡터 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. Y의 각 행은 이에 대응되는 X 행의 분류를 나타냅니다.
Y의 NaN, ''(빈 문자형 벡터), ""(빈 string형), <missing>, <undefined> 값은 누락값으로 간주됩니다. 따라서 누락 응답 변수가 있는 관측값은 훈련에 사용하지 않습니다.
데이터형: categorical | char | string | logical | single | double | cell
예측 변수 데이터로, 숫자형 행렬로 지정됩니다.
각 행은 하나의 관측값(발생 건 또는 예라고도 함)에 대응되고, 각 열은 하나의 예측 변수(특징이라고도 함)에 대응됩니다.
Y의 길이와 X의 행 개수는 동일해야 합니다.
X에 나오는 순서로 예측 변수의 이름을 지정하려면 PredictorNames 이름-값 쌍의 인수를 사용하십시오.
데이터형: double | single
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
예: fitcknn(Tbl,Y,NumNeighbors=3,NSMethod="exhaustive",Distance="minkowski")는 최근접이웃 탐색 방법과 민코프스키 측정법을 사용하여 3-최근접이웃을 위한 분류기를 지정합니다.
참고
교차 검증 이름-값 인수는 OptimizeHyperparameters 이름-값 인수와 함께 사용할 수 없습니다. OptimizeHyperparameters에 대한 교차 검증을 수정하려면 HyperparameterOptimizationOptions 이름-값 인수를 사용해야만 합니다.
모델 파라미터
여러 클래스가 동일한 최소 비용을 갖는 경우 predict 방법에서 사용하는 우선 순위 결정 알고리즘으로, 다음 중 하나로 지정됩니다.
"smallest"— 동점인 그룹 중에서 가장 작은 인덱스를 사용합니다."nearest"— 동점인 그룹 중에서 최근접이웃을 갖는 클래스를 사용합니다."random"— 동점인 그룹 중에서 무작위로 하나를 선택하는 우선 순위 판별법을 사용합니다.
기본적으로, 총 k개 최근접이웃이 주어졌을 때 서로 같은 개수의 최근접이웃 점을 가지는 복수의 클래스가 존재하면 동순위(Tie)가 발생합니다.
예: BreakTies="nearest"
Kd-트리의 리프 노드에 포함된 데이터 점의 최대 개수로, 양의 정수 값으로 지정됩니다. 이 인수는 NSMethod가 "kdtree"인 경우에만 유효합니다.
예: BucketSize=40
데이터형: single | double
R2025a 이후
그람 행렬에 할당되는 메가바이트 단위의 캐시 크기로, "maximal" 또는 양의 스칼라로 지정됩니다. Distance 값이 fast로 시작하는 경우에만 CacheSize를 사용할 수 있습니다.
CacheSize 값이 "maximal"이면, 예측 시 소프트웨어는 크기가 n×m인 그람 행렬에 대해 충분한 메모리를 할당하려고 시도합니다. 여기서 n은 훈련 예측 변수 데이터(X 또는 Tbl)의 행 개수이고 m은 테스트 예측 변수 데이터의 행 개수입니다. 캐시 크기는 그람 행렬을 담을 만큼 크지 않아도 되지만 적어도 n×1 벡터를 유지할 수 있을 만큼 커야 합니다. 그렇지 않은 경우 통상적인 알고리즘을 사용하여 유클리드 거리를 계산하게 됩니다.
Distance 값이 fast로 시작하고 CacheSize가 너무 크거나 "maximal"이면 사용 가능한 메모리를 초과하는 그람 행렬을 할당하려고 시도할 수 있습니다. 이 경우, 소프트웨어가 오류를 발생시킵니다.
예: CacheSize="maximal"
데이터형: single | double | char | string
범주형 예측 변수를 나타내는 플래그로, 다음 중 하나로 지정됩니다.
"all"— 모든 예측 변수가 범주형 변수입니다.[]— 범주형 변수인 예측 변수가 없습니다.
fitcknn의 예측 변수 데이터는 모두 연속형이거나 모두 범주형이어야 합니다.
예측 변수 데이터가 테이블(
Tbl) 내에 있는 경우, 변수가 논리형 벡터, categorical형 벡터, 문자형 배열, string형 배열 또는 문자형 벡터로 구성된 셀형 배열이면fitcknn함수는 그 변수를 범주형 변수라고 가정합니다.Tbl에 연속된 값과 범주형 값이 모두 포함된 경우에는CategoricalPredictors의 값을 지정해야 합니다. 그러면fitcknn함수가 모든 예측 변수를 연속형 변수로 처리할지 범주형 변수로 처리할지 결정할 수 있습니다.예측 변수 데이터가 행렬(
X)이면fitcknn함수는 모든 예측 변수를 연속형 변수라고 가정합니다.X에 포함된 모든 예측 변수를 범주형으로 식별하려면CategoricalPredictors를"all"로 지정하십시오.
CategoricalPredictors를 "all"로 설정할 경우 디폴트 Distance는 "hamming"입니다.
예: CategoricalPredictors="all"
훈련에 사용할 클래스의 이름으로, categorical형 배열, 문자형 배열, string형 배열, 논리형 벡터 또는 숫자형 벡터, 문자형 벡터로 구성된 셀형 배열로 지정됩니다. ClassNames는 Tbl의 응답 변수 또는 Y와 같은 데이터형이어야 합니다.
ClassNames가 문자형 배열인 경우, 각 요소는 배열의 각 행에 대응되어야 합니다.
ClassNames를 사용하여 다음을 수행할 수 있습니다.
훈련 중의 클래스 순서를 지정합니다.
입력 인수 차원 또는 출력 인수 차원의 순서를 지정합니다. 이 순서는 클래스 순서와 일치합니다. 예를 들어,
ClassNames를 사용하여Cost차원의 순서나predict로 반환되는 분류 점수의 열 순서를 지정할 수 있습니다.훈련에 사용할 클래스의 일부를 선택합니다. 예를 들어,
Y에 포함된 모든 고유한 클래스 이름의 집합이["a","b","c"]라고 가정해 보겠습니다. 클래스"a"와"c"의 관측값만 사용하여 모델을 훈련시키려면ClassNames=["a","c"]를 지정하십시오.
ClassNames의 디폴트 값은 Tbl의 응답 변수 또는 Y에 포함된 모든 고유한 클래스 이름의 집합입니다.
예: ClassNames=["b","g"]
데이터형: categorical | char | string | logical | single | double | cell
점의 오분류 비용으로, 다음 중 하나로 지정됩니다.
정사각 행렬로, 여기서
Cost(i,j)는 특정 점의 실제 클래스가i일 때 이 점을j클래스로 분류하는 비용입니다(즉, 행은 실제 클래스에 대응되고 열은 예측 클래스에 대응됨).Cost의 대응 행과 대응 열에 대한 클래스 순서를 지정하려면ClassNames이름-값 쌍의 인수도 지정하십시오.다음 두 개의 필드를 갖는 구조체
S:Y와 같은 유형의 변수로 그룹 이름을 포함하는S.ClassNames와 비용 행렬을 포함하는S.ClassificationCosts.
디폴트 값은 i~=j인 경우 Cost(i,j)=1이고, i=j인 경우 Cost(i,j)=0입니다.
데이터형: single | double | struct
공분산 행렬로, 마할라노비스 거리를 계산할 때의 공분산 행렬을 나타내는 스칼라 값으로 구성된 양의 정부호 행렬로 지정됩니다. 이 인수는 Distance가 "mahalanobis"인 경우에만 유효합니다.
Standardize를 Scale 또는 Cov와 동시에 지정할 수 없습니다.
데이터형: single | double
거리 측정법으로, 유효한 거리 측정법 이름 또는 함수 핸들로 지정됩니다. 허용되는 거리 측정법 이름은 선택한 이웃 탐색 방법에 따라 달라집니다(NSMethod 참조).
NSMethod 값 | 거리 측정법 이름 |
|---|---|
"exhaustive" | ExhaustiveSearcher의 모든 거리 측정법 |
"kdtree" | "cityblock", "chebychev", "euclidean" 또는 "minkowski" |
다음 표에는 ExhaustiveSearcher의 유효한 거리 측정법이 나와 있습니다.
| 거리 측정법 이름 | 설명 |
|---|---|
"cityblock" | 도시 블록 거리입니다. |
"chebychev" | 체비쇼프 거리(최대 좌표 차이)입니다. |
"correlation" | 1에서 관측값 간의 표본 선형 상관관계를 뺀 값입니다(일련의 값으로 처리됨). |
"cosine" | 1에서 관측값 간의 끼인각에 대한 코사인을 뺀 값입니다(벡터로 처리됨). |
"euclidean" | 유클리드 거리입니다. |
| 예측 변수 개수가 10개 이상인 경우 시간을 아끼는 대체 알고리즘을 사용하여 계산된 유클리드 거리입니다. 속도가 더 빠른 이 알고리즘은 정확도가 떨어질 수 있습니다. fast로 시작하는 알고리즘은 희소 형식 데이터를 지원하지 않습니다. 자세한 내용은 고속 유클리드 거리 알고리즘 항목을 참조하십시오. |
| 예측 변수 개수가 10개 이상인 경우 시간을 아끼는 대체 알고리즘을 사용하여 계산된 표준화된 유클리드 거리입니다. 속도가 더 빠른 이 알고리즘은 정확도가 떨어질 수 있습니다. fast로 시작하는 알고리즘은 희소 형식 데이터를 지원하지 않습니다. 자세한 내용은 고속 유클리드 거리 알고리즘 항목을 참조하십시오. |
"hamming" | 해밍 거리로, 서로 다른 좌표의 백분율입니다. |
"jaccard" | 0이 아닌 두 좌표의 값이 서로 다른 비율인 자카드 계수를 1에서 뺀 값입니다. |
"mahalanobis" | 마할라노비스 거리로, 양의 정부호 공분산 행렬 C를 사용하여 계산됩니다. C의 디폴트 값은 X의 표본 공분산 행렬로, cov(X,"omitrows")로 계산됩니다. C에 다른 값을 지정하려면 Cov 이름-값 인수를 사용하십시오. |
"minkowski" | 민코프스키 거리입니다. 디폴트 지수는 2입니다. 다른 지수를 지정하려면 Exponent 이름-값 인수를 사용하십시오. |
"seuclidean" | 표준화된 유클리드 거리입니다. X와 쿼리 점 간의 각 좌표 차이는 스케일링됩니다. 즉, 스케일 값 S로 나누어집니다. S의 디폴트 값은 X에서 계산된 표준편차 S = std(X,"omitnan")입니다. S에 다른 값을 지정하려면 Scale 이름-값 인수를 사용하십시오. |
"spearman" | 1에서 관측값 간 표본 스피어만의 순위 상관 계수를 뺀 값입니다(일련의 값으로 처리됨). |
@ | 거리 함수 핸들입니다. function D2 = distfun(ZI,ZJ) % calculation of distance ...
|
CategoricalPredictors를 "all"로 지정하면 디폴트 거리 측정법은 "hamming"입니다. 그렇지 않은 경우 디폴트 거리 측정법은 "euclidean"입니다.
자세한 내용은 거리 측정법 항목을 참조하십시오.
예: Distance="minkowski"
데이터형: char | string | function_handle
거리 가중치 함수로, 함수 핸들 또는 다음 표에 나와 있는 값 중 하나로 지정됩니다.
| 값 | 설명 |
|---|---|
"equal" | 가중치 없음 |
"inverse" | 가중치: 1/거리 |
"squaredinverse" | 가중치: 1/거리2 |
@ | fcn은 음이 아닌 거리로 구성된 행렬을 받아 음이 아닌 거리 가중치를 포함하는 동일한 크기의 행렬을 반환하는 함수입니다. 예를 들어, "squaredinverse"는 @(d)d.^(-2)와 동일합니다. |
예: DistanceWeight="inverse"
데이터형: char | string | function_handle
민코프스키 거리 지수로, 양의 스칼라 값으로 지정됩니다. 이 인수는 Distance가 "minkowski"인 경우에만 유효합니다.
예: Exponent=3
데이터형: single | double
동순위 포함 플래그로, k번째로 작은 거리와 거리 값이 같은 모든 이웃을 predict가 포함하는지 여부를 나타내는 논리값으로 지정됩니다. IncludeTies가 true인 경우 predict는 이러한 이웃을 모두 포함합니다. 그렇지 않은 경우 predict는 정확히 k개 이웃을 사용합니다.
예: IncludeTies=true
데이터형: logical
최근접이웃 탐색 방법으로, "kdtree" 또는 "exhaustive"로 지정됩니다.
"kdtree"— Kd-트리를 생성하고 이를 사용하여 최근접이웃을 찾습니다."kdtree"는 거리 측정법이 다음 중 하나인 경우에 유효합니다."euclidean""cityblock""minkowski""chebychev"
"exhaustive"— 완전 탐색 알고리즘을 사용합니다. 새 점xnew의 클래스를 예측할 때X의 모든 점에서xnew까지의 거리 값을 계산하여 최근접이웃을 찾습니다.
X가 10개 이하의 열을 갖고 X가 희소 행렬이나 gpuArray가 아니며 거리 측정법이 "kdtree" 유형인 경우 디폴트 값은 "kdtree"이고 그렇지 않은 경우 "exhaustive"입니다.
예: NSMethod="exhaustive"
예측 시 각 점을 분류하기 위해 X에서 찾을 최근접이웃의 개수로, 양의 정수 값으로 지정됩니다.
예: NumNeighbors=3
데이터형: single | double
예측 변수 이름으로, 고유한 이름으로 구성된 string형 배열 또는 고유한 문자형 벡터로 구성된 셀형 배열로 지정됩니다. PredictorNames의 기능은 훈련 데이터를 어떤 방식으로 제공하느냐에 따라 달라집니다.
X와Y를 제공하는 경우,PredictorNames를 사용하여X의 예측 변수에 이름을 할당할 수 있습니다.PredictorNames의 이름의 순서는X의 열 순서와 일치해야 합니다. 즉,PredictorNames{1}은X(:,1)의 이름이고,PredictorNames{2}는X(:,2)의 이름이 되는 식입니다. 또한,size(X,2)와numel(PredictorNames)는 같아야 합니다.기본적으로
PredictorNames는{'x1','x2',...}입니다.
Tbl을 제공하는 경우,PredictorNames를 사용하여 훈련에 사용할 예측 변수를 선택할 수 있습니다. 즉,fitcknn함수는PredictorNames의 예측 변수와 이에 대한 응답 변수만을 훈련 중에 사용합니다.PredictorNames는Tbl.Properties.VariableNames의 부분 집합이어야 하므로 응답 변수의 이름은 포함할 수 없습니다.기본적으로,
PredictorNames는 모든 예측 변수의 이름을 포함합니다.PredictorNames와formula중 하나만 사용하여 훈련에 사용할 예측 변수를 지정하는 것이 좋습니다.
예: "PredictorNames",["SepalLength","SepalWidth","PetalLength","PetalWidth"]
데이터형: string | cell
각 클래스의 사전 확률로, 다음 표에 나와 있는 값으로 지정됩니다.
| 값 | 설명 |
|---|---|
"empirical" | 클래스 사전 확률은 Y의 클래스 상대 도수입니다. |
"uniform" | 모든 클래스 사전 확률은 1/K와 같습니다. 여기서 K는 클래스 개수입니다. |
| 숫자형 벡터 | 각 요소는 클래스 사전 확률입니다. Mdl.ClassNames에 따라 요소의 순서를 지정하거나 ClassNames 이름-값 쌍의 인수를 사용하여 순서를 지정합니다. 소프트웨어는 합이 1이 되도록 요소를 정규화합니다. |
| 구조체 | 다음과 같은 두 개의 필드를 갖는 구조체
|
Weights와 Prior 모두에 값을 설정하면 합이 각 클래스의 사전 확률 값이 되도록 가중치가 다시 정규화됩니다.
예: Prior="uniform"
데이터형: char | string | single | double | struct
응답 변수 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.
Y를 제공하는 경우,ResponseName을 사용하여 응답 변수의 이름을 지정할 수 있습니다.ResponseVarName또는formula를 제공하는 경우에는ResponseName을 사용할 수 없습니다.
예: ResponseName="response"
데이터형: char | string
거리 척도로, X의 열 개수와 동일한 길이의, 음이 아닌 스칼라 값을 포함하는 벡터로 지정됩니다. X와 쿼리 점 간의 각 좌표의 차이는 Scale의 대응되는 요소만큼 스케일링됩니다. 이 인수는 Distance가 "seuclidean"인 경우에만 유효합니다.
Standardize를 Scale 또는 Cov와 동시에 지정할 수 없습니다.
데이터형: single | double
점수 변환 방식으로, 문자형 벡터, string형 스칼라 또는 함수 핸들로 지정됩니다.
다음 표에는 사용 가능한 문자형 벡터와 string형 스칼라가 요약되어 있습니다.
| 값 | 설명 |
|---|---|
"doublelogit" | 1/(1 + e–2x) |
"invlogit" | log(x / (1 – x)) |
"ismax" | 최대 점수를 갖는 클래스의 점수를 1로 설정하고, 다른 모든 클래스의 점수를 0으로 설정합니다. |
"logit" | 1/(1 + e–x) |
"none" 또는 "identity" | x(변환 없음) |
"sign" | x < 0의 경우 –1 x = 0의 경우 0 x > 0의 경우 1 |
"symmetric" | 2x – 1 |
"symmetricismax" | 최대 점수를 갖는 클래스의 점수를 1로 설정하고, 다른 모든 클래스의 점수를 -1로 설정합니다. |
"symmetriclogit" | 2/(1 + e–x) – 1 |
MATLAB 함수나 사용자가 직접 정의하는 함수의 경우, 이에 대한 함수 핸들을 점수 변환에 사용하십시오. 함수 핸들은 행렬(원래 점수)을 받아 동일한 크기의 행렬(변환된 점수)을 반환합니다.
예: ScoreTransform="logit"
데이터형: char | string | function_handle
관측값 가중치로, 양수 값으로 구성된 숫자형 벡터나 Tbl에 포함된 변수의 이름으로 지정됩니다. 소프트웨어는 X 또는 Tbl의 각 행에 있는 관측값에 이에 대응하는 Weights의 값을 함께 사용하여 가중치를 적용합니다. Weights의 크기는 X 또는 Tbl의 행 개수와 일치해야 합니다.
입력 데이터를 테이블 Tbl로 지정하는 경우, Weights는 Tbl에서 숫자형 벡터를 포함하는 변수의 이름일 수 있습니다. 이 경우, Weights를 문자형 벡터 또는 string형 스칼라로 지정해야 합니다. 예를 들어, 가중 벡터 W가 Tbl.W로 저장된 경우, 이를 "W"로 지정하십시오. 그렇지 않은 경우, 소프트웨어는 모델을 훈련시킬 때 W를 포함한 Tbl의 모든 열을 예측 변수 또는 응답 변수로 처리합니다.
기본적으로, Weights는 ones(입니다. 여기서 n,1)n은 X 또는 Tbl에 포함된 관측값 개수입니다.
소프트웨어는 Weights의 총합이 각 클래스의 사전 확률의 값이 되도록 정규화합니다. Inf 가중치는 지원되지 않습니다.
데이터형: double | single | char | string
교차 검증 옵션
교차 검증 분할로, 교차 검증의 유형과 훈련 세트 및 검증 세트의 인덱싱을 지정하는 cvpartition 객체로 지정됩니다.
교차 검증된 모델을 생성하려면 다음 4개의 이름-값 인수 중 하나만 지정할 수 있습니다. CVPartition, Holdout, KFold, Leaveout
예: cvp = cvpartition(500,KFold=5)를 사용하여 500개 관측값에 대한 5겹 교차 검증에 사용할 임의 분할을 생성한다고 가정하겠습니다. 그러면 CVPartition=cvp를 설정하여 교차 검증 분할을 지정할 수 있습니다.
홀드아웃 검증에 사용할 데이터의 비율로, (0,1) 범위 내에 있는 스칼라 값으로 지정됩니다. Holdout=p를 지정하는 경우 소프트웨어는 다음 단계를 완료합니다.
데이터의
p*100%를 무작위로 선택하여 검증 데이터용으로 남겨두고 나머지 데이터를 사용하여 모델을 훈련시킵니다.교차 검증된 모델의
Trained속성에 훈련된 간소 모델을 저장합니다.
교차 검증된 모델을 생성하려면 다음 4개의 이름-값 인수 중 하나만 지정할 수 있습니다. CVPartition, Holdout, KFold, Leaveout
예: Holdout=0.1
데이터형: double | single
교차 검증된 모델에 사용할 겹의 개수로, 1보다 큰 양의 정수 값으로 지정됩니다. KFold=k를 지정하는 경우 소프트웨어는 다음 단계를 완료합니다.
데이터를
k개 세트로 임의로 분할합니다.각 세트마다 해당 세트를 검증 데이터로 남겨두고 나머지
k– 1개의 세트를 사용하여 모델을 훈련시킵니다.교차 검증된 모델의
Trained속성에k×1 셀형 벡터로k개의 훈련된 간소 모델을 저장합니다.
교차 검증된 모델을 생성하려면 다음 4개의 이름-값 인수 중 하나만 지정할 수 있습니다. CVPartition, Holdout, KFold, Leaveout
예: KFold=5
데이터형: single | double
리브-원-아웃 교차 검증 플래그로, "on" 또는 "off"로 지정됩니다. Leaveout="on"을 지정하는 경우, n개(여기서 n은 모델의 NumObservations 속성에 지정된 관측값 중 누락된 관측값을 제외한 개수임)의 관측값 각각에 대해 소프트웨어가 다음 단계를 완료합니다.
1개의 관측값을 검증 데이터로 남겨두고 나머지 n – 1개 관측값을 사용하여 모델을 훈련시킵니다.
교차 검증된 모델의
Trained속성에 n×1 셀형 벡터로 n개의 훈련된 간소 모델을 저장합니다.
교차 검증된 모델을 생성하려면 다음 4개의 이름-값 인수 중 하나만 지정할 수 있습니다. CVPartition, Holdout, KFold, Leaveout
예: Leaveout="on"
데이터형: char | string
하이퍼파라미터 최적화 옵션
최적화할 모수로, 다음 값 중 하나로 지정됩니다.
"none"— 최적화하지 않습니다."auto"—["Distance","NumNeighbors","Standardize"]를 사용합니다."all"— 모든 적합한 모수를 최적화합니다.적합한 모수 이름으로 구성된 string형 배열 또는 셀형 배열.
optimizableVariable객체로 구성된 벡터. 일반적으로hyperparameters의 출력값입니다.
최적화는 모수를 변경하여 fitcknn에 대한 교차 검증 손실(오차)을 최소화하려고 시도합니다. 교차 검증 유형과 최적화의 기타 측면을 제어하려면 HyperparameterOptimizationOptions 이름-값 인수를 사용하십시오. HyperparameterOptimizationOptions를 사용하는 경우, ConstraintType 옵션과 ConstraintBounds 옵션을 설정하여 교차 검증 손실 대신에 (간소) 모델 크기를 최적화 목적 함수로 사용할 수 있습니다.
참고
OptimizeHyperparameters 값은 다른 이름-값 인수를 사용하여 지정하는 모든 값을 재정의합니다. 예를 들어 OptimizeHyperparameters를 "auto"로 설정하면 fitcknn 함수는 "auto" 옵션에 대응되는 하이퍼파라미터를 최적화하고 하이퍼파라미터에 대해 지정된 값을 모두 무시합니다.
fitcknn에 대한 적합한 모수는 다음과 같습니다.
Distance—fitcknn이"cityblock","chebychev","correlation","cosine","euclidean","hamming","jaccard","mahalanobis","minkowski","seuclidean","spearman"중에서 탐색을 수행합니다.DistanceWeight—fitcknn이"equal","inverse","squaredinverse"중에서 탐색을 수행합니다.Exponent—fitcknn이 기본적으로 범위[0.5,3]에서 양의 실수 값 중에서 탐색을 수행합니다.NumNeighbors—fitcknn이 기본적으로 범위[1,max(2,round(NumObservations/2))]에서 로그 스케일링된 양의 정수 값 중에서 탐색을 수행합니다.Standardize—fitcknn이 값"true"와"false"중에서 탐색을 수행합니다.
디폴트가 아닌 값을 가지는 optimizableVariable 객체로 구성된 벡터를 전달하여 디폴트가 아닌 모수를 설정합니다. 예를 들면 다음과 같습니다.
load fisheriris params = hyperparameters("fitcknn",meas,species); params(1).Range = [1,20];
params를 OptimizeHyperparameters의 값으로 전달합니다.
기본적으로, 반복 표시가 명령줄에 표시되고, 최적화에 지정된 하이퍼파라미터 개수에 따라 플롯이 표시됩니다. 최적화와 플롯에 대해 목적 함수는 오분류율입니다. 반복 표시를 제어하려면 HyperparameterOptimizationOptions 이름-값 인수에 대한 Verbose 옵션을 설정하십시오. 플롯을 제어하려면 HyperparameterOptimizationOptions 이름-값 인수에 대한 ShowPlots 필드를 설정하십시오.
예제는 피팅된 KNN 분류기 최적화하기 항목을 참조하십시오.
예: OptimizeHyperparameters="auto"
최적화에 사용할 옵션으로, HyperparameterOptimizationOptions 객체 또는 구조체로 지정됩니다. 이 인수는 OptimizeHyperparameters 이름-값 인수의 효과를 수정합니다. HyperparameterOptimizationOptions를 지정하는 경우 OptimizeHyperparameters도 지정해야 합니다. 모든 옵션은 선택 사항입니다. 그러나 AggregateOptimizationResults를 반환하려면 ConstraintBounds와 ConstraintType을 설정해야 합니다. 구조체에 설정할 수 있는 옵션은 HyperparameterOptimizationOptions 객체의 옵션과 동일합니다.
| 옵션 | 값 | 디폴트 값 |
|---|---|---|
Optimizer |
| "bayesopt" |
ConstraintBounds | N개의 최적화 문제에 대한 제약 조건 범위로, N×2 숫자형 행렬 또는 | [] |
ConstraintTarget | 최적화 문제에 대한 제약 조건 대상으로, | ConstraintBounds와 ConstraintType을 지정하면 디폴트 값은 "matlab"입니다. 그렇지 않은 경우 디폴트 값은 []입니다. |
ConstraintType | 최적화 문제애 대한 제약 조건 유형으로, | [] |
AcquisitionFunctionName | 획득 함수의 유형은 다음과 같습니다.
최적화는 목적 함수의 런타임에 종속적이기 때문에 이름에 | "expected-improvement-per-second-plus" |
MaxObjectiveEvaluations | 목적 함수 실행의 최대 횟수입니다. ConstraintBounds를 사용하여 여러 최적화 문제를 지정하는 경우 MaxObjectiveEvaluations의 값이 각 최적화 문제에 개별적으로 적용됩니다. | "bayesopt"와 "randomsearch"의 경우 30, "gridsearch"의 경우 전체 그리드 |
MaxTime | 최적화에 대한 시간 제한으로, 음이 아닌 실수형 스칼라로 지정됩니다. 시간 제한은 초 단위이며, | Inf |
NumGridDivisions | Optimizer="gridsearch"의 경우, 각 차원의 값 개수입니다. 이 값은 각 차원에 대한 값의 개수를 제공하는 양의 정수로 구성된 벡터 또는 모든 차원에 적용되는 스칼라일 수 있습니다. 이 옵션은 범주형 변수의 경우 무시됩니다. | 10 |
ShowPlots | 최적화 진행률의 플롯 표시 여부를 나타내는 논리값입니다. 이 옵션이 true이면 반복 횟수에 대해 최선의 관측된 목적 함수 값이 플로팅됩니다. 베이즈 최적화(Optimizer="bayesopt")를 사용하는 경우에는 최선의 추정된 목적 함수 값도 플로팅됩니다. 최선의 관측된 목적 함수 값과 최선의 추정된 목적 함수 값은 각각 반복 표시의 BestSoFar (observed) 열과 BestSoFar (estim.) 열의 값에 대응됩니다. Mdl.HyperparameterOptimizationResults의 속성 ObjectiveMinimumTrace 및 EstimatedObjectiveMinimumTrace에서 이러한 값을 확인할 수 있습니다. 문제에 베이즈 최적화를 위한 하나 또는 두 개의 최적화 모수가 있는 경우, ShowPlots는 이 모수에 대해서도 목적 함수의 모델을 플로팅합니다. | true |
SaveIntermediateResults | 최적화 결과를 저장할지 여부를 나타내는 논리값입니다. 이 옵션이 true이면 각 반복마다 "BayesoptResults"라는 이름의 작업 공간 변수를 덮어쓰게 됩니다. 변수는 BayesianOptimization 객체입니다. ConstraintBounds를 사용하여 여러 최적화 문제를 지정하는 경우, 작업 공간 변수는 "AggregateBayesoptResults"라는 이름의 AggregateBayesianOptimization 객체입니다. | false |
Verbose | 명령줄에서 표시 수준은 다음과 같습니다.
자세한 내용은 | 1 |
UseParallel | 베이즈 최적화를 병렬로 실행할지 여부를 나타내는 논리값으로, Parallel Computing Toolbox™가 필요합니다. 병렬 시간 재현이 불가능하기 때문에, 병렬 베이즈 최적화에서 반드시 재현 가능한 결과를 산출하지는 않습니다. 자세한 내용은 Parallel Bayesian Optimization 항목을 참조하십시오. | false |
Repartition | 매 반복 시 교차 검증을 다시 분할할지 여부를 나타내는 논리값입니다. 이 옵션이 값이 | false |
| 다음 3가지 옵션 중 하나만 지정합니다. | ||
CVPartition | cvpartition으로 생성된 cvpartition 객체 | 교차 검증 옵션을 지정하지 않는 경우 KFold=5 |
Holdout | 홀드아웃 비율을 나타내는 범위 (0,1) 내에 있는 스칼라 | |
KFold | 1보다 큰 정수 | |
예: HyperparameterOptimizationOptions=struct(UseParallel=true)
출력 인수
훈련된 k-최근접이웃 분류 모델로, ClassificationKNN 모델 객체 또는 ClassificationPartitionedModel 교차 검증된 모델 객체로 반환됩니다.
이름-값 쌍의 인수 KFold, Holdout, , CrossVal 또는 CVPartition 중 어느 하나라도 설정하면, Mdl은 ClassificationPartitionedModel 교차 검증된 모델 객체입니다. 그렇지 않은 경우 Mdl은 ClassificationKNN 모델 객체입니다.
Mdl의 속성을 참조하려면 점 표기법을 사용하십시오. 예를 들어, Mdl.Distance를 입력하여 명령 창에 거리 측정법을 표시할 수 있습니다.
OptimizeHyperparameters를 지정하고 HyperparameterOptimizationOptions의 ConstraintType 옵션과 ConstraintBounds 옵션을 설정하면 Mdl은 모델 객체로 구성된 N×1 셀형 배열입니다. 여기서 N은 ConstraintBounds의 행 개수와 동일합니다. 최적화 문제 중 어느 것도 실현가능 모델을 산출하지 못하면 각 셀형 배열 값은 []입니다.
여러 최적화 문제에 대한 최적화 결과 집계로, AggregateBayesianOptimization 객체로 반환됩니다. AggregateOptimizationResults를 반환하려면 OptimizeHyperparameters와 HyperparameterOptimizationOptions를 지정해야 합니다. HyperparameterOptimizationOptions의 ConstraintType 옵션과 ConstraintBounds 옵션도 지정해야 합니다. 이 출력값을 생성하는 방법을 보여주는 예제는 Hyperparameter Optimization with Multiple Constraint Bounds 항목을 참조하십시오.
팁
모델을 훈련시킨 후에는 새 데이터에 대한 레이블을 예측하는 C/C++ 코드를 생성할 수 있습니다. C/C++ 코드를 생성하려면 MATLAB Coder™가 필요합니다. 자세한 내용은 Introduction to Code Generation 항목을 참조하십시오.
알고리즘
NaNs 또는 <undefined>는 누락 관측값을 나타냅니다. 다음은 데이터 세트 또는 가중치가 누락 관측값을 포함하는 경우 fitcknn의 동작에 대한 설명입니다.
Y의 값 또는 가중치가 누락된 경우fitcknn은Y와 가중치에서 그러한 값을 제거하고, 데이터에서X의 대응하는 행을 제거합니다. 합이1이 되도록 가중치를 다시 정규화합니다.예측 변수를 표준화하도록 지정하거나(
Standardize=true) 표준화된 유클리드 거리를 스케일 없이 지정하면(Distance="seuclidean"),fitcknn은 평균과 표준편차를 계산하기 전에 개별 예측 변수에서 누락 관측값을 제거합니다. 다시 말해서, 각 예측 변수에 대해"omitnan"옵션을 사용하여mean과std가 구현됩니다.공분산 행렬 없이 마할라노비스 거리(
Distance="mahalanobis")를 지정하면fitcknn은 하나 이상의 누락값을 포함하는X의 행을 제거합니다. 다시 말해서, 예측 변수 행렬X에 대해"omitrows"옵션을 사용하여cov가 구현됩니다.
Cost,Prior및Weights이름-값 인수를 지정할 경우 출력 모델 객체는 지정된 값을 각각Cost,Prior및W속성에 저장합니다.Cost속성은 사용자가 지정한 비용 행렬을 그대로 저장합니다.Prior속성과W속성은 각각 정규화한 후의 사전 확률 및 관측값 가중치를 저장합니다. 자세한 내용은 오분류 비용 행렬, 사전 확률 및 관측값 가중치 항목을 참조하십시오.소프트웨어는 예측에
Cost속성을 사용하지만, 훈련에는 이 속성을 사용하지 않습니다. 따라서Cost는 읽기 전용이 아닙니다. 훈련된 모델을 만든 후에 점 표기법을 사용하여 속성값을 변경할 수 있습니다.Standardize=true를 설정했다고 가정하겠습니다.Prior또는Weights이름-값 인수도 지정하면fitcknn은 대응되는 가중 평균과 가중 표준편차를 사용하여 예측 변수를 표준화합니다. 특히,fitcknn은 다음을 사용하여 예측 변수 j를 표준화합니다.-
xjk는 예측 변수 j(열)의 관측값 k(행)입니다.
-
Distance="mahalanobis"또는Distance="seuclidean"도 설정한 경우에는Scale또는Cov를 지정할 수 없습니다. 그 대신 다음을 수행합니다.각 예측 변수의 평균 및 표준편차를 계산
1단계의 결과를 사용하여 데이터를 표준화
각각의 디폴트 값을 사용하여 거리 모수 값을 계산
Scale을 지정하고Prior또는Weights를 지정하면 관측된 거리가 가중 표준편차만큼 스케일링됩니다.Cov를 지정하고Prior또는Weights를 지정하면 거리에 가중 공분산 행렬이 적용됩니다. 다시 말해 다음과 같습니다.
fast로 시작하는 Distance 인수의 값(예: "fasteuclidean"과 "fastseuclidean")은 계산 시간을 절약하기 위해 추가 메모리를 사용하는 알고리즘을 사용해 유클리드 거리를 계산합니다. 이 알고리즘은 Albanie[1] 및 다른 문헌에서 "Euclidean Distance Matrix Trick"이라고 합니다. 내부 테스트에 따르면 이 알고리즘은 예측 변수 개수가 10개 이상일 때 시간을 절약하는 것으로 나타났습니다. fast로 시작하는 알고리즘은 희소 형식 데이터를 지원하지 않습니다.
각 xi가 n개의 변수를 갖는 모든 점 xi와 xj 간 거리의 행렬 D를 구하기 위해 알고리즘은 다음 수식의 마지막 줄을 사용하여 거리를 계산합니다.
수식의 마지막 줄에 있는 행렬 를 그람 행렬이라고 합니다. 제곱과 합으로 제곱 거리를 계산하는 대신 그람 행렬을 계산하고 사용하는 경우 일련의 제곱 거리를 계산하는 것이 더 빠르지만 수치적으로 약간 덜 안정적입니다. 자세한 내용은 Albanie[1] 항목을 참조하십시오.
그람 행렬을 저장하기 위해 디폴트 크기가 1e3메가바이트인 캐시가 사용됩니다. CacheSize 이름-값 인수를 사용하여 캐시 크기를 설정할 수 있습니다. CacheSize의 값이 너무 크거나 "maximal"이면 소프트웨어는 사용 가능한 메모리를 초과하는 그람 행렬을 할당하려고 시도할 수 있습니다. 이 경우, 소프트웨어가 오류를 발생시킵니다.
참고 문헌
[1] Albanie, Samuel. Euclidean Distance Matrix Trick. June, 2019. Available at https://samuelalbanie.com/files/Euclidean_distance_trick.pdf.
ClassificationKNN은 다음과 같은 절차를 사용하여 점 xnew의 분류를 예측합니다.
훈련 세트
X에서xnew에 가장 근접한NumNeighbors개 점을 찾습니다.이 최근접 점에 대한
NumNeighbors개 응답 변수 값Y를 찾습니다.Y의 값 중에서 최대 사후 확률을 갖는 분류 레이블ynew를 할당합니다.
자세한 내용은 predict 도움말 문서에서 Posterior Probability 항목을 참조하십시오.
대안
fitcknn은 다중클래스 KNN 분류기를 훈련시킬 수 있지만, fitcecoc를 사용하여 다중클래스 학습 문제를 일련의 KNN 이진 학습기로 축소할 수 있습니다.
확장 기능
병렬 하이퍼파라미터 최적화를 수행하려면 fitcknn 함수에 대한 호출에 HyperparameterOptimizationOptions 이름-값 인수의 UseParallel=true 옵션을 사용하십시오.
병렬 하이퍼파라미터 최적화에 대한 자세한 내용은 Parallel Bayesian Optimization 항목을 참조하십시오.
병렬 연산에 대한 일반적인 내용은 자동 병렬 연산을 지원하는 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
사용법 관련 참고 및 제한 사항:
기본적으로
fitcknn함수는gpuArray입력 인수에 대해 최근접이웃 완전 탐색 알고리즘을 사용합니다.이름-값 인수
NSMethod를"kdtree"로 지정할 수 없습니다.이름-값 인수
Distance를"fasteuclidean","fastseuclidean"또는 함수 핸들로 지정할 수 없습니다.이름-값 인수
IncludeTies를true로 지정할 수 없습니다.fitcknn함수는 다음 중 하나가 적용되는 경우 GPU에서 모델을 피팅합니다.입력 인수
X가gpuArray객체입니다.입력 인수
Tbl이gpuArray예측 변수를 포함합니다.
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2014a에 개발됨fitcknn 함수는 HyperparameterOptimizationOptions가 UseParallel=true를 포함하고 소프트웨어가 병렬 풀을 열 수 없으면 순차적 하이퍼파라미터 최적화를 디폴트 값으로 지정합니다.
이전 릴리스에서는 이러한 상황에서 소프트웨어가 오류를 발생시킵니다.
R2023b부터, OptimizeHyperparameters 값을 "auto"로 지정하면 fitcknn 함수는 Standardize를 최적화 가능한 하이퍼파라미터로 포함합니다.
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)