Main Content

붓꽃 군집화

이 예제에서는 자기 조직화 맵 신경망이 붓꽃을 위상에 따라 클래스별로 군집화하여 종을 판별하고 추가 분석을 위해 어떤 툴을 제공하는지 보여줍니다.

문제: 붓꽃 군집화하기

이 예제에서는 붓꽃을 자연분류별로 군집화하여 유사한 종을 한 그룹으로 묶는 신경망을 만들어 봅니다. 각 붓꽃은 다음과 같은 4개의 특징으로 설명됩니다.

  • 꽃받침 길이(단위: cm)

  • 꽃받침 너비(단위: cm)

  • 꽃잎 길이(단위: cm)

  • 꽃잎 너비(단위: cm)

이 문제는 샘플 간 유사성을 기준으로 샘플을 클래스로 그룹화하는 군집화 문제의 한 예입니다. 여기서는 알려진 입력값에 대해 클래스 정의를 만들 뿐 아니라 알려지지 않은 입력값도 분류하는 신경망을 만들어 봅니다.

자기 조직화 맵 신경망을 사용해야 하는 이유

자기 조직화 맵(SOM)은 분류를 만드는 데 매우 효과적입니다. 또한 이 분류는 위상 정보, 즉 어느 클래스가 다른 클래스와 가장 유사한지에 대한 정보를 가지고 있습니다. 자기 조직화 맵은 원하는 수준의 세부 정보를 갖도록 만들어질 수 있습니다. 자기 조직화 맵은 서로 연결된 복잡한 형태의 다차원 특징 공간에 있는 데이터를 군집화할 때 특히 적합합니다. 따라서 붓꽃을 군집화하기에 적합합니다.

꽃의 4개 특성이 SOM의 입력값으로 사용되며 SOM은 이들 입력값을 2차원 뉴런 계층에 매핑합니다.

데이터 준비하기

군집화 문제를 위한 데이터를 입력 행렬 X로 구성하여 SOM에 사용할 데이터를 준비합니다.

입력 행렬의 각 i번째 열은 개별 꽃에서 관측된 4개의 측정값을 나타내는 4개의 요소를 갖습니다.

이러한 데이터셋을 다음과 같이 불러옵니다.

x = iris_dataset;

입력값 X의 크기를 표시할 수 있습니다.

X는 150개의 열을 갖는 것을 볼 수 있습니다. 이들 열은 150개의 붓꽃 특성 세트를 나타냅니다. 그리고 4개의 측정값에 대응하는 4개의 행을 갖습니다.

size(x)
ans = 1×2

     4   150

신경망을 사용하여 군집화하기

다음 단계는 군집화를 학습할 신경망을 만드는 것입니다.

selforgmap은 샘플을 분류하는 자기 조직화 맵을 만들며, 이때 계층의 각 차원의 뉴런의 개수를 선택함으로써 상세 수준을 정할 수 있습니다.

이 예제에서는 8x8 육각형 그리드에 64개 뉴련을 정렬하는 2차원 계층을 사용해 보겠습니다. 일반적으로, 뉴런이 많을수록 더 상세해지고, 차원이 많을수록 더 복잡한 특징 공간의 위상을 모델링할 수 있습니다.

신경망이 아직 입력 데이터에 맞춰 구성되지 않았으므로 입력값의 크기는 0입니다. 이 구성 작업은 신경망을 훈련시킬 때 수행됩니다.

net = selforgmap([8 8]);
view(net)

이제 train을 사용하여 신경망을 최적화할 준비가 되었습니다.

Neural Network Training 툴은 훈련 중인 신경망과 훈련에 사용되는 알고리즘을 표시합니다. 또한 훈련 중의 상태를 표시하며 훈련을 중지시킨 기준을 녹색으로 강조 표시합니다.

하단의 버튼을 클릭하면 유용한 플롯이 열립니다. 플롯은 훈련하는 도중과 훈련을 마친 후에 열 수 있습니다. 알고리즘 이름과 플롯 버튼 옆에 있는 링크를 클릭하면 해당 항목에 대한 문서가 열립니다.

[net,tr] = train(net,x);

Figure Neural Network Training (25-Jan-2024 15:37:58) contains an object of type uigridlayout.

여기서 자기 조직화 맵은 각 훈련 입력값의 클래스 벡터를 계산하는 데 사용됩니다. 이들 분류는 알려진 꽃들의 특징 공간을 포괄하며, 이제 이를 사용하여 새로운 꽃을 분류할 수 있게 됩니다. 신경망의 출력값은 64x150 행렬입니다. 각 i번째 열은 각 i번째 입력 벡터의 j번째 군집을 나타내며, 입력 벡터의 j번째 요소는 1입니다.

함수 vec2ind는 각 벡터에 대해 출력값이 1인 뉴런의 인덱스를 반환합니다. 64개 뉴런으로 표현되는 64개 군집이므로 인덱스는 1에서 64 사이입니다.

y = net(x);
cluster_index = vec2ind(y);

plotsomtop는 8x8 육각형 그리드에 배치된 64개 뉴런의 자기 조직화 맵 위상을 플로팅합니다. 각 뉴런은 꽃의 서로 다른 클래스를 표현하도록 학습했으며, 인접한 뉴런들은 대개 유사한 클래스를 나타냅니다.

plotsomtop(net)

Figure SOM Topology (plotsomtop) contains an axes object. The axes object with title SOM Topology contains 64 objects of type patch.

plotsomhits는 각 꽃의 클래스를 계산하고 해당 클래스에 속한 꽃의 개수를 표시합니다. 적중 수가 큰 뉴런 영역은 특징 공간에서 밀도가 높은 유사한 영역을 나타내는 클래스입니다. 적중 수가 적은 영역은 특징 공간에서 밀도가 낮은 영역을 나타냅니다.

plotsomhits(net,x)

Figure SOM Sample Hits (plotsomhits) contains an axes object. The axes object with title Hits contains 192 objects of type patch, text.

plotsomnc는 뉴런 이웃 연결을 보여줍니다. 이웃들은 일반적으로 비슷한 샘플을 분류합니다.

plotsomnc(net)

Figure SOM Neighbor Connections (plotsomnc) contains an axes object. The axes object with title SOM Neighbor Connections contains 386 objects of type patch, line.

plotsomnd는 각 뉴런의 클래스와 이웃 간의 거리(유클리드 거리)를 보여줍니다. 밝은 연결은 입력 공간에서 강하게 연결된 영역을 나타냅니다. 반면 어두운 연결은 특징 공간의 영역이 서로 멀리 떨어져 있고 그 사이에 꽃이 없거나 적은 클래스입니다.

입력 공간에서 큰 영역들을 분리하고 있는 어두운 연결끼리 이어진 긴 경계는 경계의 양쪽에 있는 클래스들이 서로 매우 다른 특징을 갖는 꽃을 나타냄을 의미합니다.

plotsomnd(net)

Figure SOM Neighbor Distances (plotsomnd) contains an axes object. The axes object with title SOM Neighbor Weight Distances contains 386 objects of type patch, line.

plotsomplanes는 4개의 입력 특징 각각에 대한 가중치 평면을 보여줍니다. 가중치 평면은 각 입력값을 8x8 육각형 그리드 위의 64개 뉴런에 연결하는 가중치를 시각화한 것입니다. 색이 어두울수록 큰 가중치를 나타냅니다. 두 입력값이 비슷한 가중치 평면을 갖는다는 것은(색 그라데이션이 같거나 반대인 경우) 상관관계가 높음을 의미합니다.

plotsomplanes(net)

Figure SOM Input Planes (plotsomplanes) contains 4 axes objects. Axes object 1 with title Weights from Input 1 contains 64 objects of type patch. Axes object 2 with title Weights from Input 2 contains 64 objects of type patch. Axes object 3 with title Weights from Input 3 contains 64 objects of type patch. Axes object 4 with title Weights from Input 4 contains 64 objects of type patch.

이 예제에서는 붓꽃을 4가지 특성을 기준으로 군집화하는 신경망을 설계하는 방법을 살펴보았습니다.

신경망과 그 응용 분야에 대해 더 알아보려면 다른 예제와 문서를 살펴보십시오.