国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

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

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教程

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
jlzzjlzz欧美大全| 国产羞羞视频在线播放| 亚洲一区免费在线| 麻豆精品免费视频入口| 91欧洲在线视精品在亚洲| 欧美精品se| 在线观看精品一区二区三区| 天天操人人干| 青青草视频在线免费观看| 国产福利片在线| 国产香蕉在线| 国产理论电影在线| 免费av不卡在线观看| 亚洲综合在线网| 国产成人精品实拍在线| 国产黄a三级三级三级av在线看 | 97国产在线| 国产图片综合| 天堂在线亚洲| 91福利在线免费| 国产一级片在线播放| 国产深夜福利| 国产夫妻视频| 在线播放av网站| 日本电影全部在线观看网站视频 | 成网站在线观看人免费| 好看的中文字幕在线播放| 国产永久免费高清在线观看| 美女av在线播放| 国产卡1卡2卡三卡在线| 中文字幕中文字幕在线中高清免费版| 丁香综合在线| 精品视频麻豆入口| 日本电影在线观看| 国产视频三区| 99热播在线观看| 一级二级三级在线观看| 牛牛热在线视频| 天天操人人干| av网址在线免费观看| 国产字幕在线看| 97福利电影| 噜噜噜噜噜在线视频| 国产精品一区二区三区视频网站| 最近最好的中文字幕2019免费| 国产视频1区| gogogogo高清视频在线| 国产精品外围在线观看| av首页在线| 国产亚洲精品拍拍拍拍拍| www.狠狠操| 国产激情二区| 国产乱妇乱子在线播视频播放网站 | www555久久| √天堂8资源中文在线| 在线免费日韩| 国产精品视频一区麻豆| 可以免费看污视频的网站| 国产网友自拍电影在线| 久久五月精品| 免费看ww视频网站入口| 91欧洲在线视精品在亚洲| 国产尤物视频| 国产在线更新| 毛片网站在线观看| a中文在线播放| 四虎成人精品在永久在线观看| 中文字幕专区| 99视频免费| 国精一区二区三区| 欧美日韩久久中文字幕| 免费不卡中文字幕视频 | 国产美女视频一区二区三区| 亚洲精品在线视频免费| 四虎a级欧美在线观看| 在线国产一区二区三区| 在线三级av| 日本三级视频网站| 老师我好爽再深一点的视频| 另类专区欧美| 国产乱子伦三级在线播放| 中文字幕不卡| 中文av在线播放| av中文资源在线| 免费看的毛片| 最新中文字幕在线视频| 国产精品剧情一区二区三区| 国产精品视频一区二区久久| 国产高清视频在线播放| 亚洲视频精品在线观看| 国产中文在线观看| 国产调教视频在线观看| 精精国产xxxx视频在线动漫| 超碰91在线| 国产素人视频在线观看| 中文在线观看视频| 国产在线更新| av在线资源网| 国产女王在线**视频 | 懂色av一区| 亚洲激情丁香| 交换国产精品视频一区| 91精品专区| 超碰在线人人| av超碰在线| 国产精选在线观看| 怡红院av在线| 国产精品扒开做爽爽爽的视频| 四虎成人免费| 国产超碰在线| 国产亚洲精品自在线观看| 在线视频观看亚洲| 国产区在线看| 久久久久久国产视频| 97影院秋霞午夜在线观看| 四虎影院成人| 在线国产小视频| 国产素人视频在线观看| 国产美女视频一区二区三区| 亚洲精品国自产拍在线观看| 精品成人一区二区三区免费视频| 国产免费av网站| 国产在线观看av| 欧美xxxxx性| 欧美人成在线观看网站高清| 中文在线视频| av在线日韩国产精品| 在线观看精品一区二区三区| 国产福利微拍精品一区二区| 国产高清免费视频| 国产传媒在线播放| 国产91久久久久| 精品免费视频一卡2卡三卡4卡不卡| 福利在线视频导航| 99热在线免费播放| 国产精品入口免费麻豆| 国产黄色高清在线| 18激情网站| 欧美日韩亚洲国内综合网| www狠狠操| 欧美性猛交xxxxbbbb| 久色视频在线观看| 国产在线观看av| 国产欧美日韩第一页| 精品亚洲成a人片在线观看| 精品视频vs精品视频| 992tv在线观看在线播放| 亚洲综合在线免费| 狠狠插狠狠操| 国产精品伦理一区二区三区 | 欧美精品se| √天堂资源地址在线官网| 天堂在线免费视频| 国产夫妻视频| 超碰免费在线| 91在线网址| 国产美女自拍视频| 中文在线视频| 国产精品臀控福利在线观看| 精品视频一区二区观看| 国产在线一区二区视频| 国产99re66在线视频| 日本三级在线视频| 国产视频97| 久久五月精品| 天海翼中文字幕| 国产精品二线| 国内精品不卡| 99精品老司机免费视频| 天天操人人爽| 久热久精久品这里在线观看| 中文字幕av免费| 综合激情亚洲| 国产免费网址| 国产在线资源| 免费久久网站| av日韩在线免费| 中文字幕亚洲精品视频| 久久99亚洲网美利坚合众国| 亚洲综合在线不卡| 777电影在线观看| 国产精品毛片一区二区三区四区 | 九九热视频在线观看| av在线网页| 伊人影院蕉久影院在线播放| 国产视频2区| 国产三级视频在线| 国产一二区视频| 中文字幕人成高视频| 二人午夜免费观看在线视频| 日韩在线天堂| 老鸭窝av在线| 国产精品亚洲色图| 中文字幕人成高视频| 国产精品冒白浆免费视频| 国产高清免费av在线| 伊人永久在线| www.99av| 午夜不卡视频| 国产导航在线|