R에서 차원 축소를 수행하는 방법


28

a (i, j)가 개별 페이지 j를 몇 번 본지를 알려주는 행렬이 있습니다. 27K 개인과 95K 페이지가 있습니다. 나는 종종 함께 볼 수있는 페이지 세트에 해당하는 페이지 공간에 소수의 "치수"또는 "종횡비"를 갖고 싶습니다. 저의 궁극적 인 목표는 개인이 1, 2, 등의 페이지를 얼마나 자주 본지 계산하는 것입니다.

주요 구성 요소 분석단일 값 분해 에 대한 R 설명서를 읽고 이러한 명령을 실행했지만 진행 방법을 잘 모르겠습니다.

차원 축소를 사용하여이를 수행하려면 어떻게해야합니까? 아니면 이것이 실제로 클러스터링 문제입니까? 그 대신 클러스터링 알고리즘을 조사해야합니까?

통찰력에 대한 많은 감사합니다 ~ l

답변:


10

mat_pages []에 열 (클러스터 화하려는)의 페이지와 행의 개인이 포함되어 있다고 가정합니다. 다음 명령을 사용하여 Rby의 개별 데이터를 기반으로 페이지를 클러스터링 할 수 있습니다.

  pc <- prcomp(x=mat_pages,center=TRUE,scale=TRUE)

로딩 행렬은 데이터의 SVD 분해의 고유 벡터 행렬입니다. 점수 계산에서 각 PAGE의 상대적 가중치를 제공합니다. 절대 값이 더 큰 하중은 해당 기본 구성 요소의 점수를 결정하는 데 더 많은 영향을 미칩니다.

그러나 PCA를 사용하여 페이지를 클러스터링 할 때의 단점 도 지적해야 합니다. 그 이유는이 변형이 실제로 PAGE 내용 때문인지 또는 다른 이유 (기술적이거나 개별적인 변형 일 수 있음)에 관계없이 로딩이 PAGES에 더 큰 가중치를 부여하기 때문입니다. 하중이 그룹 간의 실제 차이를 반드시 반영하는 것은 아니며, 이는 아마도 귀하의 주요 관심사 일 것입니다. 그러나이 클러스터링은 모든 페이지가 동일한 분산을 갖는다는 가정하에 그룹의 차이점을 실제로 반영합니다 (이것이 유효한 가정인지는 모르겠습니다).

강력한 컴퓨팅 기능이있는 경우 (데이터 크기에 따라 가능할 수 있음) 계층 적 모델을 사용하는 것이 좋습니다. R에서는 lme4 패키지를 사용하여 수행 할 수 있습니다.


당신은 점수를 얻은 후 무엇을합니까?

이것은 조잡한 제안이며 분석은 데이터의 모양에 크게 좌우됩니다. 또한,이 프로세스는 보유하고있는 규모의 데이터를 그룹화하는 것이 불가능할 것이라고 생각합니다.

pc.col <- paste("page", 1:27000, sep=".")

pdf("principle-components.pdf")
plot(pc$x[,1:2]) ## Just look at the 1st two loadings (as you can see the groupings in a plane)
dev.off()

바라건대, 이것은 데이터가 어떻게 그룹화되는지에 대한 그림을 줄 수 있습니다.

경고 : 이것은 내가 권장하지 않습니다.


내 추천 :

이러한 문제는 유전체학에서 자주 발생합니다.이 경우 페이지는 유전자에 해당하고 개인은 환자에 해당합니다 (기본적으로 개인은 유전체학에서와 동일한 의미를 갖습니다)

데이터를 기반으로 페이지를 클러스터링하려고합니다.

R에서 많은 클러스터링 패키지를 사용할 수 있으며 다른 답변에서 지적되었습니다. 패키지의 근본적인 문제는 hclust와 비슷하지만 클러스터 수를 결정하는 방법입니다. 내가 좋아하는 몇 가지는 다음과 같습니다.

  • pvclust은 (당신이 클러스터를 제공하며 각 클러스터에 대한 p- 값을 제공하는 p- 값은 당신이 통계적으로 유의 한 클러스터를 확인할 수 있습니다 사용.. 문제가 : 연산 능력이 많이 필요하고의 데이터로 작업 할 경우 나는 확실하지 않다 당신의 크기)
  • hopach (예상 클러스터 수와 클러스터 수)
  • Bioconductor에 사용 가능한 다른 패키지가있는 경우 작업보기에서 해당 패키지를 확인하십시오.

k-means 등과 같은 클러스터링 알고리즘을 사용할 수도 있습니다.이 포럼에서 클러스터링에 대한 스레드를 보았습니다. 답은 매우 상세했습니다. Tal Galili가 올바르게 기억하는지 묻습니다.


@suncoolsu : 많은 감사합니다! 방금 당신의 조언을 따르고 prcomp를 실행했습니다. 또한 생성 된 로딩 매트릭스를 저장했습니다. 그러나이 매트릭스를 사용하여 페이지를 그룹화하려면 어떻게해야합니까?
laramichaels

라라 마이클스 안녕하세요, 아래 답변을 찾으십시오.
suncoolsu

@ suncoolsu : 비슷한 문제를 다루고 있지만 동일한 "역학"을 가진 개인을 "클러스터"하고 싶습니다 (실제로 지역 당 많은 시계열이 있고 모델을 만들고 싶습니다). 상관 거리 (1-rho)로 pam을 사용하려고했습니다. 이것이 권장되는 방법입니까? 탐색 할 경로를 제안 해 주시겠습니까?
teucer

@ 무사 .. 좀 더 명확 할 수 있습니까? 나는 당신이 언급 한 "역학"을 이해하지 못한다고 생각합니다. 확실히 pam 은 클러스터링에 적합합니다. 그러나 나도 언급 한대로 R 패키지 pvclust 및 hopach를 사용해 볼 수도 있습니다. 또한 SOM (자체 구성 맵)은 클러스터링을 보는 다른 방법입니다. 자세한 내용은 Ripley and Venable (2002) 서적-MASS를 참조하십시오. 이 책은 클러스터링에 대한 철저한 처리를 제공합니다.
suncoolsu

@suncoolsu : 열악한 공식에 대해 죄송합니다! 모델링하고 싶은 200 개의 시계열이 있습니다 (예 : 시뮬레이션). 나는 "유사한"(즉, 시간이 지남에 따라 동일한 동작을 갖는 것 : 직선 접근 방식은 상관 관계를 사용하는 것)을 클러스터링하고 클러스터 시계열 만 시뮬레이션 할 수 있다고 생각합니다.
teucer

4

확실히 클러스터링 문제입니다. 루피의 확인 cluster패키지하는 알고리즘 옵션의 개요를 (할 수 pamagnes시작하는 가장 좋은 옵션은, 그들은 클러스터링의 두 가지 주요 스트림 대표 - 무게 중심계층을 ).
데이터에서 클러스터링을 사용하는 주된 문제는 페이지 간 유사성 측정을 정의하는 것입니다. 간단한 것은 맨해튼 거리를 사용하는 것입니다. 일반적인 시청자의 수를 세고 첫 페이지와 두 번째 페이지의 시청자 수로 정규화하는 것이 좀 더 복잡합니다. 이는 인기 효과를 없애줍니다.

편집 : 자, 이제 데이터 크기를 보았습니다 ... 행렬의 삼각형 하나가 필요하기 때문에 R이 폭발하게 됩니다. 거리를 저장하십시오. 가능한 해결책은 이 보고서 를 확인하십시오 .(number of pages)×(number of pages)


나는 당신의 대답을 upvoted. 그러나 마지막 문장에서 보고서에 대한 새 링크를 제공 할 수 있습니까? 오래된 것은 죽었다.
제자

1
나는 영원히 잃어버린 것이 두렵다 ... 일반적으로 각각의 유사성 매트릭스를 명시 적으로 구축하지 않고 필요에 따라 객체를 조사하는 클러스터링 방법의 구현에 관한 것이었다.

1

차원 축소는 기본적으로 클러스터링 알고리즘을 속성 (열)에 적용합니다. 데이터 집합의 차원이 상당히 크기 때문에 SOM (자체 구성 맵 / Khohonen net)을 사용하여 개인 또는 페이지에 대한 맵을 만들 수 있습니다. 그런 다음 의미있는 (해석 가능한) 패턴인지 확인할 수 있습니다.


1

PCA를 수행하는 경우, 처음 두 가지 이외의 다른 구성 요소를 간략하게 검사하는 것이 좋습니다. prcomp객체 가 있으면 pc(suncoolsu의 게시물 참조) plot(pc)여러 주성분으로 인한 분산의 양을 볼 수 있습니다 . 당신은 또한 쉽게와 함께 여러 개의 (보통 서너) 중을 시각화 할 수 있습니다 pairs(pc$x[,1:3])사용하거나 lattice, splom(pc$x[,1:3]).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.