基于朴素贝叶斯文本的分类器构造

朴素贝叶斯算法,对于文本分类器是较为适用的。楼主在做项目的时候,有一批url数据需要处理。需要给定url,给出相应的文件类型。

首先要人工贴标签,构造数据集合。数据集合如图所示。

然后,要人工构造dictionary,也就是你认为会影响文件类型的单词,如“儿歌”,“游戏”等,这个地方,是影响模型精度的关键,需要花费很大的功夫不断调试。而且,往往dictionary向量要很大才能获得理想结果。

将数据集合分为训练集,测试集。这里取了8000条做训练集,1000条做测试集。

O1 = fitNaiveBayes(train_data,train_label,'Distribution', 'mn'); 
这句便是利用训练集训练模型。
利用O1.predice()函数,输入相应训练,测试集,便可获得结果。

clear;
clc;
%程序需要改的接口:数据,dictionary,函数的distribution参数
load('typeAll.mat');
load('urlAll.mat');
dictionary=['erge  ';'zuofan';'youxi ';'yizhi ';'wenxue';'shipin';'youxi ';'yinpin';'zuofan';'maoxia';'pintu ';'ertong';'tianse';'zhongw';'gequ  ';'shipin';'donghu';'zhutiq';'yingwe';'gequ  ';'tonghu';'yuyan ';'baike ';'huiben';'gushi ';'FLASH ';'hanzi ';'bihua ';'chengy';'tongya';'changs';'jingwu';'kantu ';'xiaoxu';'kejian';'wenxue';'pinyin';'zimu  ';'hanzi ';'zidian';'duihua';'duwu  ';'tushu ';'fudao ';'minjia';'yingyu';'shuang';'duihua';'duwu  ';'pintu '];%字典词条库,不够的必须用空格补齐
[row,column]=size(dictionary);%row代表字典中有几个单词(特征向量的数量),column代表单词固定长度
%生成100个随机数做训练集
b=randperm(9000);%生成1到100的随机排列
a=b(1:8000);
train_label=typeAll(a);
train_url=urlAll(a);
train_data=zeros(8000,row);%
for i=1:8000
    train_data(i,:)=text2vec(train_url(i),dictionary,6);
end

O1 = fitNaiveBayes(train_data,train_label,'Distribution', 'mn'); 
C1=O1.predict(train_data);
cMat1 = confusionmat(train_label, C1) %自测试准确率:93%

a=b(8001:9000);%取剩下的1000个做测试集
test_label=typeAll(a);%1000*1的胞体
test_url=urlAll(a);%1000*1的胞体
test_data=zeros(1000,row);%
for i=1:1000
    test_data(i,:)=text2vec(test_url(i),dictionary,6);
end
C2=O1.predict(test_data);
cMat2=confusionmat(test_label, C2)




你可能感兴趣的:(matlab,朴素贝叶斯,文本分类器,大数据)