# kmeans
# kmeans
by jihoon kim
HTML
<style>
.MJXp-math.MJXp-display {
display:inline !important;
}
</style>
<div id="contents">
## 군집(Clustering)?
- 패턴 공간에 주어진 유한 개의 패턴들이 서로 가깝게 모여서 무리를 이루고 있는 패턴 집합을 묶는 과정.
## K-MEANS (KMEANS)란?
- [K-평균알고리즘 - WIKI](https://ko.wikipedia.org/wiki/K-평균_알고리즘)
- 주어진 데이터를 k개의 군집(클러스터:Clustering)로 묶는 알고리즘.
- 각 클러스터와 거리 차이의 분산을 최소화하는 방식으로 동작.
- 거리에 기반을 둔 clustering 기법
- 기준점에 가까운 곳의 데이터들을 하나의 군집으로 묶는 방법.
- 비지도학습 : Unsupervised Learning - [참고](https://ko.wikipedia.org/wiki/비_지도_학습)
## K-MEANS 수행과정1
1. 임의의 "K개 중심값" 설정.
2. 전체 데이터와 "K개 중심값"을 비교, 가장 가까운 군집(K)에 소속.
3. 군집된 데이터를 기준으로 군집중앙의 위치를 제 설정.
4. 새롭개 구한 "k개 중심값"이 기존과 동일하면 알고리즘 종료.
:: 이 과정을 통하여 K개의 군집으로 데이터를 구분.
# 수행과정 - javascript
###**1. 초기 중심값(init Centroid) 초기화.**
* 알고리즘 : https://ko.wikipedia.org/wiki/K-평균_알고리즘#초기화_기법
- Random Partition
- Forgy, MacQueen
- Kaufman
###**2. Data간 거리 계산 및 분류**
**1. 초기 중심값(init Centroid) 과 Data간 거리 계산.**
* [유클리드 거리(Euclidean distance)](https://ko.wikipedia.org/wiki/유클리드_거리)
```JavaScript
/* 초기 중심값과 Data의 거리 비교.
- 초기 중심값 : center
- Data : dataset
>> distance(dataset[n], center[k]);
*/
let c = [];
for(let n = 0 ; n < dataset.length ; n++) {
let x = dataset[n];
let minDist = -1, rn = 0;
for(let k = 0 ; k < center.length ; k++) {
let dist = distance(dataset[n], center[k]);
if(minDist === -1 || minDist > dist) {
minDist = dist;
cn = k;
}
}
c[n] = cn;
}
// c : 클러스터링 분류정보 (0~K)
```
**2. 거리가 가까운 군집에 Data를 분류.**
```JavaScript
c[n] = rn;
```
**3. 중심점 최적화 및 왜곡측정.**
- 왜곡측정 : 거리의 합을 비교.
1. 중심점 계산 :centroid();
2. 왜곡측정 : 중심점과 Data간 최소거리의합과 이전최소거리의 합의 변화를 비교함.
```javaScript
let preJ = 0;
while (true) {
let c = centroid();
// 왜곡측정 : 거리의 합을 이용.
let J = 0;
for (let n =...