- class Classifier
- {
- public function guess($statement)
- {}
- }
- class Type
- {
- const POSITIVE = 'positive';
- const NEGATIVE = 'negative';
- }
- 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
- }
- function totalP($type)
- {
- return ($this->documents[$type] + 1) / (array_sum($this->documents) + 1);
- }
- function p($word, $type)
- {
- $count = isset($this->words[$type][$word]) ? $this->words[$type][$word] : 0;
- return ($count + 1) / (array_sum($this->words[$type]) + 1);
- }
- function getWords($string)
- {
- return preg_split('/\s+/', preg_replace('/[^A-Za-z0-9\s]/', '', strtolower($string)));
- }
- All set, time to start implementing!
- Guessing
- P(Type, sentence) = P(Type) * P(sentence, Type)
- .
- 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;
- }
- $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"
- Tweet https://twitter.com/intent/tweet
- Share https://www.facebook.com/sharer/sharer.php?u=https://stovepipe.systems/post/machine-learning-naive-bayes&src=sdkpreparse
来源: https://stovepipe.systems/post/machine-learning-naive-bayes