Frage

Ich frage mich, ob es eine Funktion in R aufgebaut ist, die die Kosinus Ähnlichkeit (oder Cosinus-Abstand) zwischen zwei Arrays finden können?

Derzeit implementiert ich meine eigene Funktion, aber ich kann nicht umhin denken, dass R bereits mit einem kommen sollte.

War es hilfreich?

Lösung

kommen, um diese Art von Fragen des ganze Zeit auf (für mich - und wie durch die r -markierte SO Fragenliste - auch andere):

gibt es eine Funktion, entweder in R Kern oder in jedem R-Paket, das tut x? und wenn ja,

, wo ich es unter den 2000 R-Paketen in CRAN finden kann?

kurze Antwort: Geben Sie die sos Paket einen Versuch, wenn diese Art von Fragen kommen

Einer der früheren Antworten gab Cosinus zusammen mit einem Link zu seiner Hilfeseite. Dies ist wahrscheinlich genau das, was der OP will. Wenn Sie die verknüpfte zu sehen Seite sehen Sie, dass diese Funktion in dem ist lsa Paket.

Aber Wie würden Sie diese Funktion, wenn Sie nicht bereits wissen, welches Paket es suchen in?

Sie können immer versuchen, die Standard-R Hilfefunktionen ( ">" unten bedeutet nur die R-Befehlszeile):

> ?<some_name>

> ??<some_name>

> *apropos*<some_name>

, wenn diese fehlschlagen, dann installieren und laden Sie die sos Paket, dann

***findFn***

findFn ist auch aliased zu „???“, obwohl ich nicht oft benutzen, weil ich Sie nicht denke, in anderen Argumenten als die Funktionsnamen passieren können

für die Frage hier, versuchen Sie dies:

> library(sos)

> findFn("cosine", maxPages=2, sortby="MaxScore")

Die zusätzlichen Argumente übergeben ( „maxPages = 2“ und „sortby =“ MaxScore „) begrenzt nur die Anzahl der zurückgegebenen Ergebnisse, und legt fest, wie die Ergebnisse sortiert werden, bzw. - dh“ eine Funktion mit dem Namen finden ‚Cosinus 'oder das hat den Begriff ‚Cosinus‘ in der Funktionsbeschreibung, kehrt nur zwei Seiten der Ergebnisse, und um sie nach Relevanz sortiert absteigend "

Die findFn Anruf über kehrt ein Datenrahmen mit neun Spalten und die Ergebnisse als Zeilen - als HTML.

Scannen die letzte Spalte, Beschreibung und Link-, Artikel (row) 21 Sie finden:

Cosinus-Maßnahmen (Matrices)

Dieser Text ist auch ein Link; im Paket gelangen Sie auf die Hilfeseite für diese Funktion darauf klicken, die diese Funktion enthält - in anderen Worten:

mit findFn , Sie ziemlich schnell die Funktion finden Sie wollen, obwohl Sie haben keine Ahnung, welches Paket es in

Andere Tipps

Es sieht aus wie ein paar Optionen bereits verfügbar sind, aber ich stolperte über eine idiomatische Lösung, die ich wie so ich dachte, dass ich es in die Liste aufnehmen würde.

install.packages('proxy') # Let's be honest, you've never heard of this before.
library('proxy') # Library of similarity/dissimilarity measures for 'dist()'
dist(m, method="cosine")

Unter den Kommentar von Jonathan Chang Ich schrieb diese Funktion zu imitieren dist. Keine zusätzlichen Pakete zu laden.

cosineDist <- function(x){
  as.dist(1 - x%*%t(x)/(sqrt(rowSums(x^2) %*% t(rowSums(x^2))))) 
}

Sie können auch die vegan Paket überprüfen: http: // cran.r-project.org/web/packages/vegan//index.html

Die Funktion vegdist in diesem Paket hat eine Vielzahl von Unähnlichkeit (Abstand) Funktionen, wie manhattan, euclidean, canberra, bray, kulczynski, jaccard, gower, altGower, morisita, horn, mountford, raup, binomial, chao oder cao . Bitte überprüfen Sie die PDF im Paket für eine Definition oder konsultieren Referenzen https://stats.stackexchange.com/a/33001/ 12733 .

Wenn Sie eine Punktproduktmatrix haben, können Sie diese Funktion verwenden, um die Cosinus-Ähnlichkeitsmatrix zu berechnen:

get_cos = function(S){
  doc_norm = apply(as.matrix(dt),1,function(x) norm(as.matrix(x),"f")) 
  divide_one_norm = S/doc_norm 
  cosine = t(divide_one_norm)/doc_norm
  return (cosine)
}

Input S ist die Matrix des Skalarprodukts. Einfach, S = dt %*% t(dt), wo dt ist Dataset.

Diese Funktion ist im Grunde das Skalarprodukt von den Normen der Vektoren zu unterteilen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top