Récemment, je lis "Collective Intelligent Programming" . Par rapport à d'autres livres d'apprentissage automatique, ce livre a de nombreux cas, qui sont plus proches de la réalité, et est également très approprié pour nous, novices qui sont prêts à apprendre le machinearning.
Je pense que l'inconvénient de ce livre est qu'il n'explique pas la formule de l'algorithme, mais l'implémente directement avec du code, donc cela fait comprendre l'algorithme en détail, donc je veux écrire quelques articles pour l'expliquer en détail. Ce qui suit est le premier article, qui explique les coefficients de corrélation de Pearson et utilise la langue java que je connais davantage.
La formule mathématique de Pearson est la suivante, de Wikipedia.
Là où E est l'attente mathématique, le COV représente la covariance, et / Sigma_x et / Sigma_y sont des écarts-types.
Après simplification, vous obtiendrez:
L'algorithme du calcul de similitude de Pearson est encore très simple et pas difficile à mettre en œuvre. Seule la somme des variables x, y, le produit XY, le carré de x et le carré de y sont nécessaires. L'ensemble de tests de données utilisé par mon code provient de la programmation d'intelligence collective de livres . Le code est le suivant:
Package PearlsonCorrelationsCore; import java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.map; import java.util.map; import java.util.map.entry; / ** * @Autor Shenchao * * Pearson Correlation Evaluation * * Tested avec l'évaluation de l'utilisateur DataSet Innest Le livre "Collective Intelligent Programming" * / classe publique PearsonCorrelationsCore {Private Map <String, Map <String, Double >> DataSet = NULL; public PearsonCorrelationsCore () {initDataset ();} / *** initialize the dataSet * / private void initDataSet () {dataSet = new HaHMAP Lisa Rose Dataset Map <String, double> (); rosemap.put ("Lady in the water", 2.5); rosemap.put ("Snakes on a Plane", 3.5); Rosemap.put ("Just My Luck", 3.0); Rosemap.put ("Superman Returns", 3.5); Rosemap.put ("You, Me et Dupree", 2.5); Rosemap.put ("The Night Écouter", ",", 2.5); Rosemap.put ("The Night Écouter", ",", 2.5); Rosemap.put ("The Night Arever", ",,", écouter ",", 2.5); Rosemap.p. 3.0); dataSet.put ("Lisa Rose", Rosemap); // Initialize Jack Matthews Dataset Carte <String, Double> Jackmap = new Hashmap <String, Double> (); Jackmap.put ("Lady in the Water", 3.0); Jackmap.put ("Snakes on a Plane", 4.0); Jackmap.put ("Superman Returns", 5.0); ME et DuPree ", 3.5); jackmap.put (" The Night Lisoner ", 3.0); DataSet.put (" Jack Matthews ", Jackmap); // Initialize Jack Matthews Dataset Map <String, Double> Genemap = New Hashmap <String, Double> ();" Genemap.put ("Lady in the Water", 3.0); Genemap.put ("Snakes sur" Snefre 3.5); genemap.put ("Just My Luck", 1.5); genemap.put ("Superman Returns", 5.0); Genemap.put ("You, Me and Dupree", 3.5); GeneMap.put ("The Night Louner", 3.0); DataSet.put.put ("Gene Seymour", Genemap);} Map Public Map <String, MAP DataSet;} / *** @param person1 * name * @param person2 * name * @return Pearson Correlation Value * / public double sim_pearson (String Person1, String Person2) {// Recherchez les films sur lesquels les deux parties ont commenté, (PEARSON'S ALGORITHM exige DataSet.get (Person1) .EntrySet ()) {if (dataSet.get (Person2) .ContainsKey (p1.getKey ())) {list.add (p1.getKey ());}} double sumx = 0,0; double sumy = 0.0; double sumx_sq = 0.0; double sumy_sq = 0,0; (Nom de la chaîne: liste) {map <string, double> p1map = dataSet.get (personne1); map <string, double> p2map = dataSet.get (person2); sumx + = p1map.get (name); sumy + = p2map.get (name); sumx_sq + = math.pow (p1map.get (nom), 2); sumy_sq + =) Math.pow (p2map.get (nom), 2); sumxy + = p1map.get (name) * p2map.get (name);} double numérateur = sumxy - sumx * sumy / n; double dénominator = math.sqrt ((sumx_sq - sumx * sumx / n) * (sumy_sq - sumy * sumy * 0if (Denominator == 0) {return 0;} return Numerator / Denominator;} public static void main (String [] args) {PearsonCorrelationsCore PearlsonCorrelationsCore = new PearsonCorrelationsCore (); System.out.println (JackCorrelationsCore.Sim_Pearson ("Lisa Rose," Jack Matthews "));}}Reflétez les données de chaque test défini dans un plan de coordonnées bidimensionnel comme suit:
La valeur obtenue par le programme ci-dessus est en fait la pente de la ligne. L'intervalle de sa pente est entre [-1,1], et l'ampleur de sa valeur absolue reflète la similitude entre les deux. Plus la pente est grande, plus la similitude est grande. Lorsque la similitude est 1, la ligne droite est une diagonale.
Résumer
Ce qui précède est toute l'explication détaillée de la similitude de Java basée sur le coefficient de corrélation de Pearson dans cet article. J'espère que ce sera utile à tout le monde. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!