Main Content

ClassificationKNN

k-최근접이웃 분류

설명

ClassificationKNN은 거리 측정법과 최근접이웃 개수를 모두 변경할 수 있는 최근접이웃 분류 모델입니다. ClassificationKNN 분류기는 훈련 데이터를 저장하므로 이 모델을 사용하여 재대입 예측값을 계산할 수 있습니다. 또는 predict 메서드를 사용하여 새 관측값을 분류하는 용도로 이 모델을 사용하십시오.

생성

fitcknn을 사용하여 ClassificationKNN 모델을 만듭니다.

속성

모두 확장

KNN 속성

여러 클래스가 동일한 최소 비용을 갖는 경우 predict가 사용하는 우선 순위 결정 알고리즘으로, 다음 중 하나로 지정됩니다.

  • 'smallest' — 동점인 그룹 중에서 가장 작은 인덱스를 사용합니다.

  • 'nearest' — 동점인 그룹 중에서 최근접이웃을 갖는 클래스를 사용합니다.

  • 'random' — 동점인 그룹 중에서 무작위로 하나를 선택하는 우선 순위 판별법을 사용합니다.

기본적으로, 총 k개 최근접이웃이 주어졌을 때 서로 같은 개수의 최근접이웃 점을 가지는 복수의 클래스가 존재하면 동순위(Tie)가 발생합니다. BreakTiesIncludeTiesfalse인 경우 적용됩니다.

BreakTies는 점 표기법을 사용하여 변경할 수 있습니다(예: mdl.BreakTies = newBreakTies).

거리 측정법으로, 'Distance'와 함께 유효한 거리 측정법 이름 또는 함수 핸들이 쉼표로 구분되어 지정됩니다. 허용되는 거리 측정법 이름은 선택한 이웃 탐색 방법에 따라 달라집니다(NSMethod 참조).

NSMethod거리 측정법 이름
exhaustiveExhaustiveSearcher의 모든 거리 측정법
kdtree'cityblock', 'chebychev', 'euclidean' 또는 'minkowski'

다음 표에는 ExhaustiveSearcher의 유효한 거리 측정법이 나와 있습니다.

거리 측정법 이름설명
'cityblock'도시 블록 거리입니다.
'chebychev'체비쇼프 거리(최대 좌표 차이)입니다.
'correlation'1에서 관측값 간의 표본 선형 상관관계를 뺀 값입니다(일련의 값으로 처리됨).
'cosine'1에서 관측값 간의 끼인각에 대한 코사인을 뺀 값입니다(벡터로 처리됨).
'euclidean'유클리드 거리입니다.
'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에서 관측값 간 표본 스피어만의 순위 상관 계수를 뺀 값입니다(일련의 값으로 처리됨).
@distfun

거리 함수 핸들입니다. distfun의 형식은 다음과 같습니다

function D2 = distfun(ZI,ZJ)
% calculation of  distance
...
여기서

  • ZIX 또는 Y의 한 행을 포함하는 1×N 벡터입니다.

  • ZJX 또는 Y의 여러 행을 포함하는 M2×N 행렬입니다.

  • D2는 거리로 구성된 M2×1 벡터이고, D2(k)는 관측값 ZIZJ(k,:) 간의 거리입니다.

CategoricalPredictors'all'로 지정한 경우 디폴트 거리 측정법은 'hamming'입니다. 그렇지 않은 경우 디폴트 거리 측정법은 'euclidean'입니다.

Distance는 점 표기법을 사용하여 변경할 수 있습니다(예: mdl.Distance = newDistance).

NSMethod'kdtree'이면 점 표기법을 사용하여 측정법 'cityblock', 'chebychev', 'euclidean''minkowski'에 대해서만 Distance를 변경할 수 있습니다.

정의는 거리 측정법 항목을 참조하십시오.

예: 'Distance','minkowski'

데이터형: char | string | function_handle

거리 가중치 함수로, 다음 표에 있는 값 중 하나로 지정됩니다.

설명
'equal'가중치 없음
'inverse'가중치가 1/distance
'squaredinverse'가중치가 1/distance2
@fcnfcn은 음이 아닌 거리로 구성된 행렬을 받아 음이 아닌 거리 가중치를 포함하는 동일한 크기의 행렬을 반환하는 함수입니다. 예를 들어, 'squaredinverse'@(d)d.^(–2)와 동일합니다.

DistanceWeight는 점 표기법을 사용하여 변경할 수 있습니다(예: mdl.DistanceWeight = newDistanceWeight).

데이터형: char | function_handle

거리 측정법의 파라미터로, 다음 표에 설명된 값 중 하나로 지정됩니다.

거리 측정법파라미터
'mahalanobis'양의 정부호 공분산 행렬 C
'minkowski'민코프스키 거리 지수로, 양의 스칼라입니다.
'seuclidean'X의 열 개수와 같은 길이의 양의 스케일 값으로 구성된 벡터입니다.

다른 모든 거리 측정법에 대해 DistParameter의 값은 []이어야 합니다.

DistParameter는 점 표기법을 사용하여 변경할 수 있습니다(예: mdl.DistParameter = newDistParameter). 그러나 Distance'mahalanobis' 또는 'seuclidean'인 경우에는 DistParameter를 변경할 수 없습니다.

데이터형: single | double

k번째로 작은 거리와 거리 값이 같은 모든 이웃을 predict가 포함하는지 여부를 나타내는 동순위 포함 플래그로, false 또는 true로 지정됩니다. IncludeTiestrue인 경우 predict는 이러한 이웃을 모두 포함합니다. 그렇지 않은 경우 predict는 정확히 k개의 이웃을 사용합니다(BreakTies 속성 참조).

IncludeTies는 점 표기법을 사용하여 변경할 수 있습니다(예: mdl.IncludeTies = newIncludeTies).

데이터형: logical

읽기 전용 속성입니다.

최근접이웃 탐색 방법으로, 'kdtree' 또는 'exhaustive'로 지정됩니다.

  • 'kdtree'Kd-트리를 생성하고 이를 사용하여 최근접이웃을 찾습니다.

  • 'exhaustive' — 완전 탐색 알고리즘을 사용합니다. 새 점 xnew의 클래스를 예측할 때 X의 모든 점에서 xnew까지의 거리 값을 계산하여 최근접이웃을 찾습니다.

X10개 이하의 열을 갖고 X가 희소 행렬이 아니며 거리 측정법이 'kdtree' 유형인 경우 디폴트 값은 'kdtree'입니다. 그렇지 않은 경우 디폴트 값은 'exhaustive'입니다.

예측 중에 각 점을 분류하는 데 사용되는 X의 최근접이웃 개수로, 양의 정수 값으로 지정됩니다.

NumNeighbors는 점 표기법을 사용하여 변경할 수 있습니다(예: mdl.NumNeighbors = newNumNeighbors).

데이터형: single | double

기타 분류 속성

읽기 전용 속성입니다.

범주형 예측 변수의 인덱스로, 양의 정수로 구성된 벡터로 지정됩니다. CategoricalPredictors는 대응하는 예측 변수가 범주형임을 나타내는 인덱스 값을 포함합니다. 인덱스 값은 1과 p 사이입니다. 여기서 p는 모델을 훈련시킬 때 사용되는 예측 변수의 개수입니다. 범주형 예측 변수가 없는 경우 이 속성은 비어 있습니다([]).

데이터형: double

읽기 전용 속성입니다.

중복된 값을 제거한 훈련 데이터 Y의 클래스 이름으로, categorical형 배열이나 문자형 배열, 논리형 벡터나 숫자형 벡터, 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. ClassNamesY와 데이터형이 동일합니다. (소프트웨어는 string형 배열을 문자형 벡터로 구성된 셀형 배열로 처리합니다.)

데이터형: categorical | char | logical | single | double | cell

점의 오분류 비용으로, 정사각 행렬로 지정됩니다. Cost(i,j)는 어떤 점의 실제 클래스가 i인 경우 이 점을 j 클래스로 분류하는 데 드는 비용입니다(즉, 행은 실제 클래스에 대응되고, 열은 예측된 클래스에 대응됨). Cost의 행과 열 순서는 ClassNames의 클래스 순서와 일치합니다. Cost의 행과 열 개수는 응답 변수에 포함된 고유 클래스의 개수입니다.

기본적으로 i ~= j인 경우 Cost(i,j) = 1이고, i = j인 경우 Cost(i,j) = 0입니다. 즉, 분류가 올바르면 비용이 0이고 분류가 올바르지 않으면 비용이 1입니다.

Cost 행렬은 점 표기법을 사용하여 변경할 수 있습니다(예: mdl.Cost = costMatrix).

데이터형: single | double

읽기 전용 속성입니다.

확장 예측 변수 이름으로, 문자형 벡터로 구성된 셀형 배열로 지정됩니다.

모델이 범주형 변수에 대한 인코딩을 사용하는 경우 ExpandedPredictorNames는 확장 변수를 설명하는 이름을 포함합니다. 그렇지 않은 경우, ExpandedPredictorNamesPredictorNames와 동일합니다.

데이터형: cell

읽기 전용 속성입니다.

ClassificationKNN 모델을 훈련시키는 데 사용되는 파라미터로, 객체로 지정됩니다.

읽기 전용 속성입니다.

예측 변수 평균으로, 길이가 numel(PredictorNames)인 숫자형 벡터로 지정됩니다.

fitcknn을 사용하여 모델을 훈련시킬 때 mdl을 표준화하지 않은 경우 Mu는 비어 있습니다([]).

데이터형: single | double

읽기 전용 속성입니다.

ClassificationKNN 모델을 훈련시킬 때 사용된 관측값 개수로, 양의 정수 스칼라로 지정됩니다. NaN 값을 포함하는 행은 피팅에 포함되지 않으므로 이 숫자는 훈련 데이터에 포함된 행 개수보다 작을 수 있습니다.

데이터형: double

읽기 전용 속성입니다.

예측 변수 이름으로, 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 변수 이름은 훈련 데이터 X에 나타나는 순서와 동일한 순서를 갖습니다.

데이터형: cell

각 클래스에 대한 사전 확률로, 숫자형 벡터로 지정됩니다. Prior의 요소 순서는 ClassNames의 클래스 순서와 일치합니다.

Prior 벡터는 점 표기법을 사용하여 추가하거나 변경할 수 있습니다(예: mdl.Prior = priorVector).

데이터형: single | double

읽기 전용 속성입니다.

응답 변수 이름으로, 문자형 벡터로 지정됩니다.

데이터형: char

읽기 전용 속성입니다.

ClassificationKNN 모델 피팅에 사용되는 원래 훈련 데이터의 행으로, 논리형 벡터로 지정됩니다. 모든 행이 사용되는 경우 이 속성은 비어 있습니다.

데이터형: logical

점수 변환 방식으로, 문자형 벡터 또는 함수 핸들로 지정됩니다.

다음 표에는 사용 가능한 문자형 벡터가 요약되어 있습니다.

설명
"doublelogit"1/(1 + e–2x)
"invlogit"log(x / (1 – x))
"ismax"최대 점수를 갖는 클래스의 점수를 1로 설정하고, 다른 모든 클래스의 점수를 0으로 설정합니다.
"logit"1/(1 + ex)
"none" 또는 "identity"x(변환 없음)
"sign"x < 0의 경우 –1
x = 0의 경우 0
x > 0의 경우 1
"symmetric"2x – 1
"symmetricismax"최대 점수를 갖는 클래스의 점수를 1로 설정하고, 다른 모든 클래스의 점수를 -1로 설정합니다.
"symmetriclogit"2/(1 + ex) – 1

MATLAB® 함수나 사용자가 직접 정의하는 함수의 경우, 이에 대한 함수 핸들을 점수 변환에 사용하십시오. 함수 핸들은 행렬(원래 점수)을 받아 동일한 크기의 행렬(변환된 점수)을 반환합니다.

ScoreTransform은 점 표기법을 사용하여 변경할 수 있습니다(예: mdl.ScoreTransform = newScoreTransform).

데이터형: char | function_handle

읽기 전용 속성입니다.

예측 변수 표준편차로, 길이가 numel(PredictorNames)인 숫자형 벡터로 지정됩니다.

훈련 중에 예측 변수를 표준화하지 않은 경우 Sigma는 비어 있습니다([]).

데이터형: single | double

읽기 전용 속성입니다.

관측값 가중치로, Y와 동일한 행 개수를 갖는, 음이 아닌 값으로 구성된 벡터로 지정됩니다. W의 각 요소는 이에 대응되는 Y의 관측값의 상대적 중요도를 지정합니다.

데이터형: single | double

읽기 전용 속성입니다.

표준화되지 않은 예측 변수 데이터로, 숫자형 행렬로 지정됩니다. X의 각 열은 하나의 예측 변수를 나타내고, 각 행은 하나의 관측값을 나타냅니다.

데이터형: single | double

읽기 전용 속성입니다.

클래스 레이블로, categorical형 배열이나 문자형 배열, 논리형 벡터나 숫자형 벡터, 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. Y의 각 값은 X의 대응 행에 대한 관측된 클래스 레이블입니다.

YY에서 모델을 훈련시키는 데 사용되는 데이터와 데이터형이 동일합니다. (소프트웨어는 string형 배열을 문자형 벡터로 구성된 셀형 배열로 처리합니다.)

데이터형: single | double | logical | char | cell | categorical

하이퍼파라미터 최적화 속성

읽기 전용 속성입니다.

하이퍼파라미터에 대한 교차 검증 최적화로, BayesianOptimization 객체 또는 하이퍼파라미터 및 관련 값으로 구성된 테이블로 지정됩니다. 이 속성은 fitcknn을 사용하여 모델을 생성할 때 'OptimizeHyperparameters' 이름-값 쌍의 인수가 비어 있지 않은 경우 비어 있지 않습니다. 이 값은 모델을 생성할 때의 'HyperparameterOptimizationOptions' 이름-값 쌍 인수 설정에 따라 달라집니다.

  • 'bayesopt'(디폴트 값) — BayesianOptimization 클래스의 객체

  • 'gridsearch' 또는 'randomsearch' — 사용된 하이퍼파라미터, 관측된 목적 함수 값(교차 검증 손실), 그리고 관측값 순위가 가장 낮은 값(최상)에서 가장 높은 값(최하)순으로 포함된 테이블

객체 함수

compareHoldoutCompare accuracies of two classification models using new data
crossvalCross-validate machine learning model
edgeEdge of k-nearest neighbor classifier
gatherGather properties of Statistics and Machine Learning Toolbox object from GPU
limeLocal interpretable model-agnostic explanations (LIME)
lossLoss of k-nearest neighbor classifier
marginMargin of k-nearest neighbor classifier
partialDependenceCompute partial dependence
plotPartialDependenceCreate partial dependence plot (PDP) and individual conditional expectation (ICE) plots
predictPredict labels using k-nearest neighbor classification model
resubEdgeResubstitution classification edge
resubLossResubstitution classification loss
resubMarginResubstitution classification margin
resubPredictClassify training data using trained classifier
shapleyShapley values
testckfoldCompare accuracies of two classification models by repeated cross-validation

예제

모두 축소

피셔(Fisher)의 붓꽃 데이터에 사용할 k-최근접이웃 분류기를 훈련시킵니다. 여기서 k는 예측 변수에 포함된 최근접이웃의 수로 5입니다.

피셔의 붓꽃 데이터를 불러옵니다.

load fisheriris
X = meas;
Y = species;

X는 150개 붓꽃에 대한 4개의 측정값을 포함하는 숫자형 행렬입니다. Y는 이에 대응되는 붓꽃 종을 포함하는 문자형 벡터로 구성된 셀형 배열입니다.

5-최근접이웃 분류기를 훈련시킵니다. 비범주형 예측 변수 데이터를 표준화합니다.

Mdl = fitcknn(X,Y,'NumNeighbors',5,'Standardize',1)
Mdl = 
  ClassificationKNN
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'setosa'  'versicolor'  'virginica'}
           ScoreTransform: 'none'
          NumObservations: 150
                 Distance: 'euclidean'
             NumNeighbors: 5


Mdl은 훈련된 ClassificationKNN 분류기이며, 이에 대한 속성 중 일부는 명령 창에 표시됩니다.

Mdl의 속성에 액세스하려면 점 표기법을 사용하십시오.

Mdl.ClassNames
ans = 3x1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Mdl.Prior
ans = 1×3

    0.3333    0.3333    0.3333

Mdl.Priorfitcknn에서 'Prior' 이름-값 쌍의 인수를 사용하여 지정할 수 있는 클래스 사전 확률을 포함합니다. 클래스 사전 확률의 순서는 Mdl.ClassNames에 포함된 클래스의 순서와 일치합니다. 기본적으로, 사전 확률은 데이터에서 이러한 클래스가 나타날 각각의 상대 도수입니다.

훈련을 수행한 후 사전 확률을 재설정할 수도 있습니다. 예를 들어, 사전 확률을 각각 0.5, 0.2, 0.3으로 설정합니다.

Mdl.Prior = [0.5 0.2 0.3];

Mdlpredict에 전달하여 새 측정값에 레이블을 지정하거나 crossval에 전달하여 분류기를 교차 검증할 수 있습니다.

  • compact 함수는 훈련 데이터 속성과 새 관측값의 레이블을 예측하는 데 필요하지 않은 기타 모든 속성을 제거함으로써 대부분의 분류 모델의 크기를 축소합니다. k-최근접이웃 분류 모델은 레이블을 예측하기 위해 모든 훈련 데이터를 필요로 하므로 ClassificationKNN 모델의 크기는 줄일 수 없습니다.

대체 기능

knnsearch는 점의 k-최근접이웃을 찾습니다. rangesearch는 일정한 거리 내에 있는 모든 점을 찾습니다. 쿼리 데이터 분류하기에 나와 있는 것처럼 이러한 함수를 분류에 사용할 수 있습니다. 분류를 수행하려는 경우 ClassificationKNN 모델을 사용하는 것이 한 단계에서 (fitcknn을 사용하여) 분류기를 훈련시키고 다른 단계에서 (predict를 사용하여) 분류할 수 있으므로 더 편리할 수 있습니다. 또는 fitcknn을 호출할 때 교차 검증 옵션 중 하나를 사용하여 k-최근접이웃 분류 모델을 훈련시킬 수도 있습니다. 이 경우 fitcknnClassificationPartitionedModel 교차 검증된 모델 객체를 반환합니다.

확장 기능

버전 내역

R2012a에 개발됨