Baru -baru ini saya membaca "pemrograman cerdas kolektif" . Dibandingkan dengan buku -buku pembelajaran mesin lainnya, buku ini memiliki banyak kasus, yang lebih dekat dengan kenyataan, dan juga sangat cocok untuk kita, para pemula yang siap belajar Machinelearning.
Saya pikir kerugian dari buku ini adalah bahwa buku itu tidak menjelaskan formula algoritma, tetapi mengimplementasikannya secara langsung dengan kode, sehingga menyebabkan ketidaknyamanan untuk memahami algoritma secara rinci, jadi saya ingin menulis beberapa artikel untuk menjelaskannya secara rinci. Berikut ini adalah artikel pertama, yang menjelaskan koefisien korelasi Pearson dan menggunakan bahasa Java yang lebih saya kenal.
Formula matematika Pearson adalah sebagai berikut, dari Wikipedia.
Di mana E adalah ekspektasi matematika, COV mewakili kovarians, dan /sigma_x dan /sigma_y adalah standar deviasi.
Setelah penyederhanaan, Anda akan mendapatkan:
Algoritma untuk perhitungan kesamaan Pearson masih sangat sederhana dan tidak sulit untuk diimplementasikan. Hanya jumlah variabel x, y, produk xy, kuadrat x, dan kuadrat y diperlukan. Set tes data yang digunakan oleh kode saya berasal dari pemrograman buku kolektif intelijen . Kodenya adalah sebagai berikut:
Paket Pearlsorcorrelationscore; impor java.util.arraylist; impor java.util.hashmap; impor java.util.list; testasi java. Dataset dalam buku "Pemrograman Cerdektif Cerdas"*/Kelas Publik PearSonCorrelationsCore {private Map <String, Map <String, Double >> Dataset = NULL; PUBUL PUTERNONCORRELationsCore () {initDataSet ();}/** Inisialisasi dataset*/private void initDataSet () {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) Inisialisasi peta dataset 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); rosemap.put ("Superman Returns", 3.5); rosemap.put. Pendengar ", 3.0); dataset.put (" lisa rose ", rosemap); // inisialisasi peta dataset jack matthews <string, double> jackmap = hashmap baru <string, double> (); jackmap.put (" Lady in the Water ", 3.0); jackmap.put (" Snakes di pesawat ", 4.0); 5.0); jackmap.put ("Anda, saya dan dupree", 3.5); jackmap.put ("The Night Listener", 3.0); dataset.put ("jack matthews", jackmap); // inisialisasi jack matthews peta <string, double> geneMap = new hashmap <string, double> genum>; 3.0); genemap.put ("ular pada pesawat", 3.5); genemap.put ("Just My Luck", 1.5); Genemap.put ("Superman Returns", 5.0); Genemap.put ("Anda, Me dan Dupree", 3.5); Genemap.put ("The Night Listener", 3.0); dataset ", dataset", Genemap.put ("The Night Listener", 3.0); dataset ", DATASET", GENEMAP.put ("The Night Listener", 3.0); DATASET ", DATASET", GENEMAP.PUT ("The Night Listener", 3.0); DATASET ", DATASET", GENEMAP.PUT ("The Night Listener", 3.0); DATASET,. Peta <string, double >> getDataSet () {return dataset;}/*** @param person1* nama* @param person2* nama* @return pearson nilai korelasi*/public double sim_pearson (string person1, string person2) {// temukan film yang dikomentari kedua pihak, (Pearson's algorith) List = Pearson, (Pearson, (Pearson, List, (Pearson, (Pearson, (Pearson, (Pearson, Daftar Pearson, List, (Pearson, (Pearson, (Pearson, (Pearson) {//For. (Entri <string, double> p1: dataset.get (person1) .Entryset ()) {if (dataset.get (person2) .containskey (p1.getKey ())) {list.add (p1.getKey ());}} sumx ganda = 0.0; double sumy = 0.0; sumx_sq = 0.0; 0.0; 0; 0; sums; sumx = 0; 0; double sum = double sum = 0.0; sumx_sq = 0.0; 0; = list.size (); for (name string: list) {peta <string, double> p1map = dataset.get (person1); peta <string, double> p2map = dataset.get (person2); sumx += p1map.get (name); sumy += p2map.get (name); sumx_sq += name); sumy += p2map.get (name); sumx_sq += = sumx_sq += = sumx += sumx_sq += sumx += sumx.sq += sumx += sumx += sumx += sumx.sq += sumx.sq += sumx.sq += sumx.sq += sumx.sq += sumx. += Math.pow (p2map.get (name), 2); sumxy += p1map.get (name) * p2map.get (name);} numerator ganda = sumxy - sumx * sumy / n; double denominator = math.sqrt (sumx_sq - sumx * sumx / n) (double deominator = sumsy; 0if (denominator == 0) {return 0;} return numerator / denominator;} public static void main (string [] args) {pearsoncorrelationscore pearlSorCorrelationscore = pearsoncorrelationscore () baru ("lunchon (" lockson ("pearsorcorrelationscore.sim_ Matthews "));}}Mencerminkan data dari setiap tes yang diatur ke dalam bidang koordinat dua dimensi sebagai berikut:
Nilai yang diperoleh oleh program di atas sebenarnya adalah kemiringan garis. Interval kemiringannya adalah antara [-1,1], dan besarnya nilai absolutnya mencerminkan kesamaan antara keduanya. Semakin besar kemiringan, semakin besar kesamaannya. Ketika kesamaan adalah 1, garis lurus adalah diagonal.
Meringkaskan
Di atas adalah semua penjelasan terperinci tentang kesamaan Java berdasarkan koefisien korelasi Pearson dalam artikel ini. Saya harap ini akan membantu semua orang. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!