เมื่อเร็ว ๆ นี้ฉันกำลังอ่าน "การเขียนโปรแกรมอัจฉริยะแบบรวม" เมื่อเปรียบเทียบกับหนังสือการเรียนรู้ของเครื่องจักรอื่น ๆ หนังสือเล่มนี้มีหลายกรณีซึ่งใกล้เคียงกับความเป็นจริงมากขึ้นและยังเหมาะสำหรับเรามากนักสามเณรที่พร้อมจะเรียนรู้การเรียนรู้
ฉันคิดว่าข้อเสียของหนังสือเล่มนี้คือมันไม่ได้อธิบายสูตรของอัลกอริทึม แต่ใช้มันโดยตรงกับรหัสดังนั้นมันจึงทำให้เกิดความไม่สะดวกในการเข้าใจอัลกอริทึมในรายละเอียดดังนั้นฉันต้องการเขียนบทความสองสามข้อเพื่ออธิบายรายละเอียด ต่อไปนี้เป็นบทความแรกซึ่งอธิบายค่าสัมประสิทธิ์สหสัมพันธ์ของเพียร์สันและใช้ภาษาจาวาที่ฉันคุ้นเคยมากขึ้น
สูตรทางคณิตศาสตร์ของเพียร์สันมีดังนี้จากวิกิพีเดีย
ในกรณีที่ E คือความคาดหวังทางคณิตศาสตร์ COV แสดงถึงความแปรปรวนร่วมและ /sigma_x และ /sigma_y เป็นส่วนเบี่ยงเบนมาตรฐาน
หลังจากการทำให้เข้าใจง่ายคุณจะได้รับ:
อัลกอริทึมสำหรับการคำนวณความคล้ายคลึงกันของเพียร์สันยังคงง่ายมากและไม่ยากที่จะนำไปใช้ เฉพาะผลรวมของตัวแปร x, y, ผลิตภัณฑ์ xy, สี่เหลี่ยมจัตุรัส x และสี่เหลี่ยมจัตุรัส y ชุดการทดสอบข้อมูลที่ใช้โดยรหัสของฉันมาจากการ เขียน โปรแกรม Book Collective Intelligence รหัสมีดังนี้:
แพ็คเกจ PearlsonCorrelationsCore นำเข้า java.util.arraylist; นำเข้า java.util.hashmap; นำเข้า java.util.list; นำเข้า java.util.map; นำเข้า java.util.map; นำเข้า Java.util.map.entry; ชุดข้อมูลในหนังสือ "Collective Intelligent Programming"*/คลาสสาธารณะ PearsonCorrelationsCore {แผนที่ส่วนตัว <String, Map <String, Double >> DataSet = Null; PearsonCorrelationsCore (InitDataSet (InitDataset () double >> (); // เริ่มต้นแผนที่ชุดข้อมูล Lisa Rose <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); 2.5); Rosemap.put ("The Night Listener", 3.0); Dataset.put ("Lisa Rose", Rosemap); // เริ่มต้น Jack Matthews Map DataSet Map <String, double> Jackmap = new Hashmap <String, double> (); returns ", 5.0); jackmap.put (" คุณ, ฉันและ dupree ", 3.5); jackmap.put (" The Night Listener ", 3.0); DataSet.put (" Jack Matthews ", Jackmap); 3.0); genemap.put ("งูบนระนาบ", 3.5); genemap.put ("แค่โชคของฉัน", 1.5); genemap.put ("Superman Returns", 5.0); Genemap.put ("คุณ, ฉันและ dupree", 3.5); แผนที่ <string, double >> getDataSet () {return dataset;}/*** @param person1* ชื่อ* @param person2* ชื่อ* @return pearson ค่าสหสัมพันธ์*/public double sim_pearson (สตริง person1, string2) {// ค้นหาภาพยนตร์ที่ทั้งสองรายการ (รายการ <สตริง, double> p1: dataset.get (person1) .entryset ()) {ถ้า (dataset.get (person2) .containskey (p1.getKey ())) {list.add (p1.getKey ());}} double sumx = 0.0; = list.size (); สำหรับ (ชื่อสตริง: รายการ) {แผนที่ <สตริง, double> p1map = dataset.get (person1); แผนที่ <สตริง, double> p2map = dataset.get (person2); sumx += p1map.get (ชื่อ); sumy += p2map.get += math.pow (p2map.get (ชื่อ), 2); sumxy += p1map.get (ชื่อ) * p2map.get (ชื่อ);} ตัวเศษ double = sumxy - sumx * sumy / n; double minimator = math.sqrt (sumx_sq - sumx * sumx * sumx 0IF (ส่วนหนึ่ง == 0) {return 0;} ส่งคืนตัวเศษ / ส่วน;} โมฆะคงที่สาธารณะ (สตริง [] args) {PearsonCorrelationsCore PearlsonCorrelationsCore = ใหม่ PearsonCorrelationsCore (); Matthews "));}}สะท้อนข้อมูลจากแต่ละชุดทดสอบเป็นระนาบพิกัดสองมิติดังนี้:
ค่าที่ได้จากโปรแกรมข้างต้นเป็นความชันของเส้น ช่วงเวลาของความชันของมันอยู่ระหว่าง [-1,1] และขนาดของค่าสัมบูรณ์ของมันสะท้อนให้เห็นถึงความคล้ายคลึงกันระหว่างทั้งสอง ยิ่งความลาดชันยิ่งมีความคล้ายคลึงกันมากขึ้นเท่านั้น เมื่อความคล้ายคลึงกันคือ 1 เส้นตรงเป็นเส้นทแยงมุม
สรุป
ข้างต้นเป็นคำอธิบายโดยละเอียดทั้งหมดของความคล้ายคลึงกันของ Java ตามค่าสัมประสิทธิ์สหสัมพันธ์ของเพียร์สันในบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!