PHP TNTClassifier似然概率分布

时间:2019-02-24 16:25:12

标签: php classification probability

我正在使用TNT搜索文本分类模块, https://github.com/teamtnt/tntsearch,而且效果很好,问题是我不知道如何解释结果-更具体地说是正确匹配的可能性。我已经读过它使用Naive Bayes classifier,但是我无法找到结果是什么样的概率分布。我有自己的小型测试数据集,包含约50个值(50/10 = 5个类别),并且猜测非常正确。

但是,此工具提供的似然数在-15到-25范围内为负数。

问题是,什么价值可以解释为不可信?假设该工具的把握度仅为<33%。什么值对应于此假设?​​

1 个答案:

答案 0 :(得分:1)

我已经与TNTSearch开发人员联系。分类器实际上不返回概率,而是“最高分数”。而且仅是最佳匹配。

根据建议,我对代码进行了一些更改。

在类private string serialRx = string.Empty; private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { serialRx += serialPort1.ReadExisting(); string[] lines = serialRx.Split(new char[] { '$' }, StringSplitOptions.None); for (int i = 0; i < lines.Length - 1; i++) { if (lines[i].StartsWith("GPGSV")) { string[] values = lines[i].Split(new char[] { ',' }); foreach (var value in values) { Invoke(new Action(() => displaySplits(value))); } Invoke(new Action(() => displayReceivedText(lines[i]))); } } } 中,我更改了TeamTNT\TNTSearch\Classifier\TNTClassifier方法中的位(受here启发的softmax函数):

predict

然后可以在public function predict($statement) { $words = $this->tokenizer->tokenize($statement); $best_likelihoods = []; $best_likelihood = -INF; $best_type = ''; foreach ($this->types as $type) { $best_likelihoods[$type] = -INF; $likelihood = log($this->pTotal($type)); // calculate P(Type) $p = 0; foreach ($words as $word) { $word = $this->stemmer->stem($word); $p += log($this->p($word, $type)); } $likelihood += $p; // calculate P(word, Type) if ($likelihood > $best_likelihood) { $best_likelihood = $likelihood; $best_likelihoods[$type] = $likelihood; $best_type = $type; } } return [ 'likelihood' => $best_likelihood, 'likelihoods' => $best_likelihoods, 'probability' => $this->softmax($best_likelihoods), 'label' => $best_type ]; } 中找到百分比概率。