K- 평균 ClusterR 프로그래밍 예제를 통해 배우기
⚡ 스마트 요약
K- 평균 ClusterR에서 클러스터링 알고리즘은 각 점과 해당 클러스터 중심 사이의 거리를 최소화하여 관측값을 그룹화합니다. 이 가이드에서는 컴퓨터 가격 데이터셋을 표준화하고, 알고리즘을 애니메이션으로 보여주고, 엘보우 기법을 사용하여 최적의 k 값을 찾고, 히트맵을 통해 클러스터를 시각화합니다.

Cluster 분석?
Cluster 분석은 ~에 속합니다. 비지도 학습. 클러스터는 유사한 특징을 공유하는 데이터 그룹입니다. 클러스터링 분석은 예측보다 발견에 더 가깝다고 할 수 있습니다. 머신은 데이터에서 유사성을 검색합니다. 예를 들어, 다음 애플리케이션에 클러스터 분석을 사용할 수 있습니다.
- 고객 세분화: 고객 그룹 간의 유사성을 찾습니다.
- 주식시장 클러스터링: 실적에 따른 주식 그룹화
- 데이터셋의 차원을 그룹화하여 축소합니다.ping 비슷한 값을 가진 관측값
Cluster분석은 구현하기가 그리 어렵지 않으며 비즈니스에 의미 있고 실행 가능합니다.
지도 학습과 비지도 학습의 가장 눈에 띄는 차이점은 결과에 있습니다. 비지도 학습은 새로운 변수인 레이블을 생성하는 반면 지도 학습은 결과를 예측합니다. 기계는 실무자가 밀접한 관련성을 기반으로 데이터에 레이블을 지정하는 데 도움을 줍니다. 그룹을 활용하고 이름을 지정하는 것은 분석가의 몫입니다.
클러스터링 개념을 이해하기 위한 예를 들어보겠습니다. 단순화를 위해 두 가지 차원에서 작업합니다. 고객의 총 지출과 연령에 대한 데이터가 있습니다. 마케팅 팀은 광고를 개선하기 위해 고객에게 보다 타겟팅된 이메일을 보내고자 합니다.
다음 그래프에서는 총 지출과 고객의 연령대를 표시합니다.
library(ggplot2) df <- data.frame(age = c(18, 21, 22, 24, 26, 26, 27, 30, 31, 35, 39, 40, 41, 42, 44, 46, 47, 48, 49, 54), spend = c(10, 11, 22, 15, 12, 13, 14, 33, 39, 37, 44, 27, 29, 20, 28, 21, 30, 31, 23, 24) ) ggplot(df, aes(x = age, y = spend)) + geom_point()
이 시점에서 패턴이 보입니다.
- 왼쪽 하단에는 구매력이 낮은 젊은층이 보입니다.
- 중상위는 더 많은 지출을 감당할 수 있는 직업을 가진 사람들을 반영합니다.
- 마지막으로, 예산이 적은 노년층입니다.
위의 그림에서 관찰치를 수동으로 클러스터링하고 세 그룹을 각각 정의합니다. 이 예는 다소 간단하고 매우 시각적입니다. 데이터 세트에 새로운 관찰치를 추가하면 원 안에 레이블을 지정할 수 있습니다. 판단에 따라 원을 정의합니다. 대신 다음을 사용할 수 있습니다. 머신 러닝 데이터를 객관적으로 그룹화합니다.
이 튜토리얼에서는 k- 평균 연산.
K-평균 알고리즘
K-평균은 가장 널리 사용되는 클러스터링 방법입니다. 이 알고리즘은 1950년대에 개발되었으며 이후 여러 차례 개선되었습니다.
알고리즘은 관측치 사이의 거리를 최소화하여 그룹을 찾으려고 시도합니다. 국소 최적 해결 방법입니다. 거리는 관측 지점의 좌표를 기준으로 측정됩니다. 예를 들어, 2차원 공간에서 좌표는 단순히 x와 y입니다.
알고리즘은 다음과 같이 작동합니다.
- 1단계: 특징 공간에서 k개의 초기 중심점을 무작위로 선택합니다.
- 2단계: 모든 관측값을 가장 가까운 클러스터 중심에 할당합니다. 중심이렇게 하면 k개의 그룹이 생성됩니다.
- 3 단계 : Shift 그룹 내 좌표의 평균에 대한 초기 중심입니다.
- 4단계: 새 중심에 따라 거리를 최소화합니다. 새로운 경계가 생성됩니다. 따라서 관찰은 한 그룹에서 다른 그룹으로 이동합니다.
- 관찰이 그룹을 변경하지 않을 때까지 반복합니다.
K-평균 알고리즘은 일반적으로 두 관측값 x와 y 사이의 유클리드 거리를 측정합니다.
맨해튼 거리나 민코프스키 거리와 같은 다른 측정 방법도 사용할 수 있습니다. K-평균 알고리즘은 실행할 때마다 다른 그룹을 생성한다는 점에 유의해야 합니다. 초기 추정값은 무작위로 설정되며, 알고리즘이 그룹 내 동질성에 도달할 때까지 거리를 계산합니다. 즉, K-평균 알고리즘은 첫 번째 추정값에 매우 민감하며, 관측치와 그룹 수가 적지 않은 이상 동일한 클러스터링 결과를 얻기는 거의 불가능합니다.
클러스터 개수 선택
k-평균 알고리즘에서 발견되는 또 다른 어려움은 클러스터 개수 선택입니다. k 값을 높게 설정하여(즉, 많은 수의 그룹을 생성하여) 그룹 내 동질성을 향상시킬 수 있지만, 그만큼 위험 부담도 커집니다. 과적 합 과적합이란 모델이 특정 샘플의 기본 패턴이 아닌 노이즈를 기억하기 때문에 새로운 데이터에 대한 성능이 급격히 떨어지는 현상을 말합니다.
클러스터 수는 데이터 세트의 특성, 산업, 사업 등에 따라 달라집니다. 그러나 적절한 클러스터 수를 선택하는 데는 경험칙이 있습니다.
여기서 n은 데이터 세트의 관측치 수입니다.
실제로는 비즈니스 요구사항에 가장 적합한 k 값을 찾는 데 시간을 투자할 가치가 있습니다.
우리는 클러스터링 분석을 수행하기 위해 개인용 컴퓨터 가격 데이터 세트를 사용할 것입니다. 이 데이터 세트에는 6259개의 관찰과 10개의 특징이 포함되어 있습니다. 이 데이터 세트는 1993년부터 1995년까지 미국 내 개인용 컴퓨터 486대의 가격을 관찰합니다. 변수는 가격, 속도, 램, 화면, CD 등입니다.
다음과 같이 진행하게 됩니다:
- 데이터 가져 오기
- 모델 훈련
- 모델 평가
데이터 가져 오기
K-평균 알고리즘은 범주형 변수에 적합하지 않습니다. 이 알고리즘은 거리를 기반으로 작동하는데, 이산형 레이블 간에는 의미 있는 거리가 없기 때문입니다. 세 개의 범주형 열(cd, multi, premium)과 행 인덱스 X를 삭제하세요. 이 데이터셋에는 결측값이 없습니다.
library(dplyr) PATH <-"https://raw.githubusercontent.com/guru99-edu/R-Programming/master/computers.csv" df <- read.csv(PATH) %>% select(-c(X, cd, multi, premium)) glimpse(df)
산출
## Observations: 6,259 ## Variables: 7 ## $ price <int> 1499, 1795, 1595, 1849, 3295, 3695, 1720, 1995, 2225, 2... ## $ speed <int> 25, 33, 25, 25, 33, 66, 25, 50, 50, 50, 33, 66, 50, 25, ... ## $ hd <int> 80, 85, 170, 170, 340, 340, 170, 85, 210, 210, 170, 210... ## $ ram <int> 4, 2, 4, 8, 16, 16, 4, 2, 8, 4, 8, 8, 4, 8, 8, 4, 2, 4, ... ## $ screen <int> 14, 14, 15, 14, 14, 14, 14, 14, 14, 15, 15, 14, 14, 14, ... ## $ ads <int> 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, ... ## $ trend <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
요약 통계를 보면 데이터 값이 큰 것을 알 수 있습니다. 거리 기반 방법을 사용하기 전에 모든 변수의 평균값을 1로 맞추기 위해 데이터를 표준화하는 것이 좋습니다. 평균이 0이고 표준편차가 1입니다.그것이 없다면 수천 달러에 달하는 가격이 거리 계산을 지배하게 되고 화면 크기는 거의 아무런 의미가 없게 될 것입니다.
summary(df)
출력:
## price speed hd ram ## Min. : 949 Min. : 25.00 Min. : 80.0 Min. : 2.000 ## 1st Qu.:1794 1st Qu.: 33.00 1st Qu.: 214.0 1st Qu.: 4.000 ## Median :2144 Median : 50.00 Median : 340.0 Median : 8.000 ## Mean :2220 Mean : 52.01 Mean : 416.6 Mean : 8.287 ## 3rd Qu.:2595 3rd Qu.: 66.00 3rd Qu.: 528.0 3rd Qu.: 8.000 ## Max. :5399 Max. :100.00 Max. :2100.0 Max. :32.000 ## screen ads trend ## Min. :14.00 Min. : 39.0 Min. : 1.00 ## 1st Qu.:14.00 1st Qu.:162.5 1st Qu.:10.00 ## Median :14.00 Median :246.0 Median :16.00 ## Mean :14.61 Mean :221.3 Mean :15.93 ## 3rd Qu.:15.00 3rd Qu.:275.0 3rd Qu.:21.50 ## Max. :17.00 Max. :339.0 Max. :35.00
dplyr 라이브러리의 scale() 함수를 사용하여 변수의 크기를 조정합니다. 변환을 통해 이상값의 영향이 줄어들고 단일 관측치를 평균과 비교할 수 있습니다. 표준화된 값(또는 z- 점수)이 높으면 이 관측치가 실제로 평균보다 높다고 확신할 수 있습니다. 큰 z-점수는 이 점이 표준 편차 측면에서 평균에서 멀리 떨어져 있음을 의미합니다. z-점수가 2라는 것은 값이 XNUMX 표준임을 나타냅니다. 평균에서 벗어난 편차 참고로, z-점수는 가우스 분포를 따르며 평균을 기준으로 대칭입니다.
# Note: speed is deliberately left out of the scaled data frame rescale_df <- df %>% mutate(price_scal = scale(price), hd_scal = scale(hd), ram_scal = scale(ram), screen_scal = scale(screen), ads_scal = scale(ads), trend_scal = scale(trend)) %>% select(-c(price, speed, hd, ram, screen, ads, trend))
R 베이스에는 k 평균 알고리즘을 실행하는 기능이 있습니다. k 평균의 기본 기능은 다음과 같습니다.
kmeans(df, k) arguments: -df: dataset used to run the algorithm -k: Number of clusters
모델 훈련
그림 3에서 알고리즘의 작동 방식을 자세히 설명하셨습니다. Yihui Xie가 작성한 애니메이션 패키지를 사용하면 각 단계를 그래픽으로 볼 수 있습니다. Yihui Xie는 R Markdown용 knitr도 개발했습니다. 이 패키지는 conda 채널에 없으므로 CRAN에서 설치하세요.
install.packages("animation")
라이브러리를 로드한 후 kmeans 뒤에 .ani를 추가하고 R 모든 단계를 플롯합니다. 설명을 위해, 세 개의 클러스터가 있는 재조정된 변수 hd와 ram으로만 알고리즘을 실행합니다.
set.seed(2345) library(animation) kmeans.ani(rescale_df[2:3], 3)
Code 설명
- kmeans.ani(rescale_df[2:3], 3): rescale_df 데이터 세트의 열 2와 3을 선택하고 k 세트를 3으로 사용하여 알고리즘을 실행합니다. 애니메이션을 플롯합니다.
애니메이션을 다음과 같이 해석할 수 있습니다.
- 1단계: R은 무작위로 세 점을 선택합니다.
- 2단계: 유클리드 거리를 계산하고 클러스터를 그립니다. 왼쪽 아래에 녹색 클러스터가 하나 있고, 오른쪽에 검은색으로 칠해진 큰 클러스터가 하나 있고, 그 사이에 빨간색 클러스터가 하나 있습니다.
- 3단계: 중심점(즉, 클러스터의 평균)을 계산합니다.
- 데이터가 변경되지 않을 때까지 반복합니다.
알고리즘은 7번의 반복 후에 수렴되었습니다. 5개의 클러스터가 있는 데이터 세트에서 k-mean 알고리즘을 실행하고 pc_cluster라고 부를 수 있습니다.
pc_cluster <-kmeans(rescale_df, 5)
pc_cluster 리스트에는 유용한 요소가 7개 포함되어 있습니다.
- pc_cluster$cluster: 각 관측치에 할당된 클러스터
- pc_cluster$centers: 클러스터 센터
- pc_cluster$totss: 제곱의 총합
- pc_cluster$withinss: 제곱합 내에서 클러스터당 하나의 값
- pc_cluster$tot.withinss: withinss의 합계
- pc_cluster$betweenss: 전체 제곱합에서 클러스터 내부 제곱합을 뺀 값
- pc_cluster$size: 각 클러스터 내 관찰 수
당신은 제곱의 내부 합의 합(즉, tot.withinss)을 사용하여 최적의 클러스터 수 k를 계산할 것입니다. k를 찾는 것은 실제로 상당한 작업입니다.
엘보우 방법을 사용하여 최적의 k 값을 찾는 방법
최선의 k를 선택하는 한 가지 기술은 다음과 같습니다. 팔꿈치 방법. 이 방법은 변동성을 평가하기 위해 그룹 내 동질성 또는 그룹 내 이질성을 사용합니다. 즉, 각 클러스터가 설명하는 분산의 백분율에 관심이 있습니다. 클러스터 수에 따라 변동성이 증가할 것으로 예상할 수 있으며, 반대로 이질성은 감소할 수 있습니다. 우리의 과제는 감소 수익률을 넘어서는 k를 찾는 것입니다. 새로운 클러스터를 추가해도 설명할 정보가 거의 남지 않기 때문에 데이터의 변동성이 개선되지 않습니다.
이 튜토리얼에서 우리는 이질성 측정을 사용하여 이 지점을 찾습니다. 클러스터 내 총 제곱합은 kmean()에서 반환한 목록의 tot.withinss입니다.
다음과 같이 팔꿈치 그래프를 구성하고 최적의 k를 찾을 수 있습니다.
- 1단계: 클러스터 내 제곱합을 계산하는 함수 구성
- 2단계: 다양한 k 값에 대해 알고리즘을 실행합니다.
- 3단계: 알고리즘 결과로 데이터 프레임 만들기
- 4단계: 결과 도표화
단계 1) 클러스터 내 총 제곱합을 계산하는 함수를 구성하세요.
k-평균 알고리즘을 실행하고 제곱합의 클러스터 내 총계를 저장하는 함수를 생성합니다.
kmean_withinss <- function(k) { cluster <- kmeans(rescale_df, k) return (cluster$tot.withinss) }
Code 설명
- function(k): 함수의 인수 개수를 설정합니다.
- kmeans(rescale_df, k): 이 k 값에 대해 알고리즘을 실행합니다.
- return(cluster$tot.withinss): 클러스터 내 총합 제곱을 저장합니다.
k 값을 2로 하여 함수를 테스트하십시오.
출력:
## Try with 2 cluster
kmean_withinss(2)
출력:
## [1] 27087.07
단계 2) 알고리즘을 n번 실행
sapply() 함수를 사용하여 k 범위에 대해 알고리즘을 실행합니다. 이 기술은 루프를 생성하고 값을 저장하는 것보다 빠릅니다.
# Set maximum cluster max_k <-20 # Run algorithm over a range of k wss <- sapply(2:max_k, kmean_withinss)
Code 설명
- max_k <- 20: k의 최댓값을 20으로 설정합니다.
- sapply(2:max_k, kmean_withinss): 2:max_k 범위, 즉 2에서 20까지 kmean_withinss() 함수를 실행합니다.
단계 3) 알고리즘 결과로 데이터 프레임 생성
함수를 작성하고 테스트한 후, 2부터 20까지의 범위에서 함수를 실행하고 각 tot.withinss 값을 저장합니다.
# Create a data frame to plot the graph elbow <-data.frame(2:max_k, wss)
Code 설명
- data.frame(2:max_k, wss): wss에 알고리즘 저장소의 출력으로 데이터 프레임을 생성합니다.
단계 4) 결과 플롯
팔꿈치 지점이 어디에 있는지 시각화하기 위해 그래프를 플롯합니다.
# Plot the graph with gglop ggplot(elbow, aes(x = X2.max_k, y = wss)) + geom_point() + geom_line() + scale_x_continuous(breaks = seq(1, 20, by = 1))
그래프에서 최적의 k가 XNUMX이라는 것을 알 수 있습니다. 여기서 곡선은 수익이 감소하기 시작합니다.
최적의 k를 구하면 k를 7로 하여 알고리즘을 다시 실행하고 클러스터를 평가합니다.
클러스터를 조사해 보면
pc_cluster_2 <-kmeans(rescale_df, 7)
이전에 언급했듯이 kmean()이 반환한 목록에 있는 나머지 흥미로운 정보에 액세스할 수 있습니다.
pc_cluster_2$cluster pc_cluster_2$centers pc_cluster_2$size
평가는 주관적이며 클러스터의 목적에 따라 달라집니다. 여기서 목표는 유사한 사양의 컴퓨터들을 그룹화하는 것입니다. 해당 분야 전문가라면 수작업으로 이 작업을 수행할 수 있지만, 과정이 느리고 오류 발생 가능성이 높습니다. K-평균 알고리즘은 이러한 그룹화를 효율적으로 수행합니다.ping 객관적인 정보를 제공하고 전문가가 결과를 해석하고 명명하도록 합니다.
사전 평가로 클러스터의 크기를 살펴볼 수 있습니다.
pc_cluster_2$size
출력:
## [1] 608 1596 1231 580 1003 699 542
가장 큰 클러스터인 2번 클러스터에는 1,596개의 관측치가 포함되어 있는 반면, 가장 작은 클러스터인 7번 클러스터에는 542대의 컴퓨터만 포함되어 있습니다. 클러스터 간의 동질성이 확보되면 좋을 수 있으며, 그렇지 않을 경우 더 간소화된 데이터 전처리가 필요할 수 있습니다.
중심 구성요소를 통해 데이터를 더 자세히 살펴볼 수 있습니다. 행은 클러스터의 번호를 나타내고 열은 알고리즘에서 사용되는 변수를 나타냅니다. 값은 관심 있는 열에 대해 각 클러스터별로 계산된 평균 점수입니다. 표준화를 통해 해석이 더 쉬워집니다. 양수 값은 특정 클러스터의 z-점수가 전체 평균보다 높다는 것을 의미합니다. 예를 들어, 클러스터 4는 평균 가격이 가장 높고(price_scal = 1.09), 클러스터 5는 가장 낮습니다(-0.82).
center <-pc_cluster_2$centers center
출력:
## price_scal hd_scal ram_scal screen_scal ads_scal trend_scal ## 1 -0.6372457 -0.7097995 -0.691520682 -0.4401632 0.6780366 -0.3379751 ## 2 -0.1323863 0.6299541 0.004786730 2.6419582 -0.8894946 1.2673184 ## 3 0.8745816 0.2574164 0.513105797 -0.2003237 0.6734261 -0.3300536 ## 4 1.0912296 -0.2401936 0.006526723 2.6419582 0.4704301 -0.4132057 ## 5 -0.8155183 0.2814882 -0.307621003 -0.3205176 -0.9052979 1.2177279 ## 6 0.8830191 2.1019454 2.168706085 0.4492922 -0.9035248 1.2069855 ## 7 0.2215678 -0.7132577 -0.318050275 -0.3878782 -1.3206229 -1.5490909
ggplot으로 히트맵을 생성하면 카테고리 간의 차이를 강조하는 데 도움이 됩니다.
ggplot의 기본 색상은 RColorBrewer 라이브러리를 사용하여 변경해야 합니다. 콘다를 사용할 수 있습니다 도서관 터미널에서 실행할 코드는 다음과 같습니다.
conda install -c r r-rcolorbrewer
열 지도를 만들려면 다음 세 단계를 진행하세요.
- 중심 값을 사용하여 데이터 프레임을 구축하고 클러스터 번호를 사용하여 변수를 생성합니다.
- tidyr 라이브러리의 Gather() 함수를 사용하여 데이터의 모양을 변경합니다. 데이터를 넓은 형식에서 긴 형식으로 변환하려고 합니다.
- 색상으로 색상 팔레트 만들기Ramp팔레트() 함수
단계 1) 데이터 프레임 구축
모양 변경 데이터세트를 만들어 보겠습니다.
library(tidyr) # create dataset with the cluster number cluster <- c(1: 7) center_df <- data.frame(cluster, center) # Reshape the data center_reshape <- gather(center_df, features, values, price_scal: trend_scal) head(center_reshape)
출력:
## cluster features values ## 1 1 price_scal -0.6372457 ## 2 2 price_scal -0.1323863 ## 3 3 price_scal 0.8745816 ## 4 4 price_scal 1.0912296 ## 5 5 price_scal -0.8155183 ## 6 6 price_scal 0.8830191
단계 2) 색상 팔레트를 만드세요
아래 코드는 히트맵에서 사용되는 색상 팔레트를 생성합니다.
library(RColorBrewer) # Create the palette hm.palette <-colorRampPalette(rev(brewer.pal(10, 'RdYlGn')),space='Lab')
3단계) 시각화
그래프를 그리면 클러스터가 어떻게 생겼는지 확인할 수 있습니다.
# Plot the heat map ggplot(data = center_reshape, aes(x = features, y = cluster, fill = values)) + scale_y_continuous(breaks = seq(1, 7, by = 1)) + geom_tile() + coord_equal() + scale_fill_gradientn(colours = hm.palette(90)) + theme_classic()
`set.seed()`와 `nstart`를 사용하여 재현 가능한 K-평균 결과를 얻는 방법
튜토리얼에서는 k-평균 알고리즘이 실행할 때마다 다른 그룹을 반환한다고 언급합니다. 이는 감수해야 할 특이한 현상이 아니라, 두 가지 표준적인 해결 방법이 있는 문제이며, 위의 예제에서는 이러한 해결 방법이 사용되지 않았습니다.
1. set.seed()를 사용하여 시작점을 고정합니다. 초기 중심점은 무작위로 선택되므로 동일한 호출을 하더라도 매번 다른 클러스터가 생성됩니다. 시드를 설정하면 전체 분석을 재현할 수 있습니다.
set.seed(123)
pc_cluster_2 <- kmeans(rescale_df, 7)
2. nstart를 사용하여 여러 번 시작을 실행하고 가장 좋은 결과를 저장하십시오. 단일 무작위 시작점은 좋지 않은 지역 최적해로 수렴할 수 있습니다. nstart 인수는 서로 다른 무작위 시작점에서 해당 횟수만큼 알고리즘을 실행하고 제곱합이 가장 낮은 값을 반환합니다.
set.seed(123)
pc_cluster_2 <- kmeans(rescale_df, centers = 7, nstart = 25)
일반적으로 25개의 시작점을 권장하며, 이 정도 규모의 데이터셋에서는 비용이 거의 들지 않습니다. 25개의 시작점을 사용하지 않으면, 그래프의 각 점이 단 하나의 불운하거나 운 좋은 시작점에서 비롯되기 때문에 엘보 곡선 자체가 불안정해집니다. 따라서 앞서 정의한 kmean_withinss() 함수는 다음과 같이 작성해야 합니다.
kmean_withinss <- function(k) { cluster <- kmeans(rescale_df, centers = k, nstart = 25) return (cluster$tot.withinss) }
3. 알고리즘에서 경고가 발생하면 iter.max를 높입니다. R에서 "10번의 반복에도 수렴하지 않았습니다"라는 메시지가 표시되면 iter.max = 50을 전달하여 더 많은 여유 공간을 제공하세요.
K-평균 vs 계층적 알고리즘 ClusterR로 중
K-평균은 유일한 클러스터링 방법이 아니며, 어떤 방법을 선택할지는 일반적으로 데이터의 크기와 원하는 그룹 수를 이미 알고 있는지 여부에 따라 결정됩니다.
| 기준 | K- 평균 | 계층 적 |
|---|---|---|
| 클러스터 수 | 사전에 선택해야 합니다. | 그 후, 덴드로그램을 잘라서 선택했습니다. |
| 결과 안정성 | 무작위 시작에 따라 달라집니다. | 결정론 |
| 확장성 | 매우 큰 데이터 세트를 처리합니다. | 수천 줄을 넘어서는 투쟁 |
| Cluster 형성 | 대략 구형이고 크기가 비슷한 집단을 가정합니다. | 보다 유연한 |
| 산출 | 평면 레이블 세트 | 중첩 구조를 보여주는 덴드로그램 |
| R 함수 | kmeans(df, k) | hclust(dist(df)) |
# Hierarchical alternative on the same scaled data hc <- hclust(dist(rescale_df), method = "ward.D2") plot(hc) groups <- cutree(hc, k = 7)
6,259개의 관측치를 사용하는 경우, 계층적 클러스터링은 약 19.6만 쌍의 거리 행렬을 구축해야 하므로 k-평균 알고리즘이 이 데이터셋에 적합한 선택입니다. 또한 k-평균 알고리즘은 클러스터의 크기가 비슷하고 대략 구형이라고 가정합니다. 이러한 가정이 성립하지 않는 경우, DBSCAN은 불규칙한 형태를 처리하고 모든 점을 하나의 그룹으로 강제로 분류하는 대신 이상치를 식별합니다.
K- 평균 ClusterR에서의 함수 참조
이 튜토리얼에서 사용된 모든 함수는 아래에 나열되어 있습니다.
| 묶음 | 목표 | 함수 | 논의 |
|---|---|---|---|
| 기지 | k-평균 훈련 | kmeans () | df, k |
| 클러스터에 접근 | kmeans()$클러스터 | ||
| Cluster 센터 | kmeans()$센터 | ||
| Cluster 크기 | kmeans()$크기 | ||
| 제곱합 내 총합 | kmeans()$tot.withinss | 팔꿈치 방법을 사용합니다. | |
| 제곱합 사이 | kmeans()$betweens | ||
| 기지 | 재현 가능한 실행 | set.seed() | 씨앗 가치 |
| 기지 | 결과를 안정화합니다 | kmeans(df, k, nstart = 25) | nstart |








