R 분석 모델 선택 및 클러스터링

Download Report

Transcript R 분석 모델 선택 및 클러스터링

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
데이터 클러스터링 예제1
>sample2d <-read.csv("sample2d.csv")
>idx<-sample(1:dim(sample2d)[1],8)
dim(변수) : 변수의 사이즈 구하기 , (8행 3열이라면 8, 3 리턴)
dim(변수)[열] : 변수의 열 사이즈 구하기 , (8행 3열이라면 8리턴)
sample(최소값:최대값, 갯수) : 최소~최대값 의 랜덤값을 개수만큼 리턴
[1] 1 7 5 6 4 2 3 8 (랜덤결과)
>kSample<-sample2d[idx, ]
sample2d를 idx순서대로 정렬
>kSample$name<-NULL
컬럼을 제거한다
데이터 클러스터링 예제1
• d<-dist(kSample,
method="euclidean")
2
6
5
6 2.2360680
5 2.1213203 0.7071068
3 0.5000000 1.8027756 1.8027756
• 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 - 1035 Records of Heights (in) and Weights (lbs) of Major
League Baseball Players 1033명
• (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)
데이터 클러스터링 예제2 - 야구선수
• 나이와 몸무게 X
• 젊은 선수들 주축
데이터 클러스터링 예제3 – 자동차 연비
• 자동차를 연비, 중량, 배기량, 실린더 수를 기준으로 클러스터링하기
http://www.biz.uiowa.edu/faculty/jledolter/datamining/datatext.html
데이터 클러스터링 예제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)