婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP實現機器學習之樸素貝葉斯算法詳解

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

熱門標簽:全國各省地圖標注點 400電話申請辦理 隨州銷售電銷機器人公司 福建高頻外呼防封系統哪家好 網絡電話400申請 外呼系統人工客服 百度地圖標注類型是酒店 周口網絡回撥外呼系統 商丘外呼系統好處

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

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

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

起步

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

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

class Classifier
{
 public function guess($statement)
 {}
}

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

class Type
{
 const POSITIVE = 'positive';
 const NEGATIVE = 'negative';
}

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

樸素貝葉斯

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

語句 類型
Symfony is the best Positive
PhpStorm is great Positive
Iltar complains a lot Negative
No Symfony is bad Negative


如果給定語句是“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上,https://github.com/yannickl88/blog-articles/blob/master/src/machine-learning-naive-bayes/Classifier.php

github上完整php代碼如下:

?php
class 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 => 0];
 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"

結束語

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

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

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

更多關于PHP相關內容感興趣的讀者可查看本站專題:《PHP數據結構與算法教程》、《php程序設計算法總結》、《php字符串(string)用法總結》、《PHP數組(Array)操作技巧大全》、《PHP常用遍歷算法與技巧總結》及《PHP數學運算技巧總結》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • python中文分詞教程之前向最大正向匹配算法詳解
  • PHP實現的字符串匹配算法示例【sunday算法】
  • 基于PHP實現棧數據結構和括號匹配算法示例
  • php中最簡單的字符串匹配算法
  • PHP基于二分法實現數組查找功能示例【循環與遞歸算法】
  • PHP基于回溯算法解決n皇后問題的方法示例
  • PHP實現找出數組中出現次數超過數組長度一半的數字算法示例
  • php 二維數組快速排序算法的實現代碼
  • PHP實現的貪婪算法實例
  • PHP實現的折半查詢算法示例
  • PHP實現的最大正向匹配算法示例

標簽:六安 迪慶 樂山 定西 十堰 海南 佛山 南寧

巨人網絡通訊聲明:本文標題《PHP實現機器學習之樸素貝葉斯算法詳解》,本文關鍵詞  PHP,實現,機器,學,習之,樸素,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP實現機器學習之樸素貝葉斯算法詳解》相關的同類信息!
  • 本頁收集關于PHP實現機器學習之樸素貝葉斯算法詳解的相關信息資訊供網民參考!
  • 推薦文章

    上一篇:PHP中利用Telegram的接口實現免費的消息通知功能

    下一篇:PHP實現單鏈表翻轉操作示例

    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲伊人伊色伊影伊综合网| 色婷婷综合视频在线观看| 亚洲444eee在线观看| 国产麻豆午夜三级精品| 91精品在线免费观看| 日本一区二区在线不卡| 韩国精品免费视频| 亚洲欧洲日韩在线| 另类小说视频一区二区| 欧美在线观看你懂的| 国产欧美日韩在线| 视频一区二区三区中文字幕| 欧美视频一区二区在线观看| 亚洲激情一二三区| 国产精品入口麻豆九色| 成av人片一区二区| 中文字幕第一页久久| 成人精品小蝌蚪| 亚洲视频在线观看三级| 国产精品理伦片| www.日韩在线| 国产欧美日韩精品在线| 国产乱码字幕精品高清av | 欧美日韩在线免费视频| 日韩高清不卡一区二区| 久久精品国产久精国产爱| 国产精品资源在线| 亚洲人123区| 久久色在线视频| 色8久久人人97超碰香蕉987| 亚洲成av人片一区二区梦乃| 91精品国产综合久久蜜臀 | 国产老女人精品毛片久久| 亚洲色图欧美激情| 日韩欧美精品三级| 高清不卡一区二区在线| 亚洲精品第一国产综合野| 51午夜精品国产| 91福利在线播放| 另类人妖一区二区av| 精品久久国产老人久久综合| 国产精品久久久久久一区二区三区 | 亚洲欧洲日产国产综合网| 免费亚洲电影在线| 色综合天天综合色综合av| 久久综合九色综合97婷婷| 亚洲自拍偷拍九九九| 久久免费国产精品| 麻豆视频观看网址久久| 色丁香久综合在线久综合在线观看| 91丨porny丨蝌蚪视频| 国内精品免费在线观看| 日韩激情一区二区| 欧美一区二区不卡视频| 国产精品乱码一区二区三区软件| 国产永久精品大片wwwapp| 制服视频三区第一页精品| 亚洲国产精品久久一线不卡| 在线看不卡av| 亚洲已满18点击进入久久| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 久久综合av免费| 国产一区 二区| 国产女人水真多18毛片18精品视频| 国产成人亚洲综合a∨婷婷| 欧美日韩国产bt| 日韩av中文字幕一区二区三区| 6080国产精品一区二区| 狠狠色综合日日| 国产精品久久久久永久免费观看 | 久久综合视频网| 久久精品国产99久久6| 精品国产3级a| 亚洲国产精品尤物yw在线观看| 日韩电影免费在线看| 日韩欧美一区在线| 另类人妖一区二区av| 国产欧美一区二区精品性| 91免费国产在线| 日韩av一区二| 久久色.com| 色呦呦网站一区| 五月天国产精品| 欧美一区二区三区白人| 国产精品18久久久久| 亚洲精品乱码久久久久久久久| 日韩一区二区在线播放| 久久成人av少妇免费| 国产精品三级视频| 欧美美女网站色| 成人高清视频在线| 日本不卡的三区四区五区| 欧美日韩午夜在线| 国产成人综合在线播放| 国产欧美视频一区二区| 欧美在线观看禁18| 国产精品996| 午夜一区二区三区视频| 日本一区二区三区免费乱视频| 色婷婷av一区二区三区大白胸 | 不卡av在线免费观看| 色综合久久66| 国产精品传媒入口麻豆| 8v天堂国产在线一区二区| 九九九精品视频| 亚洲午夜久久久| 欧美激情一区二区| 国产在线精品一区二区不卡了| 懂色av一区二区三区免费观看| 日本免费在线视频不卡一不卡二| 国产日韩欧美综合在线| 91精品国产麻豆| 欧美无人高清视频在线观看| 岛国精品在线观看| 狠狠色丁香久久婷婷综合_中| 91精品国产综合久久小美女| 一本久久a久久精品亚洲| 国产精品小仙女| 国产精品乡下勾搭老头1| 久久99最新地址| 午夜精品123| 亚洲精品中文在线观看| 国产精品狼人久久影院观看方式| 欧美日韩一区视频| 风流少妇一区二区| 国产激情一区二区三区桃花岛亚洲| 日韩综合小视频| 日韩区在线观看| 成人国产在线观看| a亚洲天堂av| 国产成人av电影| 国产一区二区在线影院| 亚洲女同ⅹxx女同tv| 国产精品素人视频| 久久亚洲精华国产精华液| 欧美日韩中文字幕一区二区| 91视频com| 国产成人免费在线| 欧美成va人片在线观看| 欧美日韩亚洲国产综合| 欧美日韩国产综合一区二区| 欧美视频在线播放| 3atv一区二区三区| 日韩欧美精品三级| 国产色产综合产在线视频| 久久久久久夜精品精品免费| 欧美国产一区二区在线观看| 国产人成亚洲第一网站在线播放 | 久久电影网电视剧免费观看| 综合中文字幕亚洲| 综合中文字幕亚洲| 亚洲国产精品久久一线不卡| 亚洲国产综合色| 天堂在线一区二区| 91国产免费观看| 欧洲亚洲精品在线| 精品一区精品二区高清| 韩国一区二区在线观看| 99视频一区二区| 欧美日韩视频一区二区| 日韩欧美亚洲另类制服综合在线| 久久一留热品黄| 亚洲午夜一区二区三区| 国产精品一区二区三区乱码| 色综合一区二区三区| 日韩视频国产视频| 宅男在线国产精品| 日韩欧美黄色影院| 91精品国产全国免费观看| 国产精品第一页第二页第三页| 久久精品亚洲精品国产欧美| 成人一级视频在线观看| 欧美日本精品一区二区三区| 欧美精品一区在线观看| 一区二区三区资源| 精品亚洲成a人| 在线视频国产一区| 久久久久久免费网| 日韩 欧美一区二区三区| caoporn国产精品| 欧美mv日韩mv国产网站| 亚洲日韩欧美一区二区在线| 亚洲国产精品t66y| 中文天堂在线一区| 亚洲一级片在线观看| 首页国产欧美日韩丝袜| 美女看a上一区| 日韩亚洲国产中文字幕欧美| 久久久久久亚洲综合影院红桃| 亚洲欧美偷拍另类a∨色屁股| 亚洲成va人在线观看| 国产一区二区女| 欧美三级在线播放| 91精品综合久久久久久| 天天综合网 天天综合色| 久久se精品一区精品二区| 欧美性一级生活| 亚洲综合色区另类av| 懂色av一区二区夜夜嗨| 欧美国产视频在线|