最大最小爬山算法的一些总结

据说MMHC是现行的比较成功的一种混合贝叶斯结构学习算法,其主要思想是:先建立一个贝叶斯网络的骨架,再通过贪心算法确定最终结构。那么要搞懂的是以下:

1.框架是如何建立的

2.贪心算法是怎么运行的

3.最大最小体现在哪里?

4.为什么会优于一般的算法?

通过MMHC算法的论文《The max-min hill-climbing Bayesiannetwork

structure learning algorithm》,对以上几个问题,总结一下:

1.贝叶斯框架是通过MMPC算法确定的,这是一种局部挖掘算法。第二步是通过贝叶斯评分,利用爬山搜索确定方位。

 

MMPC:


对以上算法的解释:以上是建立的贝叶斯网络框架,主要过程分两步走。

第一步:前向,填充目标变量T的父子节点表CPC,用最大最小启发式方法,最大最小的意思是,在建立CPC表格时,使得在给定CPC表时,待选节点与目标变量最小联系最大化,于是得到初步CPC表。

第二步,后向,在CPC中,给定其中的变量S,若目标变量T与CPC表中元素X是独立的,则去除X(证明非父子关系)。

 

建立了CPC表后,然后该算法是利用了爬山搜索算法,在缩小了范围的搜索空间里进行搜索。但是缺点是仍然有陷入局部最优的可能。对于此,论文《基于MMHC算法的贝叶斯网络结构学习算法研究》进行了优化,使用了模拟退火,随机重启以及禁忌搜索进行改进,发现效果有所提升。

MMHC的优点:由于是混合式学习方法,很显然,能够集两种典型算法的优点于一身(基于约束的方法,基于搜索评分的方法)。基于约束的方法的缺点是当面临大量的节点是,付出的运算代价很大。而搜索评分的缺点是搜索的空间也是巨大的。当两种方法融合在一起后,建立的基本的联系,然后缩小了搜索的范围,自然比以前的方法更好。问题来了:混合式搜索比较好,有没有其他的混合式方法?或者就在此算法上,是否能够进行进一步的改进,(除了《基于MMHC算法的贝叶斯网络结构学习算法研究》进行的改进)。

一般认为MMHC算法是一种比较成功的结构学习算法,那么在此基础上进行增量的方法呢?进行增量学习的算法,我记得有一篇文章就是提出的iMMHC算法,这个增量算法在下一篇文章中进行总结。

一些思考:其实一直以来都是在找一个合适的增量学习算法,如何减少时间运算,节约存储空间。但是增量学习肯定是基于一般的结构学习的,然后考虑的是新数据增加时如何进行学习。那么考虑哪些算法是可以进行拓展的,或者哪种拓展是最好的。即使有iMMHC,在它的基础上能否进行改进???或者,能否利用新的一些前沿的方法,进行改进和迁移,应用在贝叶斯网络学习上??

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
以下是一个简单的爬山算法的MATLAB代码示例: ```matlab % 定义目标函数(以二维空间为例) targetFunction = @(x, y) x.^2 + y.^2; % 设置初始点 initialPoint = [0, 0]; % 设置步长 stepSize = 0.1; % 迭代次数 maxIterations = 100; % 初始化当前点 currentPoint = initialPoint; % 迭代优化 for i = 1:maxIterations % 计算当前点的目标函数值 currentValue = targetFunction(currentPoint(1), currentPoint(2)); % 计算当前点的邻域内的所有点的目标函数值 neighbors = [ targetFunction(currentPoint(1) + stepSize, currentPoint(2)); targetFunction(currentPoint(1) - stepSize, currentPoint(2)); targetFunction(currentPoint(1), currentPoint(2) + stepSize); targetFunction(currentPoint(1), currentPoint(2) - stepSize) ]; % 找到最小目标函数值对应的点 [minValue, minIndex] = min(neighbors); % 如果邻域内的最小值小于当前值,则更新当前点 if minValue < currentValue if minIndex == 1 currentPoint(1) = currentPoint(1) + stepSize; elseif minIndex == 2 currentPoint(1) = currentPoint(1) - stepSize; elseif minIndex == 3 currentPoint(2) = currentPoint(2) + stepSize; elseif minIndex == 4 currentPoint(2) = currentPoint(2) - stepSize; end else break; % 当邻域内的最小值大于等于当前值时,停止迭代 end end % 输出结果 disp(['最优点:(', num2str(currentPoint(1)), ', ', num2str(currentPoint(2)), ')']); disp(['最小目标函数值:', num2str(targetFunction(currentPoint(1), currentPoint(2)))]); ``` 这个示例中,定义了一个简单的目标函数 `x^2 + y^2`,然后使用爬山算法寻找该目标函数的最小值。算法从一个初始点开始,每次在邻域内选择一个具有最小目标函数值的点进行迭代更新,直到找不到更小的点或达到最大迭代次数为止。最后输出找到的最优点以及对应的最小目标函数值。 注意:这只是一个简单的示例代码,实际应用中可能需要根据具体问题进行修改和优化。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值