자기 조직화 맵으로 데이터 군집화하기
데이터 군집화는 신경망의 또 다른 탁월한 응용 분야입니다. 이 과정은 유사성별로 데이터를 그룹화하는 작업을 포함합니다. 예를 들어, 다음을 수행할 수 있습니다.
구매 패턴에 따라 사람들을 그룹화하여 시장 세분화
데이터를 관련 서브셋으로 분할하여 데이터 마이닝
유전자를 관련 발현 패턴별로 그룹화하여 생물정보 분석
꽃잎 길이, 꽃잎 너비, 꽃받침 길이, 꽃받침 너비에 따라 꽃 유형을 분류하기를 원한다고 가정합니다. 이 네 가지 측정값에 대한 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);
훈련 중에 훈련 창이 열리고 훈련 진행 상황이 표시됩니다. 중지 버튼 을 클릭하여 언제든지 훈련을 중단할 수 있습니다.
신경망 테스트하기
신경망을 테스트합니다. 훈련을 마친 신경망을 사용하여 신경망 출력값을 계산할 수 있습니다.
y = net(x);
신경망 보기
신경망 도식을 확인합니다.
view(net)
결과 분석하기
SOM 훈련의 경우 각 뉴런과 연관된 가중 벡터가 이동하여 입력 벡터 군집의 중심이 됩니다. 또한, 위상적으로 서로 인접한 뉴런은 입력 공간에서도 서로 가까운 위치로 이동하게 되므로 고차원 입력 공간을 2차원의 신경망 위상에 시각화할 수 있습니다. 디폴트 SOM 위상은 육각형입니다. 이것을 보려면 다음 명령을 입력하십시오.
figure, plotsomtop(net)
이 그림에서 각 육각형은 뉴런을 나타냅니다. 그리드는 10×10 크기이므로 이 신경망에는 총 100개의 뉴런이 있습니다. 각 입력 벡터에는 4개의 특징이 있으므로 입력 공간은 4차원입니다. 가중 벡터(군집 중심)는 이 공간에 속합니다.
이 SOM은 2차원 위상을 가지므로 4차원 군집 중심 간의 관계를 2차원으로 시각화할 수 있습니다. SOM을 위한 시각화 툴 중 하나는 가중치 거리 행렬(U-행렬이라고도 함)입니다.
U-행렬을 보기 위해 훈련 창의 SOM 이웃 거리를 클릭합니다.
이 그림에서 파란색 육각형은 뉴런을 나타냅니다. 빨간색 선은 인접한 뉴런을 연결합니다. 빨간색 선을 포함하는 영역의 색상은 뉴런 간의 거리를 나타냅니다. 더 어두운 색은 더 먼 거리를 나타내고 더 밝은 색은 더 가까운 거리를 나타냅니다. 어두운 조각의 띠가 맵을 지나가고 있습니다. SOM 신경망은 두 개의 개별 그룹으로 꽃을 군집화한 것처럼 보입니다.
다음 단계
명령줄 연산에 대한 더 많은 경험을 얻으려면 다음 작업 중 일부를 수행해 보십시오.
훈련 중에 플롯 창(예: SOM 가중치 위치 플롯)을 열고 애니메이션을 확인합니다.
plotsomhits
,plotsomnc
,plotsomnd
,plotsomplanes
,plotsompos
및plotsomtop
와 같은 함수를 사용하여 명령줄에서 플로팅합니다.
참고 항목
신경망 피팅 | 신경망 시계열 | 신경망 패턴 인식 | 신경망 군집화 | 심층 신경망 디자이너 | train