我有一个包含推文的数据库。此外,我将这些推文分类为“否定”,“中性”和“中性”。或者'积极的'。我已经手动完成了这个工作,我现在正试图弄清楚我的电脑能够根据Naive Bayes分类器对其进行分类。
为了测试分类的准确性(计算机分类的推文数量与手动除以总数量相同),编写了一个脚本。
但是我遇到了这个PHP脚本的问题。运行时,它会在C:\ wamp \和-so-on'中将错误“除以零”。这可能是因为计数器未更新。此外,正确的班级数量和#39;似乎也没有更新。这两个部分是必不可少的,因为准确性的公式是:'正确的等级'除以' counter'。
我的问题是:在查看脚本时,您认为问题是什么?我怎么可能修复它?
测试脚本:
$test_array = array();
$counter = 0;
$timer1 = microtime(true);
$right_classes = 0;
foreach ($test_set as $test_item) {
$tweet_id = $test_item['tweet_id'];
$class_id_shouldbe = $test_item['class_id'];
$tweet = Tweets::loadOne($tweet_id);
// # Preprocess if not done already
// $steps->processTweet($tweet_id, $tweet);
// $tweet = Tweets::loadOne($tweet_id);
if ((int) $tweet['classified'] > 0 || !$tweet['valid']) continue;
if (strlen($tweet['processed_text']) == 0) {
$steps->processTweet($tweet_id, $tweet);
$tweet = Tweets::loadOne($tweet_id);
if (strlen($tweet['processed_text']) == 0) {
echo "Kon tweet '$tweet_id' niet processen. <br>";
continue;
}
}
$class_id = $classifier->classify($tweet['processed_text']);
# Add tweets in database
// Tweets::addClassId($tweet_id, $class_id_shouldbe);
$test_array[$tweet_id] = array(
'what_human_said' => $class_id_shouldbe,
'what_classifier_said' => $class_id,
);
if ($class_id_shouldbe == $class_id) $right_classes++;
$counter++;
if ($counter > 936) break;
echo "$tweet_id,$class_id_shouldbe,$class_id<br>";
}
$timer2 = microtime(true);
echo '<br><br>klaar in '.round($timer2-$timer1, 3).' sec<br>';
echo ($right_classes/$counter)*100 .' %';
exit();
答案 0 :(得分:0)
首先修复错误,然后尝试验证$counter
为零的原因。修复$counter
只需在分割前进行验证:
if($counter!=0) echo ($right_classes/$counter)*100 .' %'; else echo '0 %';
然后查看您的代码,您继续使用foreach
中的下一项,然后无法保证达到$counter
,然后您会收到Division by zero
错误。
希望它有所帮助!