辅助正念 / 朴素贝叶斯
朴素贝叶斯分类器算法
0.0.7
2024-05-10 23:18 UTC
Requires
- php: ^8.1
- brick/math: ^0.9.3|^0.11|^0.12
- illuminate/support: ^9.0|^10.0|^11.0
Requires (Dev)
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^9.5.14|^10
- symfony/var-dumper: ^6.0
README
朴素贝叶斯通过查看训练集并基于该集进行猜测来工作。它使用简单的统计和一些数学来计算结果。
我能用它做什么?
您可以使用它将任何文本内容分类到任意一组类别中。例如
- 一封电子邮件是垃圾邮件还是非垃圾邮件?
- 一篇新闻文章是关于技术、政治还是体育?
- 一段文字表达的是积极情绪还是消极情绪?
安装
您可以使用Composer包管理器将朴素贝叶斯安装到您的项目中
composer require assisted-mindfulness/naive-bayes
学习
在算法能做任何事情之前,它需要一个包含历史信息的训练集。为了教会您的分类器文本属于哪个类别,请调用learn
方法
$classifier = new Classifier(); $classifier ->learn('I love sunny days', 'positive') ->learn('I hate rain', 'negative');
猜测
在训练了分类器之后,您可以使用对传输文本所属类别的预测,例如
$classifier->most('is a sunny days'); // positive $classifier->most('there will be rain'); // negative
为了使您能够输入更多类似的信息,您可以使用
$classifier->guess('is a sunny days'); /* items: array:2 [ "positive" => 0.0064 "negative" => 0.0039062 ] */
不均衡
当训练集中包含不均衡的数据(并非有意为之,而是由于数据不足)时,您可以通过启用一个“不均衡”模式来均衡文档类型概率的计算。
$classifier ->uneven() ->guess('is a sunny days');
分词器
该算法利用分词器将文本分割成单词。默认情况下,它通过空格分割文本,并包括长度超过3个符号的单词。您也可以使用以下示例定义您自己的自定义分词器
$classifier = new Classifier(); $classifier->setTokenizer(function (string $string) { return Str::of($string) ->lower() ->matchAll('/[[:alpha:]]+/u') ->filter(fn (string $word) => Str::length($word) > 3); });
总结
这就是全部内容!即使是一个非常小的训练集,算法也能返回一些相当不错的结果。例如,朴素贝叶斯已被证明在情感分析中给出相当不错的结果。
此外,朴素贝叶斯不仅可以应用于文本。如果您有其他方式来计算指标的几率,您也可以将其插入其中,效果同样不错。
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。