matlab中Boosting算法的代码是什么?

matlab中Boosting算法的代码是什么?,第1张

先看这个结构里面的这些函数都是干什么用的戚漏逗,prob,概率。[1:keep],这里应该能大概看出来keep是整数,1:keep等价于1:1:keep,比如1:10,就是1,2,3,4,5,6,7,8,9,10。步长为1,从1到keep.右上角的',这个符号,表示转置,比如1:10,是一个1行10列的矩阵,通过转置变成10行一列。其中,sum([1:keep]),表示对这个矩阵(从1到keep求和),但是这个语句prob=flipud([1:keep]'/sum([1:keep]))里面总高卖觉得缺少了一个.。prob=flipud([1:keep]'./sum([1:keep]))这样看来应该才能运行,我没尝试,在commandwindow里面直接做是可以的,但是在脚本文件里面做,可能会报错。这个和矩阵运算有关,暂且放在这里。然后到外部,这样我们知道了在第一行flipud()函数体里面,实际上是在用1到keep的每一个数搜举,除以1到keep的和值,得到一个长度为keep的矩阵。值得注意的是,这个矩阵的和值为1,在下面会用到这一点。然后flipud()函数的作用,是把矩阵倒置,比如[1,3,4,5],使用flipud()之后变成[5,4,3,1]。注意,这个 *** 作和sort()函数不同,这个只是把以前的顺序倒置,并不排序。从这里大概可以看出来,其实这个keep的值,等于chromosomes,染色体数量。这样,对于不同的染色体,配对概率就不一样了。从这里可以看出来,染色体配对概率应该是第一条最高,然后依次递减。然后计算或然率,cumsum(),进行累加求和,比如matlab中给出的例子,我们用[1,2,3]也可以写作1:3,来说,cumsum之后的结果是[1,3,6],也就是从第一个开始加和,一直加到这一项。这一点,非常类似高斯函数积分的感觉。用来计算概率cumulativedistribution。然后odd变量,把0加在了cumsum结果的前面,比如刚刚的例子[0cumsum([1,2,3])],就变成了[0,1,3,6]。注意这个地方他又转置了一次,因为在第一行计算prob的时候,他把一个行向量,转换成了列向量,然后现在要把0加在头上,所以在进行cumsun()运算的时候,又把结果从列向量转换成了行向量。仅从这两行代码里面,就大概只能看出这个意思了。不过简单一说,现在看不出来这个遗传算法的核心是什么样的,一般的神经网络里面只有连锁交换定律的应用,一般没有基因分离定律的应用。看这个样子,这是分离出来然后自由配对的做法,应该是比较高端的东西吧。

function [ rbf ] = RankBoost( X,Y,D,T )

%RankBoost implemetation of RankBoost algoritm

% Input:

% X - train set.

% Y - train labels.

% D - distribution function over X times X, it the form of 2D matrix.

% T - number of iteration of the boosting.

% Output:

% rbf - Ranking Function.

rbf = RankBoostFunc(T)

% w - the current distribution in any iteration, initilize to D

w = D

for t=1:T

tic

fprintf('RankBoost: creating the function, iteration %d out of %d\n',t,T)

WL = getBestWeakLearner(X,Y,w)

rbf.addWeakLearner(WL,t)

rbf.addAlpha(WL.alpha,t)

alpha=WL.alpha

%update the distribution

%eval the weak learnler on the set of X and Y

h=WL.eval(X)

[hlen, ~] = size(h)

% tmph = (repmat(h,1,hlen) - repmat(h',hlen,1))

% w=w.*exp(tmph.*alpha)

[rows, cols] = size(w)

sumw = 0

for r=1:rows

for c=1:cols

w(r,c) = w(r,c)*exp((h(r)-h(c))*alpha)

sumw = sumw + w(r,c)

end

end

%normalize w

% w = w./sum(w(:))

w = w./sumw

toc

end

end


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12224402.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存