일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 코딩없이데이터분석
- BrighticsStudio
- 데이터분석대외활동
- Datascientist
- samsungsds
- 모델링
- EDA
- 브라이틱스데이터분석
- 삼성sds
- houseprice
- 상권배후지
- AdSP
- 삼성자격증
- SDSBrightics
- Brightics
- Brightics서포터즈
- kaggle
- 데이터전처리
- 회귀모형평가
- Kaggle출전
- 브라이틱스
- 골목상권데이터분석
- 분석모델링
- 브라이틱스서포터즈
- associateDS
- IT멘토링
- 삼성SDSBrightics
- 서울시상권분석
- ProDS
- 데이터분석
- Today
- Total
Database for Everything
[삼성 SDS Brightics] K-means 군집화 알고리즘 - 브라이틱스로 와인 등급 비교하기 본문
안녕하세요! yeenn입니다.
무더위에 잘 지내고 계신가요?
현재 저는 브라이틱스 홍보영상미션 수행을 위해 촬영 후 팀원들과 나누어 편집작업과 회의를 열심히 진행중에 있는데요, https://yeenn-db.tistory.com/17
[삼성 SDS Brightics] Brightic3 3조의 기가막히는 홍보영상 촬영비하인드 A to Z!!
안녕하세요! 이번 포스팅은 바로바로.. "브라이틱스 홍보 영상 제작 후기" 입니다! 다행이도 코로나로 인한 서울 거리두기 4단계 격상 이전에 촬영을 마칠 수 있었어 요! 5인이상 집합금지이기 때
yeenn-db.tistory.com
이번 주 내로 조금 더 자세한 촬영 Behind + 회의 후기 와 관련한 추가 포스팅이 올라갈 예정이니 지켜봐주세요!
이번 개인 포스팅의 주제는 "군집화(Clustering)"입니다!
[이론 학습]
"군집화(Clustering)이란?"
군집화는, 라벨이 없는 데이터를 사용하는 비지도 학습(unsupervised learning)의 대표적인 방법으로서 비슷한 속성을 가진 개체끼리 군집을 묶는 것을 의미합니다.
군집 분석은 각 데이터 개체에 대해 사전에 정의된 군집 정보가 없으므로, 데이터의 특성만을 이용하여 유사한 개체들을 그룹화하는 것이 특징이라고 할 수 있습니다.
이 군집화 방법은 매우 다양한데요, 대표적인 군집화 기준인
'계층적 군집화'와 '분할 군집화', '모형 기반 군집화'의 대표 알고리즘을 중심으로 군집화를 조금 더 자세히 살펴보도록 하겠습니다.
▣ 군집화 방법
● 계층적 군집화(hierarchical clustering)
설명 | 알고리즘 |
한 개의 데이터 객체만을 갖는 단일 원소 군집으로부터 출발하여 서로 유사한 군집을 묶는 과정을 반복적으로 수행하는 기법 | BIRCH, CURE |
● 분할 군집화(partitional clustering)
설명 | 알고리즘 |
데이터 객체들을 중복이 없는 부분집합으로 나누는 것으로, 데이터 객체를 K개의 군집으로 나누고 군집이 잘 나뉘어졌는지를 군집 평가 측도로 평가하는 방식 | K-means, K-medoids |
● 모델 기반 군집화(clustering algorithm based on model)
설명 | 알고리즘 |
데이터가 속한 군집이 내재되어 있는 분포로부터 형성되었다고 가정하고, 통계적 모델을 추정하여 각 데이터가 군집에 속할 확률을 구하는 방식 | GMM |
▣ K-means 군집화 알고리즘
-K-means 군집화 알고리즘은 대표적인 분할 군집화 기법의 한 종류인데요, 이 알고리즘에서는 사용자가 나누려는 군집의 개수 'K'를 사전에 지정해야 합니다.
-K개의 초기 중심점을 선택하면, 각 개체들은 가장 가까운 중심점에 지정됩니다.
-그리고 이렇게 각 중심점에 할당된 점들이 모여 군집을 형성하게 되고, 군집의 대푯값을 군집별 개체들의 중심점으로 갱신한 다음, 중심점에 가까운 점들을 재할당하는 과정을 군집이 더 이상 변동이 없을 때까지 반복합니다.
-위 chart는 k-means clustering으로 k=3(3개의 그룹)으로 구분하는 매커니즘을 보여주고 있는데요, 알고리즘을 반복한 후의 차트인 Iteration 5와 Iteration 6를 보면, 클러스터의 중심이 변하지 않았음을 확인할 수 있습니다.
-K-means 군집화 알고리즘은 초기에 선택하는 임의의 군집 중심의 위치가 군집의 품질과 성능에 많은 영향을 미치는데요, K-means++ 군집화 알고리즘의 경우, 최초 군집의 중심 또한 알고리즘에 의해 선택하여 군집의 성능과 품질을 높이는 방식으로 K-means 를 보완하고 있습니다. (K-means++에 대한 내용은 생략하도록 하겠습니다!)
이론학습이 선행되었다면, 다음은 실습으로 넘어가보도록 하겠습니다!
이번 실습은 K-means 군집화 알고리즘을 활용한 실습입니다.
*해당 실습은 brightics github에 수록되어있는 wine.csv 데이터를 활용하여 진행되었습니다.
[실습]
- dataset 변수구성
변수명 | 설명 |
Alcohol | 알콜 |
Malic_acid | 말산 |
Ash | 회분(미네랄 성분 합계) |
Alcalinity_of_ash | 회분의 알칼리도 |
Magnesium | 마그네슘 |
Total_phenols | 폴리페놀 총량 |
Flavanoids | 플라보노이드 |
Nonflavanoid_phenols | 비 플라보노이드 페놀 |
Proanthocyanins | 프로안토시아닌 |
Color_intensity | 색의 농도 |
Hue | 색조 |
OD280_OD315_of_diluted_wines | 희석된 와인의 OD280/OD315 비 |
Proline | 프롤린 |
Class | 와인 등급 |
0. Work Flow Model
이번 실습의 work flow model은 위와 같습니다!
1. Data Load
wine.csv 파일을 로드해주세요. Delimiters는 Comma로 설정하고, 변수 중 class(등급)변수의 data type만 String으로 변경한 후, data를 load해주시면 됩니다!
2. 데이터 분할
그 다음, 데이터를 7:3으로 분할하여 70%의 데이터를 학습 데이터 train set으로, 나머지 30% 데이터를 평가 데이터 test set으로 활용하겠습니다.
Train Ratio: 7
Test Ratio: 3
Seed: 123
을 지정해주세요.
* 여기서 Split Data로 데이터가 잘 분할되었는지 확인하는 방법!
우측 상단의 Duplicate버튼을 눌러 table을 복제해주시고,
chart settings에 들어가셔서 table항목의 train set과 test set을 각각 눌러 아래와 같이 2개의 split된 output을 확인해주시면 됩니다!
3. Data 스케일링
그 다음, 학습데이터의 연속형 변수들을 Z-score기법으로 스케일링해줍니다.
현재는 변수별 단위가 통일이 되어있지 않은 상태인데요, 이렇게 각 Column별 단위가 다르기 때문에 K-means를 사용하기 전에 단위변환작업을 진행해야 합니다!
Brightics에서는 Normalization 함수를 불러와 train data와 test data를 정규화할 수 있는데요,
Input Columns: Class(등급) 변수 제외 나머지 13개 변수
Normalization Type: StandardScaler
를 지정해주세요.
그럼 아래와 같이 원본데이터에 표준화된 Column이 추가된 모습을 확인하실 수 있습니다!
4. K-means 수행
그 다음은, K-means(Silhouette)함수를 불러와 군집분석을 수행해보겠습니다!
K-means란?
K-means는 분할 군집화의 일종으로 주어진 데이터를 k개의 클러스터로 묶는 알고리즘으로, 각 클러스터와 거리 차이의 분산을 최소화하는 방식으로 동작하는 군집화 방법입니다.
Silhouette 계수를 이용하여 최적 군집의 개수가 몇 개인지 결정하기 위해 군집의 수를 2개부터 6개까지 변화시켜가며 K-Means를 수행해보겠습니다.
Input Columns: 표준화된 13개 Coumn
Seed: 123
을 지정해주시고,
Number of Clusters Set에는 2,3,4,5,6 을 입력하여 총 5번의 군집분석을 수행하겠습니다!
아래와 같이 '+'를 클릭하여 2-6을 입력하며 차례로 군집분석을 진행해주세요.
결과 아래의 table 탭에서는 원본데이터에 대한 최적 군집 할당 결과를 확인할 수 있고,
table 탭 우측의 model 탭에서는 다양한 차트를 통해 군집 분석 결과를 시각화하여 확인할 수 있습니다!
K-means는 실루엣 계수 값을 근거로 최적 군집의 개수를 정하는데,
실루엣 계수는
응집도가 ↑높고, 분리도가 ↑클수록 값이 1에 가까워지고,
응집도와 분리도의 값이 같으면 0이되는 특성을 갖습니다.
따라서, 실루엣 계수가 가장높은 cluster의 개수인 3이 최적의 군집수라고 할 수 있겠습니다!
2차원 평면상에 군집 결과를 표현한 결과는 위와 같습니다!
각 군집의 중심점이 표시되어 있고, 각 중심 근처에 모여있는 점들이 같은 군집으로 묶여있는 것을 확인할 수 있는데요,
이 차트를 살펴보면 연두색으로 표시된 군집과 검은색으로 표시된 군집이 대체적으로 반대 성향을 보이고 있으며, 파란색으로 표시된 클러스터는 연두색으로 표시된 군집에 비해 비교적 낮은 수준을 유지하고 있는 것을 살펴볼 수 있습니다.
다음 차트들은 군집 개수별 실루엣 계수를 그래프화한 것입니다!
군집이 2개일 때, 연두색과 검은색 군집의 실루엣 계수는 음수 값이 없고, 검은색 군집의 실루엣 계수의 경우, 비교적 높은 편으로 군집의 품질이 나쁘지 않아보입니다.
최적 군집 개수인 3값의 경우를 살펴볼까요?
군집이 3개일 때 연두색과 검정색 군집의 실루엣 계수는 음수가 된 값이 없고, 비교적 높은 편이지만
하늘색 군집의 일부 데이터들의 실루엣값이 음수가 되었기 때문에, 군집의 품질이 아주 좋다는 판단은 내릴 수 없을 것 같습니다.
5. 군집 결과 확인
그 다음은, 학습 데이터 군집화 결과에 Cross Table을 이용하여 와인의 등급과 군집분석을 통한 예상등급을 비교해보겠습니다.
Input Columns1: class
Input Columns2: prediction
을 지정해주세요.
Class_prediction에 해당하는 열이 와인의 등급이고, 상단의 0,1,2가 군집분석 결과로 나온 군집 번호인데요, 1등급 와인 45개 중 44개는 군집 2번에, 2등급 와인 53개 중 49개는 군집 1번에, 3등급와인은 전부 군집 0번에 할당이 되었음을 확인할 수 있었습니다!
6. 군집 분석 모형 성능 측정
군집분석의 결과를 확인했다면, 이제는 평가 데이터 test set을 이용하여 군집분석 모형의 성능을 측정해봐야 하겠죠?
앞선 과정과 같이 우선 K-means를 수행하기 전, 평가 데이터에 대한 Z-score 표준화를 먼저 수행해줍니다.
Normalization Model을 사용하면, 이미 train set에서 사용한 동일 기준의 평균과 분산을 활용하여 표준화를 진행할 수 있다는 점 유의해주세요!
※ Split data함수와 Normalization함수에 연결해주세요
Run을 누르게 되면, 위와 같은 표준화가 이루어진 Column이 추가된 것을 확인할 수 있습니다!
7. 군집 예측 및 결과 확인
표준화를 마친 다음, K-Means Predict를 이용하여 평가 데이터에 군집분석 모형을 통하여 군집을 예측해보겠습니다.
바로 Run을 눌러주시면, 아래와 같은 군집 예측결과를 얻을 수 있습니다!
이제, 군집 분석을 수행한 결과에 다시 Cross Table을 연결하여 군집 분석 결과와 실제 와인등급을 비교해볼까요?
Input Columns1: class
Input Columns2: prediction
을 지정하고, Run을 눌러주세요.
1등급 와인은 군집2로, 2등급 와인은 군집1로, 3등급 와인은 군집0에 대다수 속해있음을 확인할 수 있었습니다!
그럼 이상으로 K-means 군집화 알고리즘에 대한 포스팅을 마치도록 하겠습니다:)
-본 게시물은 Brightics 서포터즈 활동의 일환으로 작성된 포스팅 입니다.