Napotkałem problem "podobieństwa wszystkich par" w moim systemie rekomendacji. Dzięki this databricks blog wygląda na to, że usługa RowMatrix może pomóc.iskra - jak mogę odzyskać parę przedmiotów po obliczeniu podobieństwa za pomocą RowMatrix
Jednak RowMatrix to rodzaj macierzy bez znaczących indeksów wierszy, a tym samym nie wiem jak pobrać wynik podobieństwa po wywołaniu columnSimilarities(threshold)
dla określonej pozycji I i J
Poniżej kilka szczegółów o tym, co ja robie:
1) Mój plik danych pochodzi z Movielens w formacie jak poniżej:
user::item::rating
2) I zbudowania RowMatrix w którym każdy rzadki wektor i reprezentuje ratingi wszystkich użytkowników do tej pozycji i
val dataPath = ...
val ratings: RDD[Rating] = sc.textFile(dataPath).map(_.split("::") match {
case Array(user, item, rate) => Rating(user.toInt, item.toInt, rate.toDouble)
})
val rows = ratings.map(rating=>(rating.product, (rating.user, rating.rating)))
.groupByKey()
.map(p => Vectors.sparse(userAmount, p._2.map(r=>(r._1-1, r._2)).toSeq))
val mat = new RowMatrix(rows)
val similarities = mat.columnSimilarities(0.5)
Teraz dostać CoordinateMatrix similarities
. Jak mogę uzyskać podobieństwo określonego elementu i j? Mimo że można go użyć do pobrania numeru RDD[MatrixEntry]
, nie jestem pewien, czy wiersz i kolumna j odpowiadają elementowi i i i j.
Ograniczeniem jest to, że kolumna. Podobieństwa() zwracają górną trójkątną współrzędną koordynacyjną, więc tylko jedna z pozycji (i, j) lub (j, i) istnieje w pozycjach. Który z nich zależy od tego, czy i
harthur