R 분석 모델 선택, k-means 알고리즘
분석 모델 선택 문제 해결을 위한 모델 선택 분류 문제 클러스터링 그룹화 vs 예측 문제 모델의 성능을 어떻게 평가할 것인가 최소한 널 (null) 모델보다는 성능이 좋아야 한다
고려사항 성능 편리성 해석 용이성 고객이 이해할 수 있어야 한다 문제가 해결이 안될 경우 모델이 문제가 없는지 확인 모델 설정의 가설이 문제가 없는가 모델이 문제가 없다면 데이터의 선택에 문제가 있는가 문제의 정의가 잘못되었는가 – 해결 불가능
알고리즘의 동작 속도 모델의 정확도 알고리즘 처리 속도 제한 시간 내에 결과를 얻어야 한다 예 ) 알파고의 효율적인 망 (network) 사용 전략 SL 정책망 : 정확도 57.0 %, 속도 3ms, 다음 착수점 후보를 선별하는데 사용 롤아웃 정책망 : 정확도 24.2%, 속도 2us, 게임을 끝까지 빠르게 시뮬레이션 하여 승률을 예측하는데 사용
무작위 추출 모델 데이터를 무작위로 추출하여 각각 A/B 로 구분 A/B 방식의 차이점을 순수하게 비교 가능함 A/B 모델을 각각 다른 고객에게 서비스하여 어느 쪽이 더 좋은지 를 선택 각 모델을 어떤 고객에게 적용해야 효과적일지 결정해야 한다.
K-means 알고리즘 클러스터링을 수행 각 그룹 내에 들어 있는 항목들 간의 거리는 작고, 서로 다른 그룹들간에 들 어 있는 항목들 간의 거리는 가능한 멀게 나눈다 동작 원리 1. 나눌 클러스터의 개수인 k 값을 정한다. 2. 변수 공간 상에 임의의 k 개의 초기 지점을 정한다. K 의 위치를 클러스터 중점이라 고 한다. 반복 클러스터 중점에서 가까운 항목들을 그룹화한다. 각 클러스터 항목들의 위치의 평균을 구해서 이를 새로운 클러스터 중점으로 변경한다.
K-means 알고리즘 동작 원리 (3,4 번째 작업을 반복 )
데이터 클러스터링 예제 1
>sample2d <-read.csv("sample2d.csv") >idx<-sample(1:dim(sample2d)[1],8) dim( 변수 ) : 변수의 사이즈 구하기, (8 행 3 열이라면 8, 3 리턴 ) dim( 변수 )[ 열 ] : 변수의 열 사이즈 구하기, (8 행 3 열이라면 8 리턴 ) sample( 최소값 : 최대값, 갯수 ) : 최소 ~ 최대값 의 랜덤값을 개수만큼 리턴 [1] ( 랜덤결과 ) >kSample<-sample2d[idx, ] sample2d 를 idx 순서대로 정렬 >kSample$name<-NULL 컬럼을 제거한다
데이터 클러스터링 예제 1 d<-dist(kSample, method="euclidean") hc<-hclust(d) plot(hc,hang=- 1,labels=kSample$name[idx],xlim=c(0,10))
데이터 클러스터링 예제 1 >k<-kmeans(kSample,4) >plot(kSample, pch = k$cluster) kmeans( 데이터, k) : 데이터를 k 개로 클러스터링한다.
데이터 클러스터링 예제 2 - 야구선수 메이저리그 야구선수의 나이와 몸무게의 관계를 비교해보자 SOCR Data Records of Heights (in) and Weights (lbs) of Major League Baseball Players 1033 명SOCR Data (Statistics Online Computational Resource: SOCR) 주의 : 데이터가 하나라도 비어 있으면 에러 발생 NA/NaN/Inf in foreign function call (arg 1)
데이터 클러스터링 예제 2 - 야구선수 baseballPlayer <-read.csv ("C:\\baseballPlayer.csv") baseballPlayer$Team <-NULL (z-score 정규화를 위해 숫자가 아닌 컬럼을 제거합니다 ) baseballPlayer$Name <-NULL baseballPlayer$Position <-NULL baseballPlayer$Height <-NULL baseballPlayer_z<-as.data.frame(lapply(baseballPlayer, scale)) cluster1<-kmeans(baseballPlayer_z,2) plot(baseballPlayer_z$Age,baseballPlayer_z$Weight,pch=cluster1$cluster)
나이와 몸무게 X 젊은 선수들 주축 데이터 클러스터링 예제 2 - 야구선수
데이터 클러스터링 예제 3 – 자동차 연비 자동차를 연비, 중량, 배기량, 실린더 수를 기준으로 클러스터링하기
데이터 클러스터링 예제 3 – 자동차 연비 fuel <-read.csv("C:\\FuelEfficiency.csv"); fuel_z<-as.data.frame(lapply(fuel, scale)) (z-score 정규화 ) fuel_clusters<-kmeans(fuel_z,3) plot(fuel$WT,fuel$DIS, +pch=fuel_clusters$cluster)