Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo calcula Stata la similitud del coseno de dos variables?

¿Cómo calcula Stata la similitud del coseno de dos variables?

(1) Similitud del coseno

La similitud entre dos vectores se mide midiendo el coseno del ángulo entre ellos. El coseno de un ángulo de 0 grados es 1, y el coseno de cualquier otro ángulo no es mayor que 1 su valor mínimo es -1; El coseno del ángulo entre dos vectores determina si los dos vectores apuntan aproximadamente en la misma dirección. Por lo tanto, se utiliza a menudo para comparar archivos.

Consulta la introducción de la enciclopedia para obtener más detalles (haz clic para abrir el enlace).

(2) En la implementación del algoritmo, no se utilizan pesos (IDF - frecuencia inversa del documento) y el número de apariciones de palabras se utiliza como valor del espacio vectorial.

[java]Ver texto sin formato

Importar Java util .hashmap; . util . map;

Clase pública SimilarDegreeByCos

{

/*

*Calcular el valor de dos cadenas (caracteres ingleses) Similitud, cálculo de coseno simple, sin ponderación.

*/

public static double getsimilar gree(string str1, string str2)

{

//Crear un modelo espacial vectorial , implementado con map. La clave principal es un término y el valor es una matriz de longitud 2, que almacena el número de apariciones del término correspondiente en la cadena.

Map<String,int[]>vectorSpace = new HashMap<String,int[]>();

int[]itemCountArray = null //Para evitar generar variables locales con frecuencia; , itemCountArray se declara aquí.

//Utiliza espacios como delimitadores para descomponer la cadena.

string strArray[]= str 1 . split(" ");

for(int I = 0; i<strArray.length++i)

{

if(espacio vectorial. contiene clave(strArray[I]))

++(espacio vectorial. get(strArray[I])[0]);

p>

Otro

{

matriz de recuento de elementos = new int[2];

matriz de recuento de elementos[0]= 1;

matriz de recuento de elementos[1]= 0;

vectorSpace.put(strArray[i], itemCountArray);

}

}

strArray = str 2 . split(" ");

for(int I = 0;i<strArray.length++i)

{

if(espacio vectorial . contiene clave(strArray[I]))

++(espacio vectorial . get(strArray[I])[1]);

Otros

{

matriz de recuento de elementos = new int[2];

matriz de recuento de elementos[0]= 0;

matriz de recuento de elementos [1]= 1;

vectorSpace.put(strArray[i], itemCountArray);

}

}

// Calcular similitud

Vector doble 1 módulo = 0.00; //Módulo del vector 1

Vector doble2Módulo = 0.00//Módulo del vector 2

Producto de vector doble = 0.00 //producto cruzado

Iterador iter = vectorSpace.entrySet(). iterador();

while(iter.hasNext())

{

Mapa. Entrada entrada = (Map. entrada)ITER . next();

matriz de recuento de elementos = (int[])entry

vector 1 módulo+= itemCountArray[0; ]* itemCountArray[0];

vector 2 módulo+= itemcountary[1]* itemcountary[1];

producto vectorial+= itemCountArray[0]* itemCountArray[1];

p>

}

vector 1 módulo = math sqrt(vector 1 módulo);

vector 2 módulo = math sqrt(vector 2 módulo) ;

//Devuelve la similitud.

return(producto vectorial/(vector 1 módulo * vector 2 módulo));

}

/*

*

*/

Public static void main(String args[])

{

String str1 = "Camión de oro y plata";

p>

String str2 = "Envío de oro dañado en incendio";

String str3 = "Plata enviada en camión";

String str4 = " Plata enviada en camión" Oro enviado";

String str5 = "Oro oro oro oro oro";

system out . ));

sistema. println(gradosimilarbycos. getgradosimilar(cadena 1, cadena 4)); ));

sistema . println(gradosimilarbycos . getsimilargrado(cadena 1, cadena 5));