Naive Bayes(朴素贝叶斯算法)[分类算法]
Naïve Bayes(朴素贝叶斯)分类算法的实现
(1) 简介:
(2) 算法描述:
(3)
1 <?php 2 /* 3 *Naive Bayes朴素贝叶斯算法(分类算法的实现) 4 */ 5 6 /* 7 *把.txt中的内容读到数组中保存 8 *$filename:文件名称 9 */ 10 //-------------------------------------------------------------------- 11 function getFileContent($filename) 12 { 13 $array = array(null); 14 $content = file_get_contents($filename); 15 $result = explode("\r\n",$content); 16 //print_r(count($result)); 17 for($j=0;$j<count($result);$j++) 18 { 19 //print_r($result[$j]."<br>"); 20 $con = explode(" ",$result[$j]); 21 array_push($array,$con); 22 } 23 array_splice($array,0,1); 24 return $array; 25 } 26 //-------------------------------------------------------------------- 27 28 29 /* 30 *NaiveBayes朴素贝叶斯算法 31 *$test:测试文本;$train:训练文本;$flagsyes:yes;$flagsno:no 32 */ 33 //-------------------------------------------------------------------- 34 function NaiveBayes($test,$train,$flagsyes,$flagsno) 35 { 36 $count_yes = 0; 37 $num = count($train[0]); 38 for($i=1;$i<count($train);$i++) 39 { 40 if($train[$i][$num-1]==$flagsyes)$count_yes++; 41 } 42 $p_yes = $count_yes / (count($train)-1); 43 $p_no = 1- $p_yes; 44 45 $count_no = count($train)-1 - $count_yes; 46 47 48 for($i=1;$i<count($test)-1;$i++) 49 { 50 $testnumyes = 0; 51 $testnumno = 0; 52 for($j=1;$j<count($train);$j++) 53 { 54 if(($train[$j][$i]==$test[$i])&&($train[$j][count($test)-1]==$flagsyes))$testnumyes++; 55 else if(($train[$j][$i]==$test[$i])&&($train[$j][count($test)-1]==$flagsno))$testnumno++; 56 } 57 58 $array_yes[$i] = $testnumyes / $count_yes ; 59 $array_no[$i] = $testnumno / $count_no ; 60 /* 61 print_r($testnumyes."<br>"); 62 print_r($testnumno."<br>"); 63 print_r($count_yes."<br>"); 64 print_r($count_no."<br>"); 65 print_r($array_no[$i]."<br>"); 66 */ 67 } 68 69 $py=1; 70 $pn=1; 71 for($i=1;$i<count($test)-1;$i++){ 72 $py *= $array_yes[$i]; 73 $pn *= $array_no[$i]; 74 } 75 76 $py *= $p_yes; 77 $pn *= $p_no; 78 79 if($py>$pn)return $flagsyes; 80 else return $flagsno; 81 82 /* print_r($py."<br>"); 83 print_r($pn."<br>"); 84 */ 85 86 } 87 //-------------------------------------------------------------------- 88 89 $train = getFileContent("train.txt"); 90 $test = getFileContent("test.txt"); 91 92 for($i=1;$i<count($test);$i++) 93 { 94 $test[$i][count($test[0])-1] = NaiveBayes($test[$i],$train,Y,N); 95 } 96 97 /* 98 *将数组中的内容读到.txt中 99 */ 100 //-------------------------------------------------------------------- 101 $fp= fopen('result.txt','wb'); 102 for($i=0;$i<count($test);$i++) 103 { 104 $temp = NULL; 105 for($j=0;$j<count($test[$i]);$j++) 106 { 107 $temp = $test[$i][$j]."\t"; 108 fwrite($fp,$temp); 109 } 110 fwrite($fp,"\r\n"); 111 } 112 fclose($fp); 113 //-------------------------------------------------------------------- 114 115 /* 116 *打印输出 117 */ 118 //-------------------------------------------------------------------- 119 echo "<pre>"; 120 print_r($test); 121 echo "</pre>"; 122 //-------------------------------------------------------------------- 123 ?>