여기는 Eucledian 거리를 계산하는 데 dist()
함수를 사용하는 solituin 중 하나입니다. 먼저 모든 항목의 거리를 계산 한 다음 모든 항목의 순서를 얻습니다. 그 순서에서 i 번째 것을 고르고 각 항목에 대한 해당 점수와 항목 레이블을 선택하여 데이터 프레임에 넣습니다. 그러면 데이터 프레임에 바인딩합니다.
mtcars$item = rownames(mtcars)
data <- (mtcars %>% select(item, mpg, hp, qsec))[1:10,]
euc_dist <- as.matrix(dist(data[1:10,-1]))
# Get the ith cars label name for one car
ith_item <- function(col, euc_dist, top_i) {
labels(euc_dist)[[1]][top_i[col]]
}
# Get the ith cars score from one column
ith_score <- function(col, euc_dist, top_i) {
euc_dist[top_i[col], col]
}
# Create a dataframe with the ith most similar item for all items
ith_similar <- function(euc_dist, i) {
orders <- apply(euc_dist, 2, order)
top_i <- orders[i + 1, ]
top_i_score <- sapply(1:ncol(euc_dist), ith_score, euc_dist, top_i)
top_i_items <- sapply(1:ncol(euc_dist), ith_item, euc_dist, top_i)
similarities <- data.frame(placeholder1 = top_i_score,
placeholder2 = top_i_items)
colnames <- c(paste0("similar_", i, "_score"), paste0("similar_", i))
names(similarities) <- colnames
similarities
}
# For example top 2 similarities
n <- 2
for(i in 1:n) {
tmp_similarities <- ith_similar(euc_dist, i)
data <- cbind(data, tmp_similarities)
}
data
이의 출력을 제공합니다 : 또한
item mpg hp qsec similar_1_score similar_1 similar_2_score similar_2
Mazda RX4 Mazda RX4 21.0 110 16.46 0.560000 Mazda RX4 Wag 3.006726 Hornet 4 Drive
Mazda RX4 Wag Mazda RX4 Wag 21.0 110 17.02 0.560000 Mazda RX4 2.452835 Hornet 4 Drive
Datsun 710 Datsun 710 22.8 93 18.61 4.733297 Merc 230 12.987767 Valiant
Hornet 4 Drive Hornet 4 Drive 21.4 110 19.44 2.452835 Mazda RX4 Wag 3.006726 Mazda RX4
Hornet Sportabout Hornet Sportabout 18.7 175 17.02 52.018155 Merc 280 65.040680 Mazda RX4 Wag
Valiant Valiant 18.1 105 20.22 6.041391 Hornet 4 Drive 6.606815 Mazda RX4 Wag
Duster 360 Duster 360 14.3 245 15.84 70.148075 Hornet Sportabout 122.123141 Merc 280
Merc 240D Merc 240D 24.4 62 20.00 31.072369 Datsun 710 33.165796 Merc 230
Merc 230 Merc 230 22.8 95 22.90 4.733297 Datsun 710 11.369802 Valiant
Merc 280 Merc 280 19.2 123 18.30 13.186296 Mazda RX4 Wag 13.234032 Hornet 4 Drive
, 당신은 "가장 유사한 항목을"말을하지만,이 유사성을 생산하고자하는 입력 값 (기능)을 참조하지 않습니다. 이 모든 것을 사용하고 싶습니까? – lmo
@Imo -이 문제를 해결하기 위해 패키지를 추가했습니다. 또한 예, select 문에있는 3 개의 숫자 열을 사용하고 싶습니다. – runningbirds
아, 코드 주석의 두 번째 부분을 놓쳤습니다. – lmo