최근에 나는 "집단 지능형 프로그래밍"을 읽고 있습니다. 다른 기계 학습 서적과 비교할 때이 책에는 많은 사례가 있으며,이 책에는 현실에 더 가깝고 MachineLearning을 배울 준비가 된 초보자에게도 매우 적합합니다.
이 책의 단점은 알고리즘의 공식을 설명하지는 않지만 코드로 직접 구현하므로 불편 함이 알고리즘을 자세히 이해할 수 있으므로 몇 가지 기사를 작성하여 자세히 설명하고 싶습니다. 다음은 Pearson의 상관 계수를 설명하고 더 익숙한 Java 언어를 사용하는 첫 번째 기사입니다.
피어슨의 수학적 공식은 위키 백과의 다음과 같습니다.
여기서 e는 수학적 기대치이고 COV는 공분산을 나타내고 /sigma_x 및 /sigma_y는 표준 편차입니다.
단순화 후 : 당신은 다음을 얻게됩니다.
피어슨의 유사성 계산에 대한 알고리즘은 여전히 매우 간단하고 구현하기가 어렵지 않습니다. 변수 x, y, 곱 xy, x의 제곱 및 y의 제곱의 합만 필요합니다. 내 코드에서 사용한 데이터 테스트 세트는 책 Collective Intelligence 프로그래밍 에서 나옵니다 . 코드는 다음과 같습니다.
PARKET PARKSONCORRELATIONCORE; 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;/** * @authao * * pearson * * * * * * * * * * * * "집단 지능형 프로그래밍"*/public class pearsoncorrelationscore {private map <string, map <string, double >> dataset = null; public pearsoncorrelationscore () {initdataset ();}/*** DataSet*/private void initDataset () {datahmap <string, 맵 <string <string <); Lisa Rose DataSet Map <String, Double> (); Rosemap.put ( "Water in the Water", 2.5); Rosemap.put ( "비행기의 뱀", 3.5); Rosemap.put ( "Just My Luck", 3.0); Rosemap.put ( "Superman Returns", 3.5); "You, Me, Dupree", 2.5); 3.0); DataSet.put ( "Lisa Rose", Rosemap); // Jack Matthews DataSet Map <String, Double> Jackmap = New Hashmap <String, Double> (); JackMap.put ( "Lady in the Water", 3.0); Jackmap.put ( "비행기의 스네이크", 4.0); Jackmap.put ( "uppman Retory", "your returts" me and dupree ", 3.5); jackmap.put ("야간 청취자 ", 3.0); dataSet.put ("Jack Matthews ", Jackmap); // Jack Matthews DataSet Map <String, Double> Genemap = New Hashmap <String, Double> ();"Water in the Water ", 3.0); Genemap." 3.5). DataSet;}/*** @param person1* name* @param person2* name* @return pearson correlation value*/public double sim_pearson (string person1, string person2) {// 양 당사자가 댓글을 달린 영화를 찾습니다. 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 sumxy = 0.0; (문자열 이름 : list) {map <string, double> p1map = dataset.get (person1); map <string, double> p2map = dataset.get (person2); sumx += p1map.get (name); sumy += p2map.get (name); sumx_sq += math.pow (p1map.get (p1map.get), 2); math.pow (p2map.get (name), 2); sumxy += p1map.get (name) * p2map.get (name);} double numerator = sumxy -sumx * sumy / n; double denominator = math.sqrt ((sumx_sq- sumx * sumx / n) * (sumy_sq- sumy * / n); 0if (denominator == 0) {return 0;} 반환 분자 / 분리기;} public static void main (string [] args) {pearsoncorrelationscore pearlsoncorrelationscore = new pearsoncorrelationscore (); System.out.out.pearsoncorrelationscore.sim_pearson ( "Lisa Rose", "," Matthews ");}}각 테스트의 데이터를 다음과 같이 2 차원 좌표 평면으로 반영합니다.
위 프로그램에 의해 얻은 값은 실제로 라인의 경사입니다. 경사의 간격은 [-1,1] 사이이며 절대 값의 크기는 둘 사이의 유사성을 반영합니다. 경사가 클수록 유사성이 커집니다. 유사성이 1이면 직선은 대각선입니다.
요약
위의 내용은이 기사에서 피어슨의 상관 관계 계수를 기반으로 한 Java의 유사성에 대한 자세한 설명입니다. 모든 사람에게 도움이되기를 바랍니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!