2014-10-02 211 views
0

我想使用朴素贝叶斯分类器对文本进行分类,并且还希望使用k-fold交叉验证来验证分类结果。但是我仍然很困惑如何使用k-fold交叉验证。因为我知道k-fold将数据分成k个子集,所以k个子集中的一个用作测试集,其他k-1个子集合在一起形成一个训练集。而且我认为随着训练集数据必须有标签进行训练。因此,要使用k-fold交叉验证,所需数据是标记数据?是不是?以及未标记数据如何?如何在朴素贝叶斯分类器中使用k-fold交叉验证?

+0

通常,对于任何监督式学习,数据都需要标记。然后,为了评估,数据需要标记。 – 2014-10-02 11:50:15

+0

所以实际上,用于训练的朴素贝叶斯中使用k折叠交叉验证,而不是用于测试? – 2014-10-02 12:15:24

+0

那么你会用k-1子集训练朴素贝叶斯。模型创建完成后,您将使用剩余子集评估模型。该模型将预测一个班级,您可以将此预测结果与校正结果进行比较。 – user 2014-10-02 12:21:03

回答

0

非标记数据,必须使用聚类方法,为NB也许这代码会帮助你:

[testF, trainF] = kfolds(Features,k); 
[testL, trainL] = kfolds(Label,k); 
c = size(Features); 
for i=1:k 
    LabelTrain = trainL{i}; 
    LabelTest = testL{i}; 
    FeaturesTrain = trainF{i}; 
    FeaturesTest = testF{i}; 
    nb = NaiveBayes.fit(FeaturesTrain,LabelTrain); 
    Class = predict(nb,FeaturesTest); 
    predict_Class(i)=sum(Class==LabelTest); 
end 
predict_all = sum(predict_Class)/c(1); 

kfolds功能会分离你的数据到k倍。

欢呼声