gpt4 book ai didi

ruby - 我需要提高朴素贝叶斯文本分类的准确性

转载 作者:行者123 更新时间:2023-12-05 07:42:25 24 4
gpt4 key购买 nike

我正在使用 Ruby 来实现朴素贝叶斯。我需要将文本归入一个类别(我有 4 个不同的类别)。

我尝试通过多种方式对其进行优化,但似乎都不起作用。我删除了“停用词”,在单词中做了词干分析,参数化等。

我用 170 个文本数据进行了训练。但是当我试图预测一个新文本时,结果往往是错误的。最后,所有 4 个类别的概率都非常相似。

我还能做些什么来提高准确性?

代码如下所示:

require 'nbayes'
require 'csv'
require 'active_support/all'
require 'lingua/stemmer'

def remove_stopwords(list)
stopwords_array = []

CSV.foreach("stopwords.csv") do |row|
stopwords_array << row[0]
end

list - stopwords_array
end

def stemmer_array(list)
stemmer = Lingua::Stemmer.new(:language => "pt")
list.map {|x| stemmer.stem(x)}
end

def prepare_string(text)
list = text.parameterize.split('-')
list = remove_stopwords(list)
stemmer_array(list)
end

nbayes = NBayes::Base.new

CSV.foreach("contacts.csv") do |row|
if row[7] != "{:value=>nil, :label=>nil}"
nbayes.train(prepare_string("#{row[4]} #{row[5]}"), row[7])
end
end

new_text = "TEXT TO PREDICT"

result = nbayes.classify(prepare_string(new_text))

puts "Text: #{new_text}\n\n"

puts "´´´´´´´´´´´´´´´´´´´´´´´"
puts "Prediction: #{result.max_class}\n\n"
puts "´´´´´´´´´´´´´´´´´´´´´´´"

最佳答案

训练文本分类模型的数据集非常少。另外一定要检查目标变量的分布。正如您提到的那样,有 4 个类(class)确保没有类(class)不平衡。例如,如果您有一个类的 100 个数据点和 3 个不同类的剩余数据点,在这种情况下,您的模型将提供此类输出(其中所有预测类都属于 1 个类)。还可以绘制一个混淆矩阵来查看您的模型的实际性能。

关于ruby - 我需要提高朴素贝叶斯文本分类的准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44578914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com