主要内容

随机子空间分类

此示例显示如何使用随机子空间集合来提高分类的准确性。它还展示了如何使用交叉验证来确定弱学习模板和集合的良好参数。

加载数据

加载电离层数据。此数据具有351个二进制响应到34个预测因子。

加载电离层;[n,d] = size(x)
n = 351.
d = 34.
resp =独特(y)
resp =2x1细胞{'b'} {'g'}

选择最近邻居的数量

找到一个不错的选择K.,通过交叉验证,分类器中最近邻居的数量。在对数刻度选择大致均匀间隔的邻居数量。

RNG(8000,'twister'重复性的%k = round(logspace(0,log10(n),10));%邻居数量cvloss =零(numel(k),1);为了k = 1:numel(k)knn = fitcknn(x,y,......'numneighbors',k(k),'横向''在');cvloss(k)= kfoldloss(knn);结尾数字;%绘制精度与ksemilogx(k,cvloss);Xlabel(“最近的邻居数量”);ylabel('10折叠分类错误');标题('K-NN分类');

图包含轴。具有标题K-NN分类的轴包含类型线的对象。

发生最低交叉验证错误k = 2

创建合奏

创建合奏2- 使用各种维度的邻居分类,并检查所得合奏的交叉验证丢失。

这一步需要很长时间。要跟踪进度,请按照每个维度完成,打印邮件。

npredtosample =圆形(Linspace(1,D,10));尺寸的百分比线性间隔cvloss =零(numel(npredtosample),1);学习者= templateknn('numneighbors',2);为了npred = 1:numel(npredtosample)子空间= fitcensemble(x,y,'方法''子空间''学习者',学习者,......'npredtosample',npredtosample(npred),'横向''在');cvloss(npred)= kfoldloss(子空间);fprintf('随机子空间%我完成了。\ n',npred);结尾
随机子空间1完成。随机子空间2完成。随机子空间3完成。随机子空间4完成。随机子空间5完成。随机子空间6完成。随机子空间7完成。随机子空间8完成。随机子空间9完成。随机子空间10完成。
数字;%绘制精度与维度情节(NPREDTOSAMPLE,CVLOSS);Xlabel(“随机选择的预测器数”);ylabel('10折叠分类错误');标题('k-nn分类与随机子空间');

图包含轴。具有随机子空间的标题K-NN分类的轴包含类型线的对象。

每个学习者使用五和八个预测器的合奏都具有最低的交叉验证错误。这些合奏的错误率约为0.06,而另一个集合具有约0.1或更多的交叉验证的错误率。

找到一个很好的合奏大小

在整体中找到最小的学习者,仍然提供良好的分类。

ens = fitcensemble(x,y,'方法''子空间''学习者',学习者,......'npredtosample',5,'横向''在');数字;%在集合中绘制精度与数字情节(Kfoldloss(ex,'模式''累积'))xlabel(“leatleble中的学习者数量”);ylabel('10折叠分类错误');标题('k-nn分类与随机子空间');

图包含轴。具有随机子空间的标题K-NN分类的轴包含类型线的对象。

在拥有超过50左右的学习者的集合中似乎没有任何优势。25人可能会提供良好的预测。

创建一个最终的合奏

建造50名学习者的最终集合。紧凑型合奏,看看压缩版是否可节省可观的内存。

ens = fitcensemble(x,y,'方法''子空间''numlearnicalnycle',50,......'学习者',学习者,'npredtosample'5);CENS = COMPACS(ENS);s1 = whos('ex');s2 = whos('CENS');[s1.bytes s2.bytes]%si.bytes =以字节为单位
ans =.1×21748467 1518820

紧凑的集合比全组合小约10%。两者都给出了相同的预测。

也可以看看

||||

相关话题