我想调整朴素贝叶斯分类器的参数,这些参数根据歌曲歌词来预测艺术家的名字。
要构建模型,我使用create_matrix将歌词转换为数据项矩阵。 如果歌词的列中包含单词,则每个单元格都包含“是”,否则。 该矩阵是模型的输入,艺术家名称是类。 我添加了参数laplace。我从laplace = 0.5开始。 但是我不会如何选择合适的拉普拉斯值,如何解释我的结果并确保分类器是否不能给出哈达德的结果。 另外,我不知道是否有任何其他参数可以调整/改善我的模型。 以下代码显示了用于构建分类器的代码。 数据是一个包含歌词和歌手姓名的数据框
data.dt_matrix<-create_matrix(data$lyrics,ngramLength=1,weighting = tm::weightTfIdf)
data_training<-apply(data.dt_matrix, MARGIN = 2,convert_values)
data_training<-data_training[sample(nrow(data_training)),]
folds<-folds(data$Class, nfolds = 5, stratified=TRUE, seed = 2016)
for(i in 1:5){
#Segement your data by fold using the which() function
testIndexes <- which(folds==i,arr.ind=TRUE)
testData <- data_training[testIndexes, ]
testLables<-data[testIndexes,]
trainLabels<-data[-testIndexes,]
trainData <- data_training[-testIndexes, ]
model <-
naiveBayes(as.matrix(trainData),as.factor(trainLabels$Class),laplace=0.5)
pred<- predict(model, as.matrix(testData))
true.labels<-as.factor(testLables$Class)
mConfusion<-table(true.labels,pred)
acc<-(mConfusion[1,1]+mConfusion[2,2]+mConfusion[3,3])/sum(mConfusion)
TrainErr<-1-acc
print(TrainErr)
AvgTrErr=TrainErr+AvgTrErr
#Use the test and train data partitions however you desire...
}
print (AvgTrErr/5)
5次交叉验证后计算出的训练误差为0.66。