방법
이 본 작업을 수행하는 단계를 포함한다 :
- 변형 데이터는 각 셀의 코사인 유사도 산출 노래/음악 데이터 프레임
- 생성
- 설정
는 변환
우리 나라는 독일이다 부분 집합을 얻기 위해 plyr 라이브러리를 사용하여 데이터 집합을 변환하기 (I 독일에만 관심이 있었다) 라이브러리 (plyr) data.germany < - (데이터 [데이터 $ 국가 %에서 % "독일"])
우리는 다음 주파수 테이블을 만들려면 우리는 단지 우리는 그 다음 1 곡이에 의해 말을 나타내는 이진 행렬을 채울 사용자가
germany.frequency<-as.data.frame((table(data.germany$user,data.germany$artist,dnn=c("user","artist"))))
germany.frequency<-subset(germany.frequency,Freq>=1)
을 듣고 노래를 원하는 사용자
germany.users <- as.matrix(unique(data.germany$user))
germany.artists <- as.matrix(unique(data.germany$artist))
holder <- matrix(NA, nrow=nrow(germany.users),ncol=nrow(germany.artists),dimnames=list((germany.users),(germany.artists)))
holder[,] <- 0
for(i in 1:nrow(holder)) {
for(j in 1:ncol(holder)) {
if(nrow(subset(germany.frequency, (user == rownames(holder)[i] & artist == colnames(holder)[j])))>0)
{ holder[i,j]<-1 }
}
}
# Reorder the column names alphabetically
data.germany<-(holder[,order(colnames(holder))])
이제 홀더 매트릭스를 읽게되었습니다. 주 : for 루프는 R에서 오랜 시간이 걸린다.
아이템 유사성
버리기 사용자 열에 기반하고 새로운 데이터 프레임
data.germany.ibs <- (data.germany[,!(names(data.germany) %in% c("user"))])
두 벡터 사이의 코사인 값을 계산하기위한 헬퍼 기능을 생성 할
getCosine <- function(x,y)
{
this.cosine <- sum(x*y)/(sqrt(sum(x*x)) * sqrt(sum(y*y)))
return(this.cosine)
}
만들기 자리 표시 자 데이터 프레임 목록 항목 대 항목
holder <- matrix(NA, nrow=ncol(data.germany.ibs),ncol=ncol(data.germany.ibs),dimnames=list(colnames(data.germany.ibs),colnames(data.germany.ibs)))
data.germany.ibs.similarity <- as.data.frame(holder)
코사인와 그 빈 공간을 기입 할 수있는 파일에 각
data.germany.neighbours <- matrix(NA, nrow=ncol(data.germany.ibs.similarity),ncol=11,dimnames=list(colnames(data.germany.ibs.similarity)))
for(i in 1:ncol(data.germany.ibs))
{
data.germany.neighbours[i,] <- (t(head(n=11,rownames(data.germany.ibs.similarity[order(data.germany.ibs.similarity[,i],decreasing=TRUE),][i]))))
}
에 대한
write.csv(data.germany.ibs.similarity,file="final-germany-similarity.csv")
받기 상위 10 이웃을
for(i in 1:ncol(data.germany.ibs)) {
for(j in 1:ncol(data.germany.ibs)) {
data.germany.ibs.similarity[i,j]= getCosine(data.germany.ibs[i],data.germany.ibs[j])
}
}
출력 유사성 결과를 유사성 ,515,
출력 이웃 파일 [여기]
write.csv(file="final-germany-item-neighbours.csv",x=data.germany.neighbours[,-1])
(http://stackoverflow.com/questions/14340275/how-to-compute-cosine-similarity-using-two-matrices) 하나의 방법 I에 결과 –