Recentemente, estou lendo "Programação Inteligente Coletiva" . Comparado com outros livros de aprendizado de máquina, este livro tem muitos casos, que estão mais próximos da realidade e também é muito adequado para nós, iniciantes que estão prontos para aprender o MachineLearning.
Eu acho que a desvantagem deste livro é que ele não explica a fórmula do algoritmo, mas o implementa diretamente com o código, por isso faz inconvenientes entender o algoritmo em detalhes, por isso quero escrever alguns artigos para explicá -lo em detalhes. A seguir, o primeiro artigo, que explica os coeficientes de correlação de Pearson e usa a língua Java com a qual estou mais familiarizado.
A fórmula matemática de Pearson é a seguinte, da Wikipedia.
Onde E é uma expectativa matemática, o COV representa covariância e /sigma_x e /sigma_y são desvios padrão.
Após a simplificação, você receberá:
O algoritmo para o cálculo de similaridade de Pearson ainda é muito simples e não é difícil de implementar. Somente a soma das variáveis x, y, produto xy, o quadrado de x e o quadrado de y são necessários. O conjunto de testes de dados usado pelo meu código vem da programação de inteligência coletiva do livro . O código é o seguinte:
pacote PearlSoncorreLationsCore; importar java.util.ArrayList; importar java.util.hashmap; importar java.util.list; importar java.util.map; importar java.util.map; import java.util.map.entry; ** ** * @Author Shenchor DataSet no livro "Programação inteligente coletiva"*/public class PearsonCorreLationsCore {Map privado <String, mapa <String, Double >> DataSet = null; public PearsonCorrelationsCore () {initdataset ();}/*** Initialize o DataSet*/Private InitDDDData () {DataSet (); Inicialize o mapa do conjunto de dados Lisa Rose <String, Double> (); Rosemap.put ("Lady in the Water", 2.5); Rosemap.put ("cobras em um plano", 3.5); Rosemap.put ("Just My Luck", 3.0); Rosemap.put ("MEMAN RETURNS", 3.5); Rosemap.put "" Ouvinte ", 3.0); DataSet.put (" Lisa Rose ", Rosemap); // Inicialize o mapa do conjunto de dados Jack Matthews <String, Double> Jackmap = new Hashmap <String, Double> (); Jackmap.put (" Lady in the Water ", 3.0); Jackmap.put (" Snakes on A Dillep. 4); 5.0); jackmap.put ("Você, eu e dupree", 3.5); jackmap.put ("O ouvinte noturno", 3.0); DataSet.put ("Jack Matthews", Jackmap); // inicializa o mapa de dados de jack matthews <string <string> genemap = new Hashmap <string, dupla> (); 3.0); geneMap.put ("cobras em um plano", 3.5); geneMap.put ("Just My Luck", 1.5); GeneMap.put ("Superman Returns", 5.0); GeneMap.put ("You, eu e Dupree", 3.5); Genemap.put ("The Nightyer", 3.0); Map <string, duplo >> getDataSet () {return dATASET;}/*** @param Person1* nome* @param Person2* Nome* @Return Pearson Correlação (Entrada <String, Double> P1: DataSet.get (Person1) .EntrySet ()) {if (DataSet.get (Person2) .ContainsKey (P1.getKey ())) {list.add (P1.getKey ());}}} duplo = 0,0 summy duplo = 0,0; sumx_sq (); = list.size (); para (Nome da String: List) {map <String, Double> P1Map = DataSet.get (Person1); Map <String, Double> P2Map = DataSet.get (Person2); Sumx += P1Map.get (Name); Sumy += P2Map.get (Name); += Math.pow (p2map.get (nome), 2); sumxy += p1map.get (name) * p2map.get (nome);} numerator duplo = sumxy - sumx * sumy / n; denominador duplo; ser 0IF (denominador == 0) {return 0;} retornar numerador / denominador;} public static void main (string [] args) {PearsonCorrelationscore PearlSoncorreLationsCore = new PearsonCorrelationsCore (); System.Out.Println (PearSONCORAÇÕESSCORENTES.SIMPORENSIMSIMSIMSIMCORE (); Matthews ");}}Reflita os dados de cada teste de teste em um plano de coordenadas bidimensionais da seguinte forma:
O valor obtido pelo programa acima é na verdade a inclinação da linha. O intervalo de sua inclinação está entre [-1,1], e a magnitude de seu valor absoluto reflete a semelhança entre os dois. Quanto maior a inclinação, maior a semelhança. Quando a semelhança é 1, a linha reta é uma diagonal.
Resumir
O exposto acima é toda a explicação detalhada da similaridade de Java com base no coeficiente de correlação de Pearson neste artigo. Espero que seja útil para todos. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!