Main Content

이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

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

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

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

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

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

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

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

문제 정의하기

군집화 문제를 정의하려면 Q 입력 벡터를 입력 행렬의 열로 군집화하면 됩니다. (정적 및 시계열 데이터의 데이터 형식 지정에 대한 자세한 설명은 “데이터 구조”를 참조하십시오.) 예를 들어, 요소를 2개 가진 다음과 같은 벡터 세트 10개를 군집화하려 할 수 있습니다.

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

다음 섹션에서는 nctool GUI를 사용하여 신경망을 훈련시키는 방법을 보여줍니다.

Neural Network Clustering 앱 사용하기

  1. 필요한 경우 다음 명령을 사용하여 Neural Network Start GUI를 엽니다.

    nnstart
    

  2. Clustering app을 클릭하여 Neural Network Clustering 앱을 엽니다. (nctool 명령을 사용할 수도 있습니다.)

  3. Next를 클릭합니다. Select Data 창이 나타납니다.

  4. Load Example Data Set를 클릭합니다. Clustering Data Set Chooser 창이 나타납니다.

  5. 이 창에서 Simple Clusters를 선택한 다음 Import를 클릭합니다. Select Data 창으로 돌아갑니다.

  6. Next를 클릭하여 다음 그림과 같이 Network Size 창으로 이동합니다.

    군집화 문제의 경우, 일반적으로 가장 많이 사용되는 신경망은 자기 조직화 특징 맵(SOM)입니다. 훈련을 마친 신경망의 군집 결과를 분석하는 데 사용할 수 있는 시각화 툴이 많기 때문입니다. 이 신경망은 뉴런이 그리드로 구성된 하나의 계층을 가지고 있습니다. (SOM에 대한 자세한 내용은 “자기 조직화 특징 맵”을 참조하십시오.) 신경망을 만들 때 그리드의 행과 열의 개수를 지정하십시오. 여기에서 행과 열의 개수는 10으로 설정됩니다. 뉴런의 총 개수는 100입니다. 원하는 경우 이 수를 다른 실행에서 변경할 수 있습니다.

  7. Next를 클릭합니다. Train Network 창이 나타납니다.

  8. Train을 클릭합니다.

    이 훈련은 최대 Epoch 횟수(200)에 대해 실행됩니다.

  9. SOM 훈련의 경우 각 뉴런과 연관된 가중 벡터가 이동하여 입력 벡터 군집의 중심이 됩니다. 또한, 위상적으로 서로 인접한 뉴런은 입력 공간에서도 서로 가까운 위치로 이동하게 되므로 고차원 입력 공간을 2차원의 신경망 위상에 시각화할 수 있습니다. SOM에 대한 시각화 툴 중 일부를 살펴보겠습니다. Plots 창에서 SOM Sample Hits를 클릭합니다.

    SOM의 디폴트 위상은 6각형입니다. 이 그림은 뉴런의 위상적 위치를 보여주며 각 뉴런(군집 중심)과 관련된 훈련 데이터의 수를 나타냅니다. 위상은 10 x 10 그리드이므로 100개의 뉴런이 있습니다. 임의의 뉴런과 연관된 최대 적중 수는 31입니다. 따라서 해당 군집에는 31개의 입력 벡터가 있습니다.

  10. 또한 가중치 평면(구성요소 평면이라고도 함)을 표시하여 SOM을 시각화할 수 있습니다. Neural Network Clustering 앱에서 SOM Weight Planes를 클릭합니다.

    이 그림은 입력 벡터의 각 요소(이 경우 두 개)에 대한 가중치 평면을 보여줍니다. 이러한 평면은 각각의 뉴런에 각각의 입력을 연결하는 가중치를 시각화합니다. (어두운 색은 더 큰 가중치를 나타냅니다.) 두 입력의 연결 패턴이 매우 비슷한 경우 입력이 상관관계가 높다고 가정할 수 있습니다. 이 사례에서는 입력 1의 연결이 입력 2의 연결과 매우 다릅니다.

  11. Neural Network Clustering 앱에서 Next를 클릭하여 신경망을 평가합니다.

    이 시점에서 새 데이터에 대해 신경망을 테스트할 수 있습니다.

    원본 데이터 또는 새 데이터에 대한 신경망 성능에 만족하지 못하면 뉴런 수를 늘리거나, 더 큰 훈련 데이터 세트를 가져올 수도 있습니다.

  12. 신경망 성능에 만족하면 Next를 클릭합니다.

  13. 이 패널을 사용하여 신경망 시뮬레이션을 위한 MATLAB 함수 또는 Simulink 다이어그램을 생성합니다. 생성된 코드 또는 도식을 사용하여 신경망이 입력값에서 출력값을 계산하는 방법을 더 명확히 이해하고, 신경망과 함께 MATLAB Compiler 툴과 그 밖의 MATLAB 및 Simulink 코드 생성 툴을 배포할 수 있습니다.

  14. 이 화면의 버튼을 사용하여 결과를 저장합니다.

    • Simple Script 또는 Advanced Script를 클릭하여 명령줄에서 이전 단계를 모두 재현하는 데 사용할 수 있는 MATLAB® 코드를 만들 수 있습니다. 툴박스의 명령줄 기능을 사용하여 훈련 과정을 사용자 지정하는 방법을 배우려면 MATLAB 코드 만들기가 유용할 수 있습니다. 명령줄 함수 사용하기에서, 생성된 스크립트를 자세히 조사해야 합니다.

    • 신경망을 작업 공간에 net으로 저장할 수도 있습니다. 신경망에 대해 추가로 테스트를 수행하거나 새로운 입력값에 대해 작업을 수행할 수 있습니다.

  15. 스크립트를 생성하고 결과를 저장했으면 Finish를 클릭합니다.

명령줄 함수 사용하기

툴박스의 명령줄 기능 사용법을 학습하는 가장 쉬운 방법은 GUI에서 스크립트를 생성한 다음 이를 수정하여 신경망 훈련을 사용자 지정하는 것입니다. 예를 들어, 이전 섹션의 단계 14에서 작성된 간단한 스크립트를 보십시오.

% Solve a Clustering Problem with a Self-Organizing Map
% Script generated by NCTOOL
%
% This script assumes these variables are defined:
%
%   simpleclusterInputs - input data.

inputs = simpleclusterInputs;

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

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

% Test the Network
outputs = net(inputs);

% 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,inputs)
% figure, plotsompos(net,inputs)

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

  1. 이 스크립트는 입력 벡터를 이미 작업 공간에 불러온 상태라고 가정합니다. 명령줄 연산의 예를 보기 위해 GUI 연산에 사용한 것과 다른 데이터 세트를 사용해 볼 수 있습니다. 예제로 꽃 데이터 세트를 사용하십시오. 아이리스 데이터 세트는 요소를 4개 가진 입력 벡터 150개로 구성됩니다.

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

    dimension1 = 10;
    dimension2 = 10;
    net = selforgmap([dimension1 dimension2]);
    
  3. 신경망을 훈련시킵니다. SOM 신경망은 훈련에 적용할 디폴트 알고리즘으로 배치 SOM 알고리즘을 사용합니다.

    [net,tr] = train(net,inputs);
    
  4. 훈련 중에 훈련 창이 열리고 훈련 진행 상황이 표시됩니다. 훈련을 중단하려면 언제든지 Stop Training을 클릭하십시오.

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

    outputs = net(inputs);
    
  6. 신경망 도식을 확인합니다.

    view(net)
    

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

    figure, plotsomtop(net)
    

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

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

  8. U-행렬을 보기 위해 훈련 창의 SOM Neighbor Distances를 클릭합니다.

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

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

  • 훈련 중에 플롯 창(예: SOM 가중치 위치 플롯)을 열고 애니메이션을 확인합니다.

  • plotsomhits, plotsomnc, plotsomnd, plotsomplanes, plotsomposplotsomtop와 같은 함수를 사용하여 명령줄에서 플로팅합니다. (이러한 함수 사용에 대한 자세한 내용은 해당 함수 도움말 페이지를 참조하십시오.)

또한, 명령줄에서 훈련시킬 때 여러 옵션에 대한 고급 스크립트를 살펴보십시오.