Main Content

자기 조직화 맵으로 데이터 군집화하기

데이터 군집화는 신경망의 또 다른 탁월한 응용 분야입니다. 이 과정은 유사성별로 데이터를 그룹화하는 작업을 포함합니다. 예를 들어, 다음을 수행할 수 있습니다.

  • 구매 패턴에 따라 사람들을 그룹화하여 시장 세분화

  • 데이터를 관련 서브셋으로 분할하여 데이터 마이닝

  • 유전자를 관련 발현 패턴별로 그룹화하여 생물정보 분석

꽃잎 길이, 꽃잎 너비, 꽃받침 길이, 꽃받침 너비에 따라 꽃 유형을 분류하기를 원한다고 가정합니다. 이 네 가지 측정값에 대한 150개 표본이 있습니다.

함수 피팅 및 패턴 인식과 마찬가지로 이 문제를 해결하는 데 두 가지 방법이 있습니다.

일반적으로 앱으로 시작한 다음, 앱을 사용하여 명령줄 스크립트를 자동으로 생성하는 것이 가장 좋습니다. 두 방법 중 하나를 사용하기 전에 먼저 데이터 세트를 선택하여 문제를 정의하십시오. 각 신경망 앱은 툴박스를 실험하는 데 쓸 수 있는 샘플 데이터 세트에 액세스할 수 있습니다(얕은 신경망을 위한 샘플 데이터 세트 참조). 해결하려는 특정한 문제가 있는 경우, 자신의 데이터를 작업 공간으로 불러올 수 있습니다. 다음 섹션에서는 데이터 형식을 설명합니다.

문제 정의하기

군집화 문제를 정의하려면 군집화할 입력 벡터(예측 변수)를 입력 행렬의 열로 정렬하면 됩니다. 예를 들어, 요소를 2개 가진 다음과 같은 벡터 세트 10개를 군집화하려 할 수 있습니다.

predictors = [7 0 6 2 6 5 6 1 0 1; 6 2 5 0 7 5 5 1 2 2]

다음 섹션에서는 신경망 군집화 앱을 사용하여 데이터를 군집화하도록 신경망을 훈련시키는 방법을 보여줍니다. 이 예제는 툴박스와 함께 제공된 예제 데이터 세트를 사용합니다.

신경망 군집화 앱을 사용하여 데이터 군집화하기

이 예제에서는 신경망 군집화 앱을 사용하여 데이터를 군집화하도록 얕은 신경망을 훈련시키는 방법을 보여줍니다.

nctool을 사용하여 신경망 군집화 앱을 엽니다.

nctool

데이터 선택하기

신경망 군집화 앱에는 신경망 훈련을 시작하는 데 사용할 수 있는 예제 데이터가 있습니다.

붓꽃 군집화 예제 데이터를 가져오려면 가져오기 > 붓꽃 데이터 세트 가져오기를 선택하십시오. 파일이나 작업 공간에서 사용자 소유의 데이터를 가져올 경우, 예측 변수를 지정하고 관측값이 행에 있는지 아니면 열에 있는지를 지정해야 합니다.

가져온 데이터에 관한 정보는 모델 요약에 표시됩니다. 이 데이터 세트는 150개의 관측값을 포함하며 각 관측값에는 4개의 특징이 있습니다.

신경망 만들기

군집화 문제의 경우, 일반적으로 가장 많이 사용되는 신경망은 자기 조직화 특징 맵(SOM)입니다. 이 신경망은 뉴런이 그리드로 구성된 하나의 계층을 가지고 있습니다. 자기 조직화 맵은 유사성을 기준으로 데이터를 군집화하도록 학습합니다. SOM에 대한 자세한 내용은 자기 조직화 맵 신경망을 사용한 군집화 항목을 참조하십시오.

신경망을 만들려면 그리드의 행과 열의 개수에 대응하는 맵 크기를 지정하십시오. 이 예제에서는 맵 크기 값을 10으로 설정하며, 이 값은 10개의 행과 10개의 열을 가진 그리드에 대응되는 값입니다. 이 예제에서 뉴런의 전체 개수는 그리드의 점 개수와 같으며 맵은 100개의 뉴런을 갖습니다. 신경망 창에서 신경망 아키텍처를 확인할 수 있습니다.

신경망 훈련시키기

신경망을 훈련시키려면 훈련을 클릭하십시오. 훈련 창에서 훈련 진행 상황을 확인할 수 있습니다. 훈련은 중지 기준 중 하나를 충족할 때까지 계속됩니다. 이 예제에서는 Epoch의 최대 횟수에 도달할 때까지 훈련이 계속됩니다.

결과 분석하기

훈련 결과를 분석하려면 플롯을 생성하십시오. SOM 훈련의 경우 각 뉴런과 연관된 가중 벡터가 이동하여 입력 벡터 군집의 중심이 됩니다. 또한, 위상적으로 서로 인접한 뉴런은 입력 공간에서도 서로 가까운 위치로 이동하게 되므로 고차원 입력 공간을 2차원의 신경망 위상에 시각화할 수 있습니다. SOM의 디폴트 위상은 6각형입니다.

SOM 샘플 적중을 플로팅하려면 플롯 섹션에서 샘플 적중을 클릭하십시오. 이 그림은 뉴런의 위상적 위치를 보여주며 각 뉴런(군집 중심)과 관련된 관측값의 수를 나타냅니다. 위상은 10×10 그리드이므로 100개의 뉴런이 있습니다. 임의의 뉴런과 연관된 최대 적중 수는 5입니다. 따라서 해당 군집에는 5개의 입력 벡터가 있습니다.

가중치 평면(성분 평면이라고도 함)을 플로팅합니다. 플롯 섹션에서 가중치 평면을 클릭합니다. 이 그림은 입력 특징의 각 요소(이 예제에서는 4개)에 대한 가중치 평면을 보여줍니다. 이 플롯은 각각의 뉴런에 각각의 입력을 연결하는 가중치를 보여줍니다. 어두운 색일수록 더 큰 가중치를 나타냅니다. 두 특징의 연결 패턴이 매우 비슷한 경우 특징 간의 상관관계가 높다고 가정할 수 있습니다.

신경망 성능에 만족하지 못하는 경우 다음 중 하나를 수행할 수 있습니다.

  • 신경망을 다시 훈련시킵니다. 각 훈련은 신경망의 초기 가중치와 편향이 다양하며, 재훈련 후 향상된 신경망을 생성할 수 있습니다.

  • 맵 크기를 증가시켜 뉴런 수를 늘립니다.

  • 더 큰 훈련 데이터 세트를 사용합니다.

또한, 추가 테스트 세트에 대해 신경망 성능을 평가할 수 있습니다. 추가 테스트 데이터를 불러와서 신경망을 평가하려면 테스트 섹션에서 테스트를 클릭하십시오. 플롯을 생성하여 추가 테스트 결과를 분석합니다.

코드 생성하기

코드 생성 > 단순 훈련 스크립트 생성을 선택하여 명령줄에서 이전 단계를 재현할 수 있는 MATLAB 코드를 만듭니다. 툴박스의 명령줄 기능을 사용하여 훈련 과정을 사용자 지정하는 방법을 배우려면 MATLAB 코드 만들기가 유용할 수 있습니다. 명령줄 함수를 사용하여 데이터 군집화하기에서 생성된 스크립트를 자세히 조사해야 합니다.

신경망 내보내기

훈련된 신경망을 작업 공간 또는 Simulink®로 내보낼 수 있습니다. 또한, 신경망과 함께 MATLAB Compiler™ 툴과 그 밖의 MATLAB 코드 생성 툴을 배포할 수 있습니다. 훈련된 신경망과 결과를 내보내려면 모델 내보내기 > 작업 공간으로 내보내기를 선택하십시오.

명령줄 함수를 사용하여 데이터 군집화하기

툴박스의 명령줄 기능 사용법을 학습하는 가장 쉬운 방법은 앱에서 스크립트를 생성한 다음 이를 수정하여 신경망 훈련을 사용자 지정하는 것입니다. 한 예로, 이전 섹션에서 작성한 신경망 군집화 앱을 통해 살펴보십시오.

% Solve a Clustering Problem with a Self-Organizing Map
% Script generated by Neural Clustering app
% Created 21-May-2021 10:15:01
%
% This script assumes these variables are defined:
%
%   irisInputs - input data.

x = irisInputs;

% Create a Self-Organizing Map
dimension1 = 10;
dimension2 = 10;
net = selforgmap([dimension1 dimension2]);

% Train the Network
[net,tr] = train(net,x);

% Test the Network
y = net(x);

% View the Network
view(net)

% Plots
% Uncomment these lines to enable various plots.
%figure, plotsomtop(net)
%figure, plotsomnc(net)
%figure, plotsomnd(net)
%figure, plotsomplanes(net)
%figure, plotsomhits(net,x)
%figure, plotsompos(net,x)

스크립트를 저장한 다음, 명령줄에서 실행하여 이전 훈련 세션의 결과를 재현할 수 있습니다. 스크립트를 편집하여 훈련 과정을 사용자 지정할 수도 있습니다. 이 사례에서는 스크립트의 각 단계를 따르십시오.

데이터 선택하기

이 스크립트는 예측 변수를 이미 작업 공간에 불러온 상태라고 가정합니다. 데이터를 불러오지 않은 경우 다음과 같이 불러올 수 있습니다.

load iris_dataset

이 명령은 예측 변수 irisInputs를 작업 공간으로 불러옵니다.

이 데이터 세트는 툴박스의 일부인 샘플 데이터 세트 중 하나입니다. 사용할 수 있는 데이터 세트에 대한 자세한 내용은 얕은 신경망을 위한 샘플 데이터 세트 항목을 참조하십시오. 또한, help nndatasets 명령을 입력하여 사용 가능한 모든 데이터 세트 목록을 볼 수 있습니다. 사용자 자신의 변수 이름을 사용하여 이러한 데이터 세트에서 변수를 불러올 수 있습니다. 예를 들어, 다음 명령은

x = irisInputs;
붓꽃 예측 변수를 배열 x로 불러옵니다.

신경망 만들기

신경망을 만듭니다. 이 예제에서는 자기 조직화 맵(SOM)을 사용합니다. 이 신경망은 계층이 하나이며, 뉴런은 그리드로 구성됩니다. 자세한 내용은 자기 조직화 맵 신경망을 사용한 군집화 항목을 참조하십시오. selforgmap을 사용하여 신경망을 만들 때 그리드의 행과 열의 개수를 지정합니다.

dimension1 = 10;
dimension2 = 10;
net = selforgmap([dimension1 dimension2]);

신경망 훈련시키기

신경망을 훈련시킵니다. SOM 신경망은 훈련에 적용할 디폴트 알고리즘으로 배치 SOM 알고리즘을 사용합니다.

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

훈련 중에 훈련 창이 열리고 훈련 진행 상황이 표시됩니다. 중지 버튼 을 클릭하여 언제든지 훈련을 중단할 수 있습니다.

Neural network training progress window

신경망 테스트하기

신경망을 테스트합니다. 훈련을 마친 신경망을 사용하여 신경망 출력값을 계산할 수 있습니다.

y = net(x);

신경망 보기

신경망 도식을 확인합니다.

view(net)

Graphical representation of the clustering network. The network has input size 4 and output size 100.

결과 분석하기

SOM 훈련의 경우 각 뉴런과 연관된 가중 벡터가 이동하여 입력 벡터 군집의 중심이 됩니다. 또한, 위상적으로 서로 인접한 뉴런은 입력 공간에서도 서로 가까운 위치로 이동하게 되므로 고차원 입력 공간을 2차원의 신경망 위상에 시각화할 수 있습니다. 디폴트 SOM 위상은 육각형입니다. 이것을 보려면 다음 명령을 입력하십시오.

figure, plotsomtop(net)

SOM topology displaying a 10-by-10 grid of hexagons

이 그림에서 각 육각형은 뉴런을 나타냅니다. 그리드는 10×10 크기이므로 이 신경망에는 총 100개의 뉴런이 있습니다. 각 입력 벡터에는 4개의 특징이 있으므로 입력 공간은 4차원입니다. 가중 벡터(군집 중심)는 이 공간에 속합니다.

이 SOM은 2차원 위상을 가지므로 4차원 군집 중심 간의 관계를 2차원으로 시각화할 수 있습니다. SOM을 위한 시각화 툴 중 하나는 가중치 거리 행렬(U-행렬이라고도 함)입니다.

U-행렬을 보기 위해 훈련 창의 SOM 이웃 거리를 클릭합니다.

SOM neighbor weight distance plot

이 그림에서 파란색 육각형은 뉴런을 나타냅니다. 빨간색 선은 인접한 뉴런을 연결합니다. 빨간색 선을 포함하는 영역의 색상은 뉴런 간의 거리를 나타냅니다. 더 어두운 색은 더 먼 거리를 나타내고 더 밝은 색은 더 가까운 거리를 나타냅니다. 어두운 조각의 띠가 맵을 지나가고 있습니다. SOM 신경망은 두 개의 개별 그룹으로 꽃을 군집화한 것처럼 보입니다.

다음 단계

명령줄 연산에 대한 더 많은 경험을 얻으려면 다음 작업 중 일부를 수행해 보십시오.

참고 항목

| | | | |

관련 항목