概率空间中的监督分类与文档分类方法探索
立即解锁
发布时间: 2025-09-03 02:07:25 阅读量: 574 订阅数: 36 AIGC 

### 概率空间中的监督分类与文档分类方法探索
#### 1. 监督分类概述
在文档分类中,监督分类方法具有重要地位。这里主要聚焦于统计方法中的似然比方法。该方法通过不同类别依赖的统计模型来估计给定文档的概率,并利用这些概率的比率确定文档最可能所属的类别。
#### 2. 似然比框架
对于一个给定数据集划分为两个互斥类别A和B的情况,根据贝叶斯规则,给定观察文档D时每个类别的发生概率可表示为:
- \(p(A|D) = p(D|A)× p(A)/p(D)\) (11.32a)
- \(p(B|D) = p(D|B)× p(B)/p(D)\) (11.32b)
两式相除可得:
\(p(A|D)/p(B|D) = p(D|A)/p(D|B)× p(A)/p(B)\) (11.33)
此结果为二元分类提供了简单准则:若\(p(A|D)/p(B|D)>1\),文档D最可能属于类别A;若\(p(A|D)/p(B|D)<1\),则属于类别B。为评估该概率比是否大于或小于1,可考虑(11.33)式右边的对数:
\(\log(p(D|A)/p(D|B)) + \log(p(A)/p(B))\) (11.34)
进一步推导,似然比分类准则可重述为:
- \(D ← A\) if \([\log(p(D|A))–\log(p(D|B))] > ζ\) (11.35a)
- \(D ← B\) if \([\log(p(D|A))–\log(p(D|B))] < ζ\) (11.35b)
其中,\(ζ\)是先验比率倒数\(p(B)/p(A)\)的对数,\(p(D|A)\)和\(p(D|B)\)分别是基于类别A和B的统计模型对文档D的概率估计。在实际应用中,使用属于类别A和B的训练数据样本分别训练预定义统计模型的参数,然后用这些模型估计\(p(D|A)\)和\(p(D|B)\)。对于\(ζ\),虽然可以从训练数据估计\(p(A)\)和\(p(B)\),但通常在开发集上搜索其最优值。
#### 3. 实验操作步骤
##### 3.1 数据准备
首先,清理工作区,重置随机变量生成器,并加载数据集:
```matlab
clear; rng('default'); load datasets
```
##### 3.2 计算LDA模型
设定主题数量为25,为每个书籍类别计算一个LDA模型:
```matlab
ntopics=25; % sets the number of topics
for k = 1:nbooks % computes an LDA model for each book category
counts = encode(trnbow,trndocs(trnlbls==books(k)));
models(k) = fitlda(counts,ntopics,'Verbose',0);
end
```
由于实验涉及三个类别,需处理多类别场景。这里采用将其转化为三个二元分类问题的简单方法:《雾都孤儿》与非《雾都孤儿》、《堂吉诃德》与非《堂吉诃德》、《傲慢与偏见》与非《傲慢与偏见》。
##### 3.3 计算概率估计和似然比
在开发集上进行操作:
```matlab
logprobs = zeros(length(devdocs),nbooks);
for n=1:ndev % iterates over the samples in the development set
counts = encode(trnbow,devdocs(n));
for k=1:nbooks % iterates over the LDA models
logprobs(n,k) = logp(models(k),counts);
end
end
for n=1:size(logprobs,1)
loglirat(n,1) = logprobs(n,1)-(logprobs(n,2)+logprobs(n,3))/2;
loglirat(n,2) = logprobs(n,2)-(logprobs(n,1)+logprobs(n,3))/2;
loglirat(n,3) = logprobs(n,3)-(logprobs(n,1)+logprobs(n,2))/2;
end
```
##### 3.4 搜索最优\(ζ\)值
通过一次改变一个\(ζ\)值(从 -100 到 100),同时保持其他两个值为零,生成准确率曲线:
```matlab
zeta = -100:100;
acc = zeros(length(zeta),nbooks);
for k=1:length(zeta)
% assigns categories to samples in the development set
[~,tmp1] = max((loglirat+repmat([zeta(k) 0 0],ndev,1))');
[~,tmp2] = max((loglirat+repmat([0 zeta(k) 0],ndev,1))');
[~,tmp3] = max((loglirat+repmat([0 0 zeta(k)],ndev,1))');
% computes the classification accuracies over the development set
correct = [sum(devlbls==books(tmp1)'),...
sum(devlbls==books(tmp2)'),sum(devlbls==books(tmp3)')];
acc(k,:) = correct/ndev*100;
end
```
从生成的准确率曲线可知,当三个参数分别独立变化时,在区间\(0<ζ1<20\),\(-20<ζ2<20\),\(-30<ζ3<0\)观察到最高分类准确率。
进一步在该区域内计算所有整数组合的准确率:
```matlab
zeta1 = 0:20; zeta2 = -20:20; zeta3 = -30:0;
ncases = length(zeta1)*length(zeta2)*length(zeta3);
index = 0; acc = zeros(ncases,1); zeta = zeros(ncases,nbooks);
for k=1:length(zeta1)
for n=1:length(zeta2)
for j=1:length(zeta3)
index = index+1;
zeta(index,:) = [zeta1(k),zeta2(n),zeta3(j)];
zeta_mtx = repmat(zeta(index,:),ndev,1);
[~,temp] = max((loglirat+zeta_mtx)');
acc(index) = sum(devlbls==books(temp)')/ndev*100;
end
end
end
[maxacc,index] = max(acc)
optzeta = zeta(index,:)
```
通过调整\(ζ\)参数,准确率从之前的96.5%提高到了99%,但最优参数集并非唯一。
##### 3.5 在测试集上应用似然比分类算法
``
0
0
复制全文
相关推荐










