Main Content

자기 조직화 맵 신경망을 사용한 군집화

자기 조직화 특징 맵(SOFM)은 입력 공간에서 그룹화된 방식에 따라 입력 벡터를 분류하는 방법을 학습합니다. SOFM은 자기 조직화 맵의 인접 뉴런이 입력 공간의 인접 섹션을 인식하는 방법을 학습한다는 점에서 경쟁 계층과 다릅니다. 따라서 자기 조직화 맵은 훈련 대상이 되는 입력 벡터의 분포(이 점은 경쟁 계층과 같음)와 위상을 모두 학습합니다.

SOFM의 계층에 있는 뉴런은 원래 위상 함수에 따른 물리적 위치로 배열되어 있습니다. 함수 gridtop, hextop 또는 randtop는 뉴런을 그리드, 육각형 또는 임의의 위상적 형태로 배열할 수 있습니다. 뉴런 사이의 거리는 거리 함수를 사용해 각 뉴런의 위치로부터 계산됩니다. 거리 함수에는 dist, boxdist, linkdist, mandist의 4개가 있습니다. 가장 자주 사용되는 거리 함수는 링크 거리입니다. 이들 위상 및 거리 함수에 대해서는 위상(gridtop, hextop, randtop)거리 함수(dist, linkdist, mandist, boxdist)에서 설명합니다.

아래에서는 자기 조직화 특징 맵 신경망이 경쟁 계층에서 사용하는 것과 동일한 절차를 사용하여 승자 뉴런 i*를 식별합니다. 그러나 승자 뉴런만 업데이트하는 것이 아니라, Kohonen 규칙을 사용하여 승자 뉴런의 특정 이웃 Ni*(d) 내에 있는 모든 뉴런을 업데이트합니다. 구체적으로, i ∊ Ni*(d)인 모든 뉴런이 다음과 같이 조정됩니다.

wi(q)=wi(q1)+α(p(q)wi(q1))

또는

wi(q)=(1α)wi(q1)+αp(q)

이웃 Ni*(d)는 승자 뉴런 i*의 반지름 d 이내에 있는 모든 뉴런에 대한 인덱스를 포함합니다.

Ni(d)={j,dijd}

따라서 벡터 p가 입력되면 승자 뉴런 승자 뉴런에서 가장 가까운 이웃들의 가중치가 p에 가까워집니다. 그 결과 입력이 여러 차례 이루어진 후에는 이웃 뉴런들이 서로와 비슷한 벡터를 학습한 상태가 됩니다.

SOFM 훈련의 다른 버전인 배치 알고리즘은 가중치가 업데이트되기 전에 신경망에 전체 데이터 세트를 입력합니다. 그런 다음 알고리즘은 각 입력 벡터에 대해 승자 뉴런을 도출합니다. 이후 각 가중 벡터는 승자 가중 벡터 또는 승자의 이웃이 되는 모든 입력 벡터들의 평균 위치로 이동합니다.

이웃의 개념을 설명하기 위해 다음 그림을 살펴보겠습니다. 왼쪽 도식은 뉴런 13을 중심으로 반지름 d = 1인 2차원 이웃을 보여줍니다. 오른쪽 도식은 반지름 d = 2인 이웃을 보여줍니다.

Side by side diagrams each showing a two-dimensional neighborhood of radius d.

이들 이웃은 N13(1) = {8, 12, 13, 14, 18}과
N13(2) = {3, 7, 8, 9, 11, 12, 13, 14, 15, 17, 18, 19, 23}으로 표현할 수 있습니다.

SOFM의 뉴런을 반드시 2차원 패턴으로 배열할 필요는 없습니다. 1차원 배열을 사용하거나 3차원 또는 그 이상의 차원을 사용할 수 있습니다. 1차원 SOFM의 경우, 뉴런은 반지름 1 이내에 2개의 이웃만 갖습니다(뉴런이 선 끝에 있는 경우에는 1개의 이웃만 가짐). 거리를 다른 방법으로 정의할 수도 있는데, 예를 들어 뉴런과 이웃의 사각형 또는 육각형 배열을 사용할 수 있습니다. 신경망의 성능은 이웃의 정확한 형태에는 민감하지 않습니다.

위상(gridtop, hextop, randtop)

함수 gridtop, hextoprandtop를 사용하여 원래 뉴런 위치에 대해 다양한 위상을 지정할 수 있습니다.

gridtop 위상은 앞의 그림에서 본 것과 비슷한 사각 그리드에 있는 뉴런으로 시작합니다. 예를 들어, 6개의 뉴런으로 구성된 2×3 배열을 만들고자 한다고 가정하겠습니다. 다음과 같이 만들 수 있습니다.

pos = gridtop([2, 3])
pos =
     0     1     0     1     0     1
     0     0     1     1     2     2

뉴런 1의 위치는 (0,0)이고, 뉴런 2의 위치는 (1,0)이고, 뉴런 3의 위치는 (0,1)인 식입니다.

Plot showing the positions of six neurons arranged in a 2-by-3 grid.

만약 차원 크기가 역인 상태로 gridtop를 호출했다면 다음과 같이 약간 다른 배열이 나왔을 것입니다.

pos = gridtop([3, 2])
pos =
     0     1     2     0     1     2
     0     0     0     1     1     1

다음 코드를 사용하여 gridtop 위상을 갖는 8×10 뉴런 세트를 만들 수 있습니다.

pos = gridtop([8 10]);
plotsom(pos)

Figure contains an axes object. The axes object with title Neuron Positions, xlabel position(1,i), ylabel position(2,i) contains 2 objects of type line. One or more of the lines displays its values using only markers

위에서 볼 수 있듯이 gridtop 위상의 뉴런은 실제로 그리드 위에 존재합니다.

hextop 함수도 이와 비슷한 뉴런 세트를 만들지만, 육각형 패턴을 사용합니다. hextop 뉴런의 2×3 패턴은 다음과 같이 생성됩니다.

pos = hextop([2, 3])
pos =
         0    1.0000    0.5000    1.5000         0    1.0000
         0         0    0.8660    0.8660    1.7321    1.7321 

hextopselforgmap을 사용하여 생성한 SOM 신경망의 디폴트 패턴입니다.

다음 코드를 사용하여 hextop 위상을 갖는 8×10 뉴런 세트를 만들고 플로팅할 수 있습니다.

pos = hextop([8 10]);
plotsom(pos)

Figure contains an axes object. The axes object with title Neuron Positions, xlabel position(1,i), ylabel position(2,i) contains 2 objects of type line. One or more of the lines displays its values using only markers

뉴런의 위치가 육각형 배열인 것을 볼 수 있습니다.

마지막으로, randtop 함수는 임의의 N차원 패턴으로 뉴런을 만듭니다. 다음 코드는 임의의 뉴런 패턴을 생성합니다.

pos = randtop([2, 3])
pos =
         0    0.7620    0.6268    1.4218    0.0663    0.7862
    0.0925         0    0.4984    0.6007    1.1222    1.4228

다음 코드를 사용하여 randtop 위상을 갖는 8×10 뉴런 세트를 만들고 플로팅할 수 있습니다.

pos = randtop([8 10]);
plotsom(pos)

Figure contains an axes object. The axes object with title Neuron Positions, xlabel position(1,i), ylabel position(2,i) contains 2 objects of type line. One or more of the lines displays its values using only markers

이에 대한 예로는 이들 위상 함수의 도움말을 참조하십시오.

거리 함수(dist, linkdist, mandist, boxdist)

이 툴박스에는 특정 뉴런에서 이웃까지의 거리를 계산하는 4가지 방법이 있습니다. 각 계산 방법은 특수 함수로 구현되어 있습니다.

dist 함수는 뉴런에서 다른 뉴런까지의 유클리드 거리를 계산합니다. 다음과 같은 3개의 뉴런이 있다고 가정하겠습니다.

pos2 = [0 1 2; 0 1 2]
pos2 =
     0     1     2
     0     1     2

각 뉴런에서 다른 뉴런까지의 거리는 다음과 같이 구합니다.

D2 = dist(pos2)
D2 =
         0    1.4142    2.8284
    1.4142         0    1.4142
    2.8284    1.4142         0

따라서, 뉴런 1에서 자기 자신까지의 거리는 0이고, 뉴런 1에서 뉴런 2까지의 거리는 1.4142인 식입니다.

다음 그래프는 뉴런으로 구성된 2차원(gridtop) 뉴런 계층에서 홈 뉴런을 보여줍니다. 홈 뉴런을 직경이 점점 커지는 이웃들이 둘러싸고 있습니다. 직경이 1인 이웃은 홈 뉴런과 바로 옆의 이웃을 포함합니다. 직경이 2인 이웃은 직경이 1인 뉴런과 바로 옆의 이웃을 포함합니다.

Graph showing a home neuron in a two-dimensional layer of neurons.

dist 함수의 경우, S개 뉴런 계층 맵의 모든 이웃은 거리로 구성된 S×S 행렬로 표현됩니다. 위에 표시된 구체적인 거리(바로 옆 이웃의 경우 1, 이웃 2의 경우 2 등)는 함수 boxdist로 생성된 것입니다. gridtop 구성에 6개의 뉴런이 있다고 가정하겠습니다.

pos = gridtop([2, 3])
pos =
     0     1     0     1     0     1
     0     0     1     1     2     2

이때 상자 거리는 다음과 같습니다.

d = boxdist(pos)
d =
     0     1     1     1     2     2
     1     0     1     1     2     2
     1     1     0     1     1     1
     1     1     1     0     1     1
     2     2     1     1     0     1
     2     2     1     1     1     0

뉴런 2, 3, 4는 바로 옆 이웃이므로 뉴런 1에서 2, 3, 4까지의 거리는 1입니다. 뉴런 1에서 뉴런 5와 6까지의 거리는 2입니다. 3과 4에서 다른 모든 뉴런까지의 거리는 1입니다.

하나의 뉴런에서의 링크 거리는 고려 중인 뉴런에 도달하기 위해 취해야 하는 링크 또는 스텝의 수입니다. 따라서 linkdist를 사용하여 동일한 세트의 뉴런으로부터의 거리를 계산하면 다음과 같은 결과가 나옵니다.

dlink =
     0     1     1     2     2     3
     1     0     2     1     3     2
     1     2     0     1     1     2
     2     1     1     0     2     1
     2     3     1     2     0     1
     3     2     2     1     1     0

두 벡터 xy 사이의 맨해튼 거리는 다음과 같이 계산됩니다.

D = sum(abs(x-y))

따라서 다음과 같이 주어졌을 때

W1 = [1 2; 3 4; 5 6]
W1 =
     1     2
     3     4
     5     6

P1 = [1;1]
P1 =
     1
     1

거리는 다음과 같습니다.

Z1 = mandist(W1,P1)
Z1 =
     1
     5
     9

mandist를 사용하여 계산한 거리는 실제로 위에 나온 수학 표현식을 따릅니다.

아키텍처

아래에는 SOFM의 아키텍처가 나와 있습니다.

Schematic of a Self Organizing Feature Map Network, where input vector p is passed to a competitive layer that calculates output a.

이 아키텍처는 편향이 사용되지 않았다는 점을 제외하면 경쟁 신경망의 아키텍처와 같습니다. 경쟁 전달 함수는 승자 뉴런 i*에 대응되는 출력 요소 a1i 에 대해 1을 생성합니다. a1의 다른 모든 출력 요소는 0입니다.

그러나 위에서 설명한 것처럼 승자 뉴런에 가까운 뉴런은 승자 뉴런과 함께 업데이트됩니다. 여러 가지 뉴런 토폴로지 중에서 선택할 수 있습니다. 마찬가지로, 승자 뉴런에 가까운 뉴런을 계산할 거리 표현식도 여러 가지 중에서 선택할 수 있습니다.

자기 조직화 맵 신경망 만들기(selforgmap)

함수 selforgmap을 사용하여 새 SOM 신경망을 만들 수 있습니다. 이 함수는 학습의 두 가지 단계에서 사용되는 다음 변수를 정의합니다.

  • 순서화 단계 학습률

  • 순서화 단계 스텝

  • 조정 단계 학습률

  • 조정 단계 이웃 거리

이들 값은 훈련 및 적응에 사용됩니다.

다음 예제를 살펴보겠습니다.

요소를 2개 가진 입력 벡터를 갖는 신경망을 만들고, 육각형 2×3 신경망에 6개의 뉴런을 만들려고 한다고 가정하겠습니다. 이 신경망을 만드는 코드는 다음과 같습니다.

net = selforgmap([2 3]);

훈련 대상으로 사용할 벡터가 다음과 같다고 가정하겠습니다.

P = [.1 .3 1.2 1.1 1.8 1.7 .1 .3 1.2 1.1 1.8 1.7;...
0.2 0.1 0.3 0.1 0.3 0.2 1.8 1.8 1.9 1.9 1.7 1.8];

다음 코드를 사용하여 신경망에 데이터가 입력되도록 구성하고 이 모든 것을 플로팅할 수 있습니다.

net = configure(net,P);
plotsompos(net,P)

Figure SOM Weight Positions (plotsompos) contains an axes object. The axes object with title SOM Weight Positions, xlabel Weight 1, ylabel Weight 2 contains 3 objects of type line. One or more of the lines displays its values using only markers

녹색 점은 훈련 벡터입니다. selforgmap에 대한 초기화를 수행하면 초기 가중치가 입력 공간 전체로 분산됩니다. 초기에는 훈련 벡터에서의 거리가 어느 정도 있는 것을 볼 수 있습니다.

신경망을 시뮬레이션할 때, 각 뉴런의 가중 벡터와 입력 벡터 사이의 음의 거리가 계산되어(negdist) 가중 입력값이 구해집니다. 가중 입력값은 순 입력값(netsum)이기도 합니다. 순 입력값은 가장 양인 순 입력값을 갖는 뉴런만 1을 출력하도록 경쟁합니다(compet).

훈련(learnsomb)

자기 조직화 특징 맵에서 디폴트 학습은 배치 모드(trainbu)로 이루어집니다. 자기 조직화 맵의 가중치 학습 함수는 learnsomb입니다.

먼저 신경망이 각 입력 벡터에 대해 승자 뉴런을 식별합니다. 이후 각 가중 벡터는 가중 벡터가 승자가 되거나 가중 벡터가 승자의 이웃이 되는 모든 입력 벡터의 평균 위치로 이동합니다. 이웃의 크기를 정의하는 거리는 훈련 중에 두 단계를 거쳐 변경됩니다.

순서화 단계

이 단계는 주어진 스텝 수만큼 지속됩니다. 이웃 거리는 주어진 초기 거리에서 시작해서 조정 이웃 거리(1.0)로 줄어듭니다. 이 단계가 진행되며 이웃 거리가 줄어듦에 따라 신경망의 뉴런들은 입력 공간에서 물리적인 순서와 동일한 위상으로 배열됩니다.

조정 단계

이 단계는 나머지 훈련 또는 적응 과정 동안 지속됩니다. 이웃 크기가 1 미만으로 줄어들었으므로 승자 뉴런만이 각 샘플에 대해 학습합니다.

이러한 신경망에서 자주 사용되는 몇 가지 특정 값을 살펴보겠습니다.

학습은 learnsomb 학습 파라미터에 따라 이루어지는데, 여기에 그 디폴트 값이 나와 있습니다.

학습 파라미터

디폴트 값

목적

LP.init_neighborhood

3

초기 이웃 크기

LP.steps

100

순서화 단계 스텝

이웃 크기 NS는 순서화 단계와 조정 단계, 이 두 단계를 거치면서 변경됩니다.

순서화 단계는 LP.steps개 스텝만큼 지속됩니다. 이 단계가 진행되는 동안 알고리즘은 초기 이웃 크기 LP.init_neighborhood에서 1까지 ND를 조정합니다. 입력 공간에서 뉴런 가중치가 그에 대응되는 뉴런 위치에 따라 배열되는 것도 이 단계입니다.

조정 단계가 진행되는 동안 ND는 1보다 작습니다. 이 단계가 진행되는 동안 가중치는 순서화 단계에서 발견된 위상적 순서를 유지하면서 입력 공간에서 비교적 균등하게 퍼져 나갈 것으로 예상됩니다.

따라서, 뉴런의 가중 벡터는 처음에는 입력 벡터가 발생하는 입력 공간의 영역을 향해 다 함께 큰 스텝으로 이동합니다. 그러다 이웃 크기가 1을 향해 줄어들면 입력된 입력 벡터에 맞게 맵이 위상적으로 배열됩니다. 이웃 크기가 1이 되면 신경망은 상당히 잘 배열됩니다. 훈련은 뉴런이 입력 벡터에 걸쳐 균등하게 퍼져 나갈 시간을 주기 위해 계속됩니다.

경쟁 계층에서처럼, 자기 조직화 맵의 뉴런은 입력 벡터가 입력 공간의 한 섹션에서 균등한 확률로 나타날 경우 대략적으로 동일한 거리를 두고 배열됩니다. 입력 벡터가 입력 공간 전체에서 다양한 빈도로 발생할 경우 특징 맵 계층은 입력 벡터의 빈도에 비례하여 뉴런을 한 영역에 할당하는 경향이 있습니다.

이처럼 특징 맵은 입력값을 분류하는 방법을 학습할 뿐 아니라 입력값의 위상과 분포도 학습합니다.

다음과 같이 Epoch 1000회만큼 신경망을 훈련시킬 수 있습니다.

net.trainParam.epochs = 1000;
net = train(net,P);

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

plotsompos(net,P)

Figure SOM Weight Positions (plotsompos) contains an axes object. The axes object with title SOM Weight Positions, xlabel Weight 1, ylabel Weight 2 contains 3 objects of type line. One or more of the lines displays its values using only markers

뉴런이 여러 훈련 그룹을 향해 이동하기 시작한 것을 볼 수 있습니다. 뉴런을 여러 그룹으로 가까이 이동하려면 훈련이 추가로 필요합니다.

앞에서 언급했듯이, 자기 조직화 맵은 뉴런의 가중치가 업데이트되는 방식에서 일반적인 경쟁 학습과 차이가 있습니다. 특징 맵은 승자만 업데이트하지 않고 승자와 그 이웃의 가중치를 업데이트합니다. 그 결과 이웃한 뉴런들이 비슷한 가중 벡터를 갖게 되고 비슷한 입력 벡터에 반응을 보이게 됩니다.

예제

아래에서는 2개의 예제를 간략하게 설명합니다. 이와 비슷한 예제인 One-Dimensional Self-Organizing Map 항목과 Two-Dimensional Self-Organizing Map 항목도 살펴보십시오.

1차원 자기 조직화 맵

0°와 90° 사이에 균등하게 퍼져 있는 요소를 2개 가진 100개의 단위 입력 벡터가 있습니다.

angles = 0:0.5*pi/99:0.5*pi;

데이터의 플롯은 다음과 같습니다.

P = [sin(angles); cos(angles)];

Plot of 100 unit vectors spread evenly between 0 degrees and 90 degrees.

자기 조직화 맵은 10개의 뉴런으로 구성된 1차원 계층으로 정의됩니다. 이 맵을 위에 제시한 입력 벡터를 대상으로 훈련시킵니다. 이들 뉴런은 원래 Figure의 중앙에 존재합니다.

Plot of the weight vectors before training, showing a single point.

모든 가중 벡터가 입력 벡터 공간의 가운데에서 시작하므로 지금은 하나의 원밖에 보이지 않습니다.

훈련이 시작되면 가중 벡터가 입력 벡터를 향해 이동합니다. 이웃 크기가 줄어듦에 따라 순서에 따라 배열됩니다. 마지막으로, 각 뉴런이 입력 공간에서 입력 벡터가 차지하는 영역에 강하게 반응하도록 계층이 가중치를 조정합니다. 이웃하는 뉴런 가중 벡터의 배치 또한 입력 벡터의 위상을 반영합니다.

Plot of the weight vectors after training, showing the weight vectors lying on the boundary of the unit circle, mirroring the input vectors.

자기 조직화 맵은 임의의 순서로 입력 벡터를 대상으로 훈련되므로 동일한 초기 벡터로 시작했다고 해서 동일한 훈련 결과를 얻는다고 보장할 수 없습니다.

2차원 자기 조직화 맵

이 예제에서는 2차원 자기 조직화 맵을 훈련시키는 방법을 보여줍니다.

먼저 다음 코드를 사용하여 임의의 입력 데이터를 만듭니다.

P = rands(2,1000);

이들 1000개의 입력 벡터의 플롯은 다음과 같습니다.

Plot of 1000 random input vectors between [-1 -1] and [1 1].

30개의 뉴런으로 구성된 5×6 2차원 맵을 사용하여 입력 벡터를 분류합니다. 2차원 맵은 뉴런 5개x6개로 구성되어 있으며, 거리는 맨해튼 거리 이웃 함수 mandist를 사용하여 계산됩니다.

그런 다음 5000번의 입력 주기에 대해 훈련시키고, 20주기마다 표시합니다.

다음은 40주기 후에 자기 조직화 맵의 모습입니다.

Plot of weight vectors after 40 cycles.

원으로 표시된 가중 벡터는 거의 무작위로 배치되어 있습니다. 그러나 40 입력 주기밖에 지나지 않았는데도 선으로 연결된 이웃 뉴런들은 가까운 가중 벡터를 갖고 있습니다.

다음은 120주기 후의 맵입니다.

Plot of weight vectors after 120 cycles.

120주기가 지난 후에는 맵이 입력 벡터에 제약 조건을 적용하는 입력 공간의 위상에 따라 스스로를 조직화하기 시작한 것을 볼 수 있습니다.

다음은 500주기 후의 플롯으로, 맵이 입력 공간 전체에 걸쳐 더 균일하게 분포된 것을 보여줍니다.

Plot of weight vectors after 500 cycles.

마지막으로, 5000주기가 지난 후에는 맵이 입력 공간 전체에서 상당히 균일하게 퍼져 있습니다. 뉴런 또한 이 문제의 입력 벡터의 균일한 분포를 반영하여 매우 균일한 간격을 갖고 있습니다.

Plot of weight vectors after 5000 cycles.

이렇게 해서 2차원 자기 조직화 맵이 입력 공간의 위상을 학습했습니다.

자기 조직화 맵은 이웃하는 뉴런이 비슷한 입력값을 인식하도록 스스로를 조직화하는 데는 오랜 시간이 걸리지 않지만 입력 벡터의 분포에 따라 스스로를 배열하는 데는 오랜 시간이 걸릴 수 있음에 유의해야 합니다.

배치 알고리즘을 사용하여 훈련시키기

배치 훈련 알고리즘은 일반적으로 증분 알고리즘보다 훨씬 빠르며 SOFM 훈련의 디폴트 알고리즘입니다. 다음 명령을 사용하여 간단한 데이터 세트에 대해 이 알고리즘을 실험해 볼 수 있습니다.

x = simplecluster_dataset
net = selforgmap([6 6]);
net = train(net,x);

위 명령 시퀀스는 36개의 뉴런으로 구성된 6×6 2차원 맵을 만들고 훈련시킵니다. 훈련 중에 다음과 같은 Figure가 표시됩니다.

Neural Network Training Progress Window, showing that the network trained for 200 epochs in 4 seconds.

이 창에서 몇 가지 유용한 시각화에 액세스할 수 있습니다. SOM 가중치 위치를 클릭하면 데이터 점과 가중 벡터의 위치를 보여주는 다음 Figure가 나타납니다. Figure에서 볼 수 있듯이 배치 알고리즘을 반복 200회만 실시한 후에도 맵이 입력 공간 전체에 잘 분포됩니다.

Plot of the data points and weight vectors, with the 36 weight vectors arranged according to the distribution of input data points.

입력 공간의 차원이 더 높은 경우에는 동시에 모든 가중치를 시각화할 수는 없습니다. 이 경우 SOM 이웃 거리를 클릭합니다. 이웃하는 뉴런 사이의 거리를 보여주는 다음 Figure가 나타납니다.

이 Figure는 다음과 같은 색 코드를 사용합니다.

  • 파란색 육각형은 뉴런을 나타냅니다.

  • 빨간색 선은 인접한 뉴런을 연결합니다.

  • 빨간색 선을 포함하는 영역의 색상은 뉴런 간의 거리를 나타냅니다.

  • 더 어두운 색은 더 먼 거리를 나타냅니다.

  • 더 밝은 색은 더 가까운 거리를 나타냅니다.

밝은 세그먼트 그룹이 4개 있고 이를 어두운 세그먼트가 둘러싸고 있는 것을 볼 수 있습니다. 이와 같은 그룹화는 신경망이 데이터를 4개의 그룹으로 군집화했음을 나타냅니다. 이 4개 그룹은 앞에 나온 가중치 위치 Figure에서 볼 수 있습니다.

Neighbour distances plot.

각 뉴런과 연관 있는 데이터 점이 몇 개인지 보여주는 유용한 Figure도 있습니다. SOM 샘플 적중을 클릭하여 다음 Figure를 표시합니다. 데이터가 여러 뉴런에 걸쳐 꽤 균일하게 분포된 경우가 가장 좋습니다. 이 예에서 코너의 뉴런에 데이터가 조금 더 밀집되어 있지만 전체적으로 분포가 꽤 균일하다고 볼 수 있습니다.

Sample hits plot showing how many data points are associated with each neuron by plotting 36 hexagons representing the neurons, each with a number overlaid indicating how many data points are associated with that neuron.

가중치 평면 Figure를 사용하여 가중치 자체를 시각화할 수도 있습니다. 훈련 창에서 SOM 입력 평면을 클릭하여 다음 Figure를 표시합니다. 입력 벡터의 각 요소(이 경우 두 개)에 대해 가중치 평면이 있습니다. 이러한 평면은 각각의 뉴런에 각각의 입력을 연결하는 가중치를 시각화합니다. (밝은 색은 더 큰 가중치를 나타내고 어두운 색은 더 작은 가중치를 나타냅니다.) 두 입력의 연결 패턴이 매우 비슷한 경우 입력이 상관관계가 높다고 가정할 수 있습니다. 이 사례에서는 입력 1의 연결이 입력 2의 연결과 매우 다릅니다.

Weight planes plots, showing two weights planes that appear different indicating that the inputs are not highly correlated.

지금까지 살펴본 모든 Figure를 명령줄에서 생성할 수도 있습니다. 플로팅 명령 plotsomhits, plotsomnc, plotsomnd, plotsomplanes, plotsomposplotsomtop를 사용해 보십시오.