classify
판별분석을 사용하여 관측값 분류하기
구문
설명
참고
판별분석 분류기 훈련과 레이블 예측에는 classify
보다 fitcdiscr
및 predict
를 권장합니다. fitcdiscr
은 교차 검증 및 하이퍼파라미터 최적화를 지원하며, 새로운 예측을 하거나 사전 확률을 변경할 때마다 매번 분류기를 피팅할 필요가 없습니다.
은 class
= classify(sample
,training
,group
)sample
의 각 데이터 행을 training
의 데이터가 속한 그룹 중 하나로 분류합니다. training
의 그룹은 group
으로 지정됩니다. 이 함수는 class
를 반환하며, 여기에는 sample
의 각 행에 할당된 그룹이 포함됩니다.
예제
선형 판별분석을 사용하여 분류하기
fisheriris
데이터 세트를 불러옵니다. group
을 붓꽃 종을 포함하는 문자형 벡터로 구성된 셀형 배열로 생성합니다.
load fisheriris
group = species;
meas
행렬은 150개 붓꽃에 대한 4개의 꽃잎 측정값을 포함합니다. group
의 그룹 정보를 사용하여 관측값을 층화된 훈련 세트(trainingData
) 하나와 표본 세트(sampleData
) 하나로 임의로 분할합니다. sampleData
를 위해 40% 홀드아웃 표본을 지정합니다.
rng('default') % For reproducibility cv = cvpartition(group,'HoldOut',0.40); trainInds = training(cv); sampleInds = test(cv); trainingData = meas(trainInds,:); sampleData = meas(sampleInds,:);
선형 판별분석을 사용하여 sampleData
를 분류하고 group
의 실제 레이블과 class
의 예측 레이블에서 혼동행렬 차트를 만듭니다.
class = classify(sampleData,trainingData,group(trainInds)); cm = confusionchart(group(sampleInds),class);
classify
함수는 versicolor 붓꽃 하나를 표본 데이터 세트에서 virginica로 잘못 분류합니다.
2차 판별분석을 사용하여 분류하고 결정 경계 시각화하기
2차 판별분석을 사용하여 데이터 점을 측정값 그리드(표본 데이터)에 분류합니다. 그런 다음 표본 데이터, 훈련 데이터, 결정 경계를 시각화합니다.
fisheriris
데이터 세트를 불러옵니다. group
을 붓꽃 종을 포함하는 문자형 벡터로 구성된 셀형 배열로 생성합니다.
load fisheriris
group = species(51:end);
붓꽃 versicolor 종과 virginica 종에 대한 꽃받침 길이(SL
)와 너비(SW
) 측정값을 플로팅합니다.
SL = meas(51:end,1); SW = meas(51:end,2); h1 = gscatter(SL,SW,group,'rb','v^',[],'off'); h1(1).LineWidth = 2; h1(2).LineWidth = 2; legend('Fisher versicolor','Fisher virginica','Location','NW') xlabel('Sepal Length') ylabel('Sepal Width')
sampleData
를 측정값 그리드를 포함하는 숫자형 행렬로 생성합니다. trainingData
를 붓꽃 versicolor 종과 virginica 종의 꽃받침 길이와 너비 측정값을 포함하는 숫자형 행렬로 생성합니다.
[X,Y] = meshgrid(linspace(4.5,8),linspace(2,4)); X = X(:); Y = Y(:); sampleData = [X Y]; trainingData = [SL SW];
2차 판별분석을 사용하여 sampleData
를 분류합니다.
[C,err,posterior,logp,coeff] = classify(sampleData,trainingData,group,'quadratic');
두 클래스 간의 2차 경계에 대한 계수 K
, L
, M
을 가져옵니다.
K = coeff(1,2).const; L = coeff(1,2).linear; Q = coeff(1,2).quadratic;
두 클래스를 구분하는 곡선은 다음 수식으로 정의됩니다.
판별 분류를 시각화합니다.
hold on h2 = gscatter(X,Y,C,'rb','.',1,'off'); f = @(x,y) K + L(1)*x + L(2)*y + Q(1,1)*x.*x + (Q(1,2)+Q(2,1))*x.*y + Q(2,2)*y.*y; h3 = fimplicit(f,[4.5 8 2 4]); h3.Color = 'm'; h3.LineWidth = 2; h3.DisplayName = 'Decision Boundary'; hold off axis tight xlabel('Sepal Length') ylabel('Sepal Width') title('Classification with Fisher Training Data')
선형 판별분석의 분류 경계 시각화하기
데이터 세트를 표본 데이터와 훈련 데이터로 분할하고 선형 판별분석을 사용하여 샘플 데이터를 분류합니다. 그런 다음 결정 경계를 시각화합니다.
fisheriris
데이터 세트를 불러옵니다. group
을 붓꽃 종을 포함하는 문자형 벡터로 구성된 셀형 배열로 생성합니다. PL
과 PW
를 각각 꽃잎 길이 측정값과 꽃잎 너비 측정값을 포함하는 숫자형 벡터로 생성합니다.
load fisheriris
group = species;
PL = meas(:,3);
PW = meas(:,4);
붓꽃 setosa, versicolor, virginica 종에 대한 꽃받침 길이(PL
)와 너비(PW
) 측정값을 플로팅합니다.
h1 = gscatter(PL,PW,species,'krb','ov^',[],'off'); legend('Setosa','Versicolor','Virginica','Location','best') xlabel('Petal Length') ylabel('Petal Width')
group
의 그룹 정보를 사용하여 관측값을 층화된 훈련 세트(trainingData
) 하나와 표본 세트(sampleData
) 하나로 임의로 분할합니다. sampleData
를 위해 10% 홀드아웃 표본을 지정합니다.
rng('default') % For reproducibility cv = cvpartition(group,'HoldOut',0.10); trainInds = training(cv); sampleInds = test(cv); trainingData = [PL(trainInds) PW(trainInds)]; sampleData = [PL(sampleInds) PW(sampleInds)];
선형 판별분석을 사용하여 sampleData
를 분류합니다.
[class,err,posterior,logp,coeff] = classify(sampleData,trainingData,group(trainInds));
두 번째 클래스와 세 번째 클래스 사이의 선형 경계에 대한 계수 K
와 L
을 가져옵니다.
K = coeff(2,3).const; L = coeff(2,3).linear;
두 번째 클래스와 세 번째 클래스를 구분하는 선은 수식 으로 정의됩니다. 두 번째 클래스와 세 번째 클래스 사이의 경계선을 플로팅합니다.
f = @(x1,x2) K + L(1)*x1 + L(2)*x2; hold on h2 = fimplicit(f,[.9 7.1 0 2.5]); h2.Color = 'r'; h2.DisplayName = 'Boundary between Versicolor & Virginica';
첫 번째 클래스와 두 번째 클래스 사이의 선형 경계에 대한 계수 K
와 L
을 가져옵니다.
K = coeff(1,2).const; L = coeff(1,2).linear;
첫 번째 클래스와 두 번째 클래스를 구분하는 선을 플로팅합니다.
f = @(x1,x2) K + L(1)*x1 + L(2)*x2; h3 = fimplicit(f,[.9 7.1 0 2.5]); hold off h3.Color = 'k'; h3.DisplayName = 'Boundary between Versicolor & Setosa'; axis tight title('Linear Classification with Fisher Training Data')
입력 인수
sample
— 표본 데이터
숫자형 행렬
표본 데이터로, 숫자형 행렬로 지정됩니다. sample
의 각 열은 하나의 변수를 나타내고, 각 행은 하나의 표본 관측값을 나타냅니다. sample
은 training
과 열 개수가 동일해야 합니다.
데이터형: single
| double
group
— 그룹 이름
categorical형 배열 | 문자형 배열 | string형 배열 | 숫자형 벡터 | 문자형 벡터로 구성된 셀형 배열
그룹 이름으로, categorical형 배열, 문자형 배열, string형 배열, 숫자형 벡터 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. group
의 각 요소는 training
에서 대응하는 행이 속하는 그룹을 정의합니다. group
은 training
과 행 개수가 동일해야 합니다.
group
의 NaN
, <undefined>
, 빈 문자형 벡터(''
), 빈 string형(""
), <missing>
값은 누락값을 나타냅니다. classify
함수는 누락 그룹 이름에 대응되는 training
데이터의 전체 행을 제거합니다.
데이터형: categorical
| char
| string
| single
| double
| cell
type
— 판별 유형
'linear'
(디폴트 값) | 'quadratic'
| 'diagLinear'
| 'diagQuadratic'
| 'mahalanobis'
판별 유형으로, 다음 표에 나와 있는 값 중 하나로 지정됩니다.
값 | 설명 |
---|---|
'linear' | 공분산의 합동 추정값을 사용하여 다변량 정규 밀도를 각 그룹에 피팅합니다. 이 옵션은 가능도비를 사용하여 표본 관측값을 그룹에 할당합니다. |
'quadratic' | 그룹별로 층화된 공분산 추정값을 사용하여 다변량 정규 밀도를 피팅합니다. 이 옵션은 가능도비를 사용하여 표본 관측값을 그룹에 할당합니다. |
'diagLinear' | 'linear' 와 유사하지만 대각 공분산 행렬 추정값을 사용합니다. 이 대각 옵션은 그룹 레이블이 주어진 경우 변수가 조건부로 독립적임을 가정하므로 나이브 베이즈 분류기를 보여주는 구체적인 예가 됩니다. |
'diagQuadratic' | 'quadratic' 과 유사하지만 대각 공분산 행렬 추정값을 사용합니다. 이 대각 옵션은 그룹 레이블이 주어진 경우 변수가 조건부로 독립적임을 가정하므로 나이브 베이즈 분류기를 보여주는 구체적인 예가 됩니다. |
'mahalanobis' | 층화된 공분산 추정값과 함께 마할라노비스 거리를 사용합니다. |
prior
— 각 그룹에 대한 사전 확률
숫자형 벡터 | 'empirical'
| 구조체
각 그룹에 대한 사전 확률로, 다음 표에 나와 있는 값 중 하나로 지정됩니다. 기본적으로 모든 사전 확률은 1/K
이며, 여기서 K는 그룹 개수입니다.
값 | 설명 |
---|---|
숫자형 벡터 | 각 요소는 그룹 사전 확률입니다. 요소를 group 에 따라 정렬합니다. classify 함수는 합이 1이 되도록 요소를 정규화합니다. |
'empirical' | 그룹 사전 확률은 group 의 그룹 상대 도수입니다. |
구조체 | 다음과 같은 두 개의 필드를 갖는 구조체
|
prior
는 err
의 계산을 제외하고 마할라노비스 거리에 의한 판별에 사용되지 않습니다.
데이터형: single
| double
| char
| string
| struct
출력 인수
class
— 표본 데이터의 예측 클래스
categorical형 배열 | 문자형 배열 | string형 배열 | 숫자형 벡터 | 문자형 벡터로 구성된 셀형 배열
coeff
— 경계 곡선 계수
구조체
그룹 쌍 간의 경계 곡선 계수로, k×k 구조체로 반환됩니다. 여기서 k는 group
의 그룹 개수입니다. 요소 coeff(i,j)
는 그룹 i
와 j
간의 경계 계수를 포함합니다. 아래 표에는 coeff
필드와 그 값이 나와 있습니다.
필드 이름 | 값 |
---|---|
type | type 으로 지정되는 판별 함수의 유형 |
name1 | 그룹 i 의 이름 |
name2 | 그룹 j 의 이름 |
const | 경계 수식의 상수항(K) |
linear | 경계 수식의 선형 계수(L) |
quadratic | 경계 수식의 2차 계수 행렬(Q). type 을 'linear' 또는 'diagLinear' 로 지정하는 경우 구조체에 이 필드가 포함되지 않습니다. |
type
을'linear'
또는'diagLinear'
로 지정하는 경우,0 < K + x*L
이면 함수는sample
의 행x
를 그룹j
대신에 그룹i
로 분류합니다.type
을'quadratic'
,'diagQuadratic'
또는'mahalanobis'
로 지정하는 경우,0 < K + x*L + x*Q*x'
이면 함수는sample
의 행x
를 그룹j
대신에 그룹i
로 분류합니다.
대체 기능
fitcdiscr
함수도 판별분석을 수행합니다. fitcdiscr
함수를 사용하여 분류기를 훈련시키고 predict
함수를 사용하여 새 데이터의 레이블을 예측할 수 있습니다. fitcdiscr
함수는 교차 검증 및 하이퍼파라미터 최적화를 지원하며, 새로운 예측을 하거나 사전 확률을 변경할 때마다 매번 분류기를 피팅할 필요가 없습니다.
참고 문헌
[1] Krzanowski, Wojtek. J. Principles of Multivariate Analysis: A User's Perspective. NY: Oxford University Press, 1988.
[2] Seber, George A. F. Multivariate Observations. NJ: John Wiley & Sons, Inc., 1984.
버전 내역
R2006a 이전에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)