首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在php-ml上使用朴素贝叶斯将新的样本添加到同一个标签中?

如何在php-ml上使用朴素贝叶斯将新的样本添加到同一个标签中?
EN

Stack Overflow用户
提问于 2019-09-15 01:57:05
回答 1查看 673关注 0票数 0

我是文本分类的新手,我试图创建一些概念的证明,以更好地理解使用PHP的ML概念。所以我得到了这个例子,我尝试添加一个新的小文本来“增强”我的标签(类别)之一,在本例中是Japan

代码语言:javascript
复制
<?php
include_once './vendor/autoload.php';
//source: https://www.softnix.co.th/2018/08/19/naive-bays-text-classification-with-php/
use Phpml\Classification\NaiveBayes;
use Phpml\FeatureExtraction\TokenCountVectorizer;
use Phpml\Tokenization\WhitespaceTokenizer;
use Phpml\Tokenization\WordTokenizer;
use Phpml\FeatureExtraction\TfIdfTransformer;

$arr_text = [
    "London bridge is falling down",
    "japan samurai Universal Studio spider man",
    "china beijing",
    "thai Chiangmai",
    "Universal Studio Hollywood",
    "2020 Olympic games"
];
$arr_label = [
    "London","Japan","China","Thailand","USA","Japan"
];

$tokenize = new WordTokenizer();
$vectorizer = new TokenCountVectorizer($tokenize);

$vectorizer->fit($arr_text);
$vocabulary = $vectorizer->getVocabulary();
$arr_transform = $arr_text;
$vectorizer->transform($arr_transform);

$transformer = new TfIdfTransformer($arr_transform);
$transformer->transform($arr_transform);

$classifier = new NaiveBayes();
$classifier->train($arr_transform, $arr_label);

$arr_testset = [
    'Hello Chiangmai I am Siam',
    'I want to go Universal Studio',
    'I want to go Universal Studio because I want to watch spider man',
    'Sonic in 2020'
];

$vectorizer->transform($arr_testset);
$transformer->transform($arr_testset);
$result = $classifier->predict($arr_testset);
var_dump($result);

问题是,在将日本再次添加到一系列标签之后,结果是:

代码语言:javascript
复制
array (size=4)
  0 => string 'Japan' (length=5)
  1 => string 'Japan' (length=5)
  2 => string 'Japan' (length=5)
  3 => string 'Japan' (length=5)

但我期待着:

代码语言:javascript
复制
array (size=4)
  0 => string 'Thailand' (length=8)
  1 => string 'USA' (length=3)
  2 => string 'Japan' (length=5)
  3 => string 'Japan' (length=5)

那么,如何将新的样本添加到同一个标签中呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-20 21:59:48

培训数据集有两个问题:

  1. 它太小了,没有足够的代表性
  2. 与其他标签相比,在培训Japan标签时,您提供了两次以上的数据。

因此,Japan标签的模型被训练成两个句子,它们的单词是完全无关的并且不重复。其他的标签只对一个简短的句子进行了培训。

这导致未装备的 Japan标签模型从培训数据中“学习不够”,无法正确地建模培训数据,也无法推广到新的数据。换句话说,它太笼统了,几乎对任何句子都会触发。Rest标签的模型是超装 --它们将训练数据建模得太好,只触发那些非常接近训练集数据的句子。

因此,Japan标签几乎可以捕捉到任何句子。在标签列表的开头,它会捕捉到所有句子,然后在列表后面的任何标签对一个句子进行评估。当然,您可以在列表的末尾移动Japan标签,但更好的解决方案是--扩大所有标签的培训数据集。

您还可以评估过度贴合的标签模型效果--例如,尝试将“伦敦桥向下”和“伦敦向下”语句添加到测试集中--第一句给你London,第二句给你Japan,因为第一句足够接近London标签的句子训练集,而第二句则不是。

因此,继续以这种方式准确地添加培训集数据,只需使您的培训集足够大和有代表性。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57940564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档