Ökoinfomatik

분류에 요새 주로 이용되는 랜덤 포레스트 패키지를 가지고 분류 방법을 정리하고자 함. 

http://cran.r-project.org/web/packages/randomForest/index.html
CRAN 패키지

http://en.wikipedia.org/wiki/Random_forest
위키피디어

http://stat-www.berkeley.edu/users/breiman/RandomForests/cc_home.htm
여기 잘 된 소개 자료 하나  

http://www.webchem.science.ru.nl/PRiNS/rF.pdf

Classification and Regression by randomForest

page1image2112
Andy Liaw and Matthew Wiener 
저작자 표시 비영리 변경 금지
신고
0

0

오늘 무감독 분류를 할 일이 있어서 좀 찾아보니 R에는 기본 패키지인 stats에 kmean()이란 함수가 존재했다.
코드 예제는 R 기본 패키지 설명에서 
(http://stat.ethz.ch/R-manual/R-patched/library/stats/html/kmeans.html)
require(graphics)
# a 2-dimensional example
x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2), matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))  #여기선 각각 다른 평균을 가지고 2 개의 난수를 발생시켜서 하나의 데이터셋으로 합쳤다. 그러니까, 두 개의 집단으로 원래 따로 넣은 애들이 분리되면 성공이 되는 문제로 만들었다. 
colnames(x) <- c("x", "y")
cl <- kmeans(x, 2) # 작업하는 함수. 데이터를 넣고, 몇 개의 집단으로 나눌 지 알려주면 끝. 여기선 두 개 집단으로 분리하라고 지시
plot(x, col = cl$cluster)
points(cl$centers, col = 1:2, pch = 8, cex=2)

kmeans(x,1)$withinss # if you are interested in that. 이번엔 하나 집단으로 나눠보기. 결과를 보면 재밌다. 

## random starts do help here with too many clusters
cl <- kmeans(x, 5, nstart = 25) # 이번엔 5개 집단으로 나눴다. 원래 특성은 두 개의 집단인데 5개의 집단으로 나눠보면 어떻게 될까? 란 아이디어. 
plot(x, col = cl$cluster)
points(cl$centers, col = 1:5, pch = 8)


k-means clustering 여기서는 차원을 더 높은 데이터로 해도 잘 됐다. 유클리드 공간이라 가정하고 하니까 최소제곱법과 같은 맥락에서 이해하면 무리가 없을 것이다. 알고리즘에 대해서는 위키를 참조하고 더 할 얘기가 있으면 적어두도록 하겠습니다. 

 http://en.wikipedia.org/wiki/K-means_clustering

Given a set of observations (x1x2, …, xn), where each observation is a d-dimensional real vector, k-means clustering aims to partition the n observations into k sets (k ≤ nS = {S1S2, …, Sk} so as to minimize the within-cluster sum of squares (WCSS):

\underset{\mathbf{S}} {\operatorname{arg\,min}} \sum_{i=1}^{k} \sum_{\mathbf x_j \in S_i} \left\| \mathbf x_j - \boldsymbol\mu_i \right\|^2
where μi is the mean of points in Si. 
저작자 표시 비영리 변경 금지
신고
0

Comment +5

  • 나 요즘 k-means 쓰는데...

  • pom. 2012.01.11 22:46 신고

    저도 좀 활용해 보려고요^^ 이제 습관적으로 한 번 씩 해 보려고요 데이터 셋 새로 받으면. 탐색적 데이터 분석을 생활화 해야는데, 여전히 저는 뭔가 사전지식에 맞춰서 보려는 경향이 있는 듯..

  • fuzzy c-means 소개하고, 마할라노비스 거리를 적용하면 뭐가 달라지는지 추가하겠음. 간단히 얘기하면, 유클리드 거리를 쓸 때는 구형이 되고 (고차원이 되면 hyper 구). 이것 보다 다원으로 보는 게 더 자연스럽잖아? 란 개념에서 마할라노비스 거리를 채택하는 것이 하나의 방안. 퍼지 c 민은 퍼지니스 도입하는 것. 아 설명 어떻게 해야 할 지 모르겠다;;

  • pom. 2013.07.29 21:53 신고

    누가 좀 보내 달래서 보내는 김에 좀 수정..

    # source http://stat.ethz.ch/R-manual/R-patched/library/stats/html/kmeans.html
    # http://en.wikipedia.org/wiki/K-means_clustering

    require(graphics)
    # a 2-dimensional example
    x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2), matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2)) # Originally comprised of the two groups
    colnames(x) <- c("x", "y")

    cl <- kmeans(x, centers= 2) # Arbitrarily, let's split into two groups
    plot(x, col = cl$cluster)
    points(cl$centers, col = 1:2, pch = 8, cex=2)
    cl$withinss # Within cluster sum of squares by cluster:


    ## random starts do help here with too many clusters
    cl5 <- kmeans(x, 5, nstart = 25) # 5 groups this time and still it does something..
    plot(x, col = cl5$cluster)
    points(cl5$centers, col = 1:5, pch = 8)
    cl5$withinss # Within cluster sum of squares by cluster:

http://neonstorm242.blogspot.com/2010/12/douglaspeucker-line-simplification.html
오늘은 이걸 결국 찾았다. GPS 트랙을 바탕으로 도로지도 만드는 중인데, 알고리즘 궁금해서 좀 찾아보다가. R에서 어떻게 하면 제일 깔끔할 지 생각 중.
 
 http://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm
일단 R에선 maptools 라이브러리 gSimplify 란 함수에 구현되어 있었다.  
저작자 표시 비영리 변경 금지
신고
0

0

티스토리 툴바