亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 邏輯算法 > 正文

PHP實現機器學習之樸素貝葉斯算法詳解

2020-03-22 16:34:14
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP實現機器學習之樸素貝葉斯算法,結合實例形式詳細分析了樸素貝葉斯算法的概念、原理及php實現技巧,需要的朋友可以參考下

本文實例講述了PHP實現機器學習之樸素貝葉斯算法。分享給大家供大家參考,具體如下:

機器學習已經在我們的生活中變得隨處可見了。比如從你在家的時候溫控器開始工作到智能汽車以及我們口袋中的智能手機。機器學習看上去已經無處不在并且是一個非常值得探索的領域。但是什么是機器學習呢?通常來說,機器學習就是讓系統不斷的學習并且對新的問題進行預測。從簡單的預測購物商品到復雜的數字助理預測。

在這篇文章我將會使用樸素貝葉斯算法Clasifier作為一個類來介紹。這是一個簡單易于實施的算法,并且可給出滿意的結果。但是這個算法是需要一點統計學的知識去理解的。在文章的最后部分你可以看到一些實例代碼,甚至自己去嘗試著自己做一下你的機器學習。

起步

那么,這個Classifier是要用來實現什么功能呢?其實它主要是用來判斷給定的語句是積極地還是消極的。比如,“Symfony is the best”是一個積極的語句,“No Symfony is bad”是一個消極的語句。所以在給定了一個語句之后,我想讓這個Classifier在我不給定一個新的規則的情況就返回一個語句類型。

我給Classifier命名了一個相同名稱的類,并且包含一個guess方法。這個方法接受一個語句的輸入,并且會返回這個語句是積極的還是消極的。這個類就像下面這樣:

html' target='_blank'>class Classifier public function guess($statement)}

我更喜歡使用枚舉類型的類而不是字符串作為我的返回值。我將這個枚舉類型的類命名為Type,并且包含兩個常量:一個POSITIVE,一個NEGATIVE。這兩個常量將會當做guess方法的返回值。

class Type const POSITIVE = positive  const NEGATIVE = negative }

初始化工作已經完成,接下來就是要編寫我們的算法進行預測了。

樸素貝葉斯

樸素貝葉斯算法是基于一個訓練集合工作的,根據這個訓練集從而做出相應的預測。這個算法運用了簡單的統計學以及一點數學去進行結果的計算。比如像下面四個文本組成的訓練集合:

語句類型Symfony is the bestPositivePhpStorm is greatPositiveIltar complains a lotNegativeNo Symfony is badNegative


如果給定語句是“Symfony is the best”,那么你可以說這個語句是積極地。你平常也會根據之前學習到的相應知識做出對應的決定,樸素貝葉斯算法也是同樣的道理:它根據之前的訓練集來決定哪一個類型更加相近。

學習

在這個算法正式工作之前,它需要大量的歷史信息作為訓練集。它需要知道兩件事:每一個類型對應的詞產生了多少次和每一個語句對應的類型是什么。我們在實施的時候會將這兩種信息存儲在兩個數組當中。一個數組包含每一類型的詞語統計,另一個數組包含每一個類型的語句統計。所有的其他信息都可以從這兩個數組中聚合。代碼就像下面的一樣:

function learn($statement, $type) $words = $this- getWords($statement); foreach ($words as $word) { if (!isset($this- words[$type][$word])) { $this- words[$type][$word] = 0; $this- words[$type][$word]++; // 增加類型的詞語統計 $this- documents[$type]++; // 增加類型的語句統計}

有了這個集合以后,現在這個算法就可以根據歷史數據接受預測訓練了。

定義

為了解釋這個算法是如何工作的,幾個定義是必要的。首先,讓我們定義一下輸入的語句是給定類型中的一個的概率。這個將會表示為P(Type)。它是以已知類型的數據的類型作為分子,還有整個訓練集的數據數量作為分母來得出的。一個數據就是整個訓練集中的一個。到現在為止,這個方法可以將會命名為totalP,像下面這樣:

function totalP($type) return ($this- documents[$type] + 1) / (array_sum($this- documents) + 1);}

請注意,在這里分子和分母都加了1。這是為了避免分子和分母都為0的情況。

根據上面的訓練集的例子,積極和消極的類型都會得出0.6的概率。每中類型的數據都是2個,一共是4個數據所以就是(2+1)/(4+1)。

第二個要定義的是對于給定的一個詞是屬于哪個確定類型的概率。這個我們定義成P(word,Type)。首先我們要得到一個詞在訓練集中給出確定類型出現的次數,然后用這個結果來除以整個給定類型數據的詞數。這個方法我們定義為p:

function p($word, $type) $count = isset($this- words[$type][$word]) ? $this- words[$type][$word] : 0; return ($count + 1) / (array_sum($this- words[$type]) + 1);}

在本次的訓練集中,“is”的是積極類型的概率為0.375。這個詞在整個積極的數據中的7個詞中占了兩次,所以結果就是(2+1)/(7+1)。

最后,這個算法應該只關心關鍵詞而忽略其他的因素。一個簡單的方法就是將給定的字符串中的單詞分離出來:

function getWords($string) return preg_split( //s+/ , preg_replace( /[^A-Za-z0-9/s]/ , , strtolower($string)));}

準備工作都做好了,開始真正實施我們的計劃吧!

預測

為了預測語句的類型,這個算法應該計算所給定語句的兩個類型的概率。像上面一樣,我們定義一個P(Type,sentence)。得出概率高的類型將會是Classifier類中算法返回的結果。

為了計算P(Type,sentence),算法當中將用到貝葉斯定理。算法像這樣被定義:P(Type,sentence)= P(Type)* P(sentence,Type)/ P(sentence)。這意味著給定語句的類型概率和給定類型語句概率除以語句的概率的結果是相同的。

那么算法在計算每一個相同語句的P(Tyoe,sentence),P(sentence)是保持一樣的。這意味著算法就可以省略其他因素,我們只需要關心最高的概率而不是實際的值。計算就像這樣:P(Type,sentence) = P(Type)* P(sentence,Type)。

最后,為了計算P(sentence,Type),我們可以為語句中的每個詞添加一條鏈式規則。所以在一條語句中如果有n個詞的話,它將會和P(word_1,Type)* P(word_2,Type)* P(word_3,Type)* .....*P(word_n,Type)是一樣的。每一個詞計算結果的概率使用了我們前面看到的定義。

好了,所有的都說完了,是時候在php中實際操作一下了:

function guess($statement) $words = $this- getWords($statement); // 得到單詞 $best_likelihood = 0; $best_type = null; foreach ($this- types as $type) { $likelihood = $this- pTotal($type); //計算 P(Type) foreach ($words as $word) { $likelihood *= $this- p($word, $type); // 計算 P(word, Type) if ($likelihood $best_likelihood) { $best_likelihood = $likelihood; $best_type = $type; return $best_type;}

這就是所有的工作,現在算法可以預測語句的類型了。你要做的就是讓你的算法開始學習:

$classifier = new Classifier();$classifier- learn( Symfony is the best , Type::POSITIVE);$classifier- learn( PhpStorm is great , Type::POSITIVE);$classifier- learn( Iltar complains a lot , Type::NEGATIVE);$classifier- learn( No Symfony is bad , Type::NEGATIVE);var_dump($classifier- guess( Symfony is great // string(8) positive var_dump($classifier- guess( I complain a lot // string(8) negative 

所有的代碼我已經上傳到了GIT上,http://github.com/yannickl88/blog-articles/blob/master/src/machine-learning-naive-bayes/Classifier.php

github上完整php代碼如下:

 ?phpclass Type const POSITIVE = positive  const NEGATIVE = negative class Classifier private $types = [Type::POSITIVE, Type::NEGATIVE]; private $words = [Type::POSITIVE = [], Type::NEGATIVE = []]; private $documents = [Type::POSITIVE = 0, Type::NEGATIVE =  public function guess($statement) $words = $this- getWords($statement); // get the words $best_likelihood = 0; $best_type = null; foreach ($this- types as $type) { $likelihood = $this- pTotal($type); // calculate P(Type) foreach ($words as $word) { $likelihood *= $this- p($word, $type); // calculate P(word, Type) if ($likelihood $best_likelihood) { $best_likelihood = $likelihood; $best_type = $type; return $best_type; public function learn($statement, $type) $words = $this- getWords($statement); foreach ($words as $word) { if (!isset($this- words[$type][$word])) { $this- words[$type][$word] = 0; $this- words[$type][$word]++; // increment the word count for the type $this- documents[$type]++; // increment the document count for the type public function p($word, $type) $count = 0; if (isset($this- words[$type][$word])) { $count = $this- words[$type][$word]; return ($count + 1) / (array_sum($this- words[$type]) + 1); public function pTotal($type) return ($this- documents[$type] + 1) / (array_sum($this- documents) + 1); public function getWords($string) return preg_split( //s+/ , preg_replace( /[^A-Za-z0-9/s]/ , , strtolower($string)));$classifier = new Classifier();$classifier- learn( Symfony is the best , Type::POSITIVE);$classifier- learn( PhpStorm is great , Type::POSITIVE);$classifier- learn( Iltar complains a lot , Type::NEGATIVE);$classifier- learn( No Symfony is bad , Type::NEGATIVE);var_dump($classifier- guess( Symfony is great // string(8) positive var_dump($classifier- guess( I complain a lot // string(8) negative 

結束語

盡管我們只進行了很少的訓練,但是算法還是應該能給出相對精確的結果。在真實環境,你可以讓機器學習成百上千的記錄,這樣就可以給出更精準的結果。你可以下載查看這篇文章(英文):樸素貝葉斯已經被證明可以給出情緒統計的結果。

而且,樸素貝葉斯不僅僅可以運用到文本類的應用。希望通過這篇文章可以拉近你和機器學習的一點點距離。

原文地址:http://stovepipe.systems/post/machine-learning-naive-bayes

您可能感興趣的文章:

PHP實現單鏈表翻轉操作示例講解

PHP實現合并兩個有序數組的方法講解

PHP實現約瑟夫環問題的方法詳解

以上就是PHP實現機器學習之樸素貝葉斯算法詳解的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区第一页| 欧美午夜宅男影院在线观看| 亚洲视频一区二区三区| 亚洲大胆人体在线| 91精品国产高清自在线看超| 欧美亚洲另类视频| 欧美视频不卡中文| 亚洲精品国精品久久99热一| 欧美成人高清视频| 97精品国产97久久久久久免费| 欧美日韩性生活视频| 亚洲欧美精品伊人久久| 欧美性极品xxxx娇小| 69国产精品成人在线播放| 国产精品入口免费视频一| 日韩av一区二区在线观看| 97精品国产97久久久久久春色| 欧美国产第二页| 欧美不卡视频一区发布| 久久精品免费电影| 欧美黄色片在线观看| 日韩精品欧美激情| 久久久久久久久久久免费| 欧洲亚洲女同hd| 国产精品久久久久久久久久尿| 青青久久av北条麻妃海外网| 亚洲免费电影在线观看| 久久视频中文字幕| 精品小视频在线| 国产精品激情av在线播放| 日韩av网址在线观看| 国产精品wwww| 91高潮在线观看| 亚洲人成伊人成综合网久久久| 欧美性高跟鞋xxxxhd| 欧美性猛交xxxx乱大交极品| 国产区亚洲区欧美区| 国产一区二区丝袜高跟鞋图片| 日韩av大片免费看| 欧美精品情趣视频| 91久久精品国产91久久| 日韩综合视频在线观看| 国产精品亚洲第一区| 日韩小视频网址| 国产成人福利网站| 久久久久久国产| 久久久久五月天| 国产精品男女猛烈高潮激情| 欧美区二区三区| 亚洲欧洲美洲在线综合| 奇门遁甲1982国语版免费观看高清| 成人福利网站在线观看| 2020国产精品视频| 亚洲一二三在线| 97**国产露脸精品国产| 亚洲肉体裸体xxxx137| 青青草一区二区| yellow中文字幕久久| 亚洲人成网站999久久久综合| 欧美激情精品久久久久久免费印度| 国产一区二区香蕉| 欧美性高潮床叫视频| 国产精品视频999| 欧美人在线观看| 91精品国产99久久久久久| 国产欧美日韩精品在线观看| 久久久久久亚洲| 国产69精品久久久久9| 国产精品吹潮在线观看| 国产午夜精品视频免费不卡69堂| 国产视频精品xxxx| 国产精品久久久久久久久久小说| 亚洲美女在线观看| 亚洲最大福利视频| 久久久黄色av| 国产成人免费av电影| 久久精品久久久久| 中文字幕亚洲一区二区三区| 精品国产一区二区三区久久久狼| 久久精品视频va| 一区国产精品视频| 国产精品扒开腿做爽爽爽的视频| 亚洲综合成人婷婷小说| 亚洲福利小视频| 欧美日韩中文字幕在线| 九九热这里只有精品6| 高清视频欧美一级| 欧美黑人xxxⅹ高潮交| 欧美日韩色婷婷| 有码中文亚洲精品| 中文字幕国产亚洲| 欧美在线视频网站| 日韩免费在线播放| 国产精品永久免费在线| 青草热久免费精品视频| 国产精品视频中文字幕91| 国产欧美日韩丝袜精品一区| 国产日韩欧美中文| 欧美日韩中文在线| 国产精品av在线| 国产日韩专区在线| 91久久中文字幕| 在线观看国产成人av片| 亚洲成人亚洲激情| 国产精品都在这里| 日本精品久久电影| 亚洲女人被黑人巨大进入| 成人精品久久一区二区三区| 国产精品69精品一区二区三区| 欧美激情精品久久久| 少妇av一区二区三区| 国自在线精品视频| 亚洲国产日韩欧美在线图片| 日韩在线观看免费av| 亚洲欧美综合另类中字| 夜夜嗨av一区二区三区免费区| 国产性猛交xxxx免费看久久| 欧美男插女视频| 国产啪精品视频网站| 国产日韩欧美日韩| 久久免费国产精品1| 亚洲成人三级在线| 精品丝袜一区二区三区| 国产精品入口福利| 亚洲午夜女主播在线直播| 九九九热精品免费视频观看网站| 亚洲激情视频在线| 国产精品久久久久久久天堂| 亚洲高清av在线| 亚洲精品视频久久| 成人妇女淫片aaaa视频| 国产精品扒开腿做| 久久精品国产2020观看福利| 国产亚洲福利一区| 九九精品在线播放| 精品亚洲国产视频| 欧美午夜宅男影院在线观看| 91免费的视频在线播放| 久久久亚洲国产| 亚洲性无码av在线| 日韩成人性视频| 色偷偷91综合久久噜噜| 久久精品免费电影| 亚洲精品一区在线观看香蕉| 国产日韩在线观看av| 欧美激情第1页| 欧美精品福利在线| 亚洲天堂一区二区三区| 成人黄色网免费| 国产精品一区二区三区久久久| 狠狠色狠狠色综合日日小说| 久久久免费高清电视剧观看| 精品久久久久久久久久国产| 久久久伊人日本| 亚洲欧美中文字幕| 亚洲国产日韩欧美在线图片| 亚洲xxxx3d| 国产精品欧美风情| 亚洲精品电影久久久| 欧美一区亚洲一区| 91sao在线观看国产| 日韩激情av在线播放| 久久91亚洲精品中文字幕奶水| 中文字幕9999|