遥感之特征选择-禁忌搜索算法

2024-06-02 20:20

本文主要是介绍遥感之特征选择-禁忌搜索算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

各类智能优化算法其主要区别在于算法的运行规则不同,比如常用的遗传算法,其规则就是变异,交叉和选择等,各种不同的变体大多是在框架内的实现细节不同,而本文中的禁忌算法也是如此,其算法框架如下进行介绍。
智能优化算法和其他算法的最大不同在于,其没有太高深的数学理论和公式,主要是基于一种设定规则运行,其规则的设置背后有优美的哲学味道,所以它能有效解决一些问题,而同时不少人对比表示怀疑的态度,只有当真正的跑一遍代码,看看效果,才能对背后的思想有所领悟。
一言以蔽之,智能优化算法,是简洁,优美和有效的。

禁忌搜索算法(Tabu Search,TS)是一种基于局部搜索的启发式算法,它通过记录搜索历史和禁止重复访问已访问过的局部最优解,来跳出局部最优,从而找到全局最优解。它模仿了人类行为中的“记忆”和“遗忘”机制,是一种简单而有效的全局优化方法。

禁忌搜索算法的原理

禁忌搜索算法的核心思想是“禁止重复”和“记忆”。它通过以下方式实现:
禁忌表:记录最近访问过的局部最优解或其状态,以及相应的禁忌长度。
搜索方向:在当前解的邻域中搜索候选解,并根据评价函数选择最好的解。
禁忌更新:将当前解或其状态添加到禁忌表中,并设置禁忌长度。
禁忌解除:当候选解被禁忌时,根据特赦规则决定是否允许访问该解。
搜索终止:达到最大迭代次数或找到全局最优解时,算法终止。
禁忌搜索算法的步骤
初始化:设置初始解,并计算其目标函数值。
搜索:在当前解的邻域中搜索候选解,并根据评价函数选择最好的解。
更新禁忌表:将当前解或其状态添加到禁忌表中,并设置禁忌长度。
禁忌解除:如果候选解被禁忌,则根据特赦规则决定是否允许访问该解。
搜索终止:达到最大迭代次数或找到全局最优解时,算法终止。
其算法流程图如下所示;
在这里插入图片描述

禁忌搜索算法的优缺点

优点:

  • 跳出局部最优:通过禁忌表和特赦规则,能够有效跳出局部最优,寻找全局最优解。
  • 全局搜索能力:具有全局搜索能力,能够搜索整个解空间。
  • 易于实现:算法结构简单,易于实现。
  • 参数选择灵活:禁忌表大小、禁忌长度、特赦规则等参数可以根据问题进行调整。
    缺点:
  • 计算复杂度:禁忌表需要存储搜索历史,可能会增加计算复杂度。
  • 参数选择困难:参数选择对算法性能影响较大,需要根据问题进行调整。
  • 无法保证找到全局最优解:虽然能够有效跳出局部最优,但无法保证找到全局最优解。

代码

在遥感高光谱领域中会经常遇到波段选择的问题,基于此,利用禁忌搜索算法完成特征选择的案例,代码可以直接运行。
代码中对于上述提到的步骤的每个环节只是用简单的方式进行实现,比如初始化这步,在实际中通常对高光谱波段之间的相关性进行研究,划分不同的,在每个块中选择一些波段作为初始化的解,以及对于候选解是如何选择的,是否需要进一步根据经验设定规则等,在实际中需要在此代码基础上进一步完善即可。

import numpy as np
import random
class TabuSearchFeatureSelection:'''代码说明:1. `TabuSearchFeatureSelection` 类定义了禁忌搜索算法,包括初始化、适应度函数、获取邻居、更新禁忌表、选择最佳邻居和选择特征等方法。2. `initialize_population` 方法初始化当前特征集为所有特征。3. `get_neighbors` 方法获取当前特征的邻居,包括删除一个特征和添加一个特征两种情况。4. `update_tabu_list` 方法更新禁忌表,将特征集添加到禁忌表。5. `select_best_neighbor` 方法从邻居中选择最佳特征集,优先选择不在禁忌表中的特征集,并选择适应度值最高的特征集。6. `select_features` 方法进行特征选择,循环迭代更新当前特征集,直到没有更好的邻居或达到最大迭代次数。7. `best_features` 和 `best_score` 分别存储最佳特征集和最佳得分。'''def __init__(self, n_iterations, tabu_size, feature_set, data, labels, model):"""禁忌搜索算法初始化:param n_iterations: 迭代次数:param tabu_size: 禁忌表大小:param feature_set: 特征集:param data: 数据集:param labels: 标签:param model: 机器学习模型"""self.n_iterations = n_iterationsself.tabu_size = tabu_sizeself.feature_set = feature_setself.data = dataself.labels = labelsself.model = modelself.best_score = float('-inf')self.best_features = Noneself.tabu_list = []def fitness(self, features):"""适应度函数,计算模型在当前特征集上的性能:param features: 当前特征集:return: 适应度值"""X_train = self.data[:, features]clf = self.model.fit(X_train, self.labels)score = clf.score(X_train, self.labels)return scoredef get_neighbors(self, features):"""获取当前特征的邻居:param features: 当前特征集:return: 邻居特征集列表"""neighbors = []for i in range(len(self.feature_set)):if i in features:new_features = np.array(features)new_features = np.delete(new_features, np.where(new_features == i)[0][0])neighbors.append(new_features)else:new_features = np.array(features)new_features = np.append(new_features, i)neighbors.append(new_features)return neighborsdef update_tabu_list(self, features):"""更新禁忌表"""# 将特征集添加到禁忌表if len(self.tabu_list) >= self.tabu_size:self.tabu_list.pop(0)self.tabu_list.append(tuple(features))def select_best_neighbor(self, neighbors):"""从邻居中选择最佳特征集:param neighbors: 邻居特征集列表:return: 最佳特征集"""best_score = float('-inf')best_features = Nonefor neighbor in neighbors:if tuple(neighbor) in self.tabu_list:continuescore = self.fitness(neighbor)if score > best_score:best_score = scorebest_features = neighborreturn best_featuresdef select_features(self):"""选择特征"""# 初始化当前特征集current_features = np.arange(self.data.shape[1])for _ in range(self.n_iterations):# 获取邻居neighbors = self.get_neighbors(current_features)# 选择最佳邻居best_neighbor = self.select_best_neighbor(neighbors)# 如果没有更好的邻居,则终止搜索if best_neighbor is None:break# 更新当前特征集current_features = best_neighbor# 更新禁忌表self.update_tabu_list(current_features)# 更新最佳解if self.fitness(current_features) > self.best_score:self.best_score = self.fitness(current_features)self.best_features = current_featuresreturn self.best_features, self.best_score
# 示例用法
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
# 加载数据集
data = load_iris().data
labels = load_iris().target
# 初始化模型
model = LogisticRegression(solver='newton-cg')
# 初始化禁忌搜索算法
tabu_search = TabuSearchFeatureSelection(n_iterations=2, tabu_size=1, feature_set=np.arange(data.shape[1]), data=data, labels=labels, model=model)
# 选择特征
best_features, best_score = tabu_search.select_features()
print("最佳特征:", best_features)
print("最佳得分:", best_score)

总结

此类算法,了解其规则即可,在规则之内可以扩展展开。

欢迎关注专栏:智能优化算法专栏

欢迎点赞,收藏,关注,支持小生,打造一个好的遥感领域知识分享专栏。
同时欢迎私信咨询讨论学习,咨询讨论的方向不限于:地物分类/语义分割(如水体,云,建筑物,耕地,冬小麦等各种地物类型的提取),变化检测,夜光遥感数据处理,目标检测,图像处理(几何矫正,辐射矫正(大气校正),图像去噪等),遥感时空融合,定量遥感(土壤盐渍化/水质参数反演/气溶胶反演/森林参数(生物量,植被覆盖度,植被生产力等)/地表温度/地表反射率等反演)以及高光谱数据处理等领域以及深度学习,机器学习等技术算法讨论,以及相关实验指导/论文指导等多方面。

这篇关于遥感之特征选择-禁忌搜索算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1024990

相关文章

重磅!2024年最新影响因子(生态学/林学/土壤学/遥感/微生物/环境科学/植物科学) 收藏版!

2024年最新影响因子正式揭晓!2024年6月20日,Clarivate Analytics(科睿唯安)发布了各大SCI期刊的2023年影响因子。从最新结果看,今年的影响因子继续“普跌”,其中顶刊Nature和Science均有下降,分别至50.5和44.7。 我们公众号《生态学者》特地从中选取生态学、林学、土壤学、遥感、微生物学、环境科学及植物科学领域的杂志最新影响因子(均为公众号常推送内容相

解锁空间数据奥秘:ArcGIS Pro与Python双剑合璧,处理表格数据、矢量数据、栅格数据、点云数据、GPS数据、多维数据以及遥感云平台数据等

ArcGISPro提供了用户友好的图形界面,适合初学者快速上手进行数据处理和分析。它拥有丰富的工具和功能,支持各种数据格式的处理和分析,适用于各种规模的数据处理任务。ArcGISPro在地理信息系统(GIS)领域拥有广泛的应用,被广泛用于政府、企业和科研机构中。Python结合ArcPy库,可以编写脚本实现数据处理自动化,极大地提高了处理效率和可扩展性。Python拥有丰富的库和工具,支持数据科学

【机器学习】Lasso回归:稀疏建模与特征选择的艺术

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Lasso回归:稀疏建模与特征选择的艺术引言一、Lasso回归简介1.1 基本概念1.2 数学表达式 二、算法与实现2.1 解决方案2.2 Python实现示例 三、Lasso回归的优势与特性3.1

一个可以进行机器学习特征选择的python工具

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶” 作者:Will Koehrsen 编译:ronghuaiyang 前戏 用这个工具可以高效的构建机器学习工作流程。一起来了解一下这个工具吧。 特征选择是在数据集中寻找和选择最有用的特征的过程,是机器学习pipeline中的一个关键步骤。不必要的特征降低了训练速度,降低了模型的可解释性,最重要的是,降低了测试集的泛化性能。 我发现自

搜索算法工程师如何搜索内容质量算法的研发,通过Query意图理解、多模态内容理解、用户文本和行为数据挖掘挖掘提升数据质量?

搜索内容质量算法的研发是一个复杂且多层次的过程。为了提升搜索结果的质量,需要综合利用Query意图理解、多模态内容理解以及用户文本和行为数据挖掘等技术。这些技术相辅相成,共同作用于提升搜索内容的相关性和用户体验。以下是详细的步骤和策略: 一、Query意图理解 Query意图理解是提升搜索质量的第一步。了解用户的搜索意图,可以更准确地匹配相关内容。 1. 自然语言处理(NLP) 分词与词性

智能优化算法:和声搜索算法-附代码

智能优化算法:和声搜索算法 文章目录 智能优化算法:和声搜索算法1.算法原理2.实验结果3.参考文献4.Matlab代码 摘要:和声搜索(Harmony search,HS)算法是 2001 年韩国学者 Geem Z W 等人提出的一种新颖的智能优化算法 [1] 。算法模拟了音乐创作中乐师们凭借自己的记忆,通过反复调整乐队中各乐器的音调, 最终达到一个美 妙的和声状态的过程。

智能优化算法应用:基于麻雀搜索算法的工程优化案例

智能优化算法应用:基于麻雀搜索算法的工程优化案例 文章目录 智能优化算法应用:基于麻雀搜索算法的工程优化案例1.麻雀搜索算法2.压力容器设计问题3.三杆桁架设计问题4.拉压弹簧设计问题4.Matlab代码 摘要:本文介绍利用麻雀搜索算法,对压力容器设计问题进行智能寻优。 1.麻雀搜索算法 麻雀搜索算法具体原理请参照:https://blog.csdn.net/u01183

智能优化算法:秃鹰搜索算法 -附代码

智能优化算法:秃鹰搜索算法 文章目录 智能优化算法:秃鹰搜索算法1.算法原理1.1 选择搜索空间1.2 搜索空间猎物 (探索)1.3 俯冲捕获猎物 (利用) 2.实验结果3.参考文献4.Matlab代码 摘要:秃鹰搜索 (bald eagle search,BES) 优化是马来西亚学者Alsattar 于2020年提出的一种新型元启发式算法, 该算法具有较强的全局搜索能力, 能够

智能优化算法:共生生物搜索算法 - 附代码

智能优化算法:共生生物搜索算法 文章目录 智能优化算法:共生生物搜索算法1.SOS算法原理1.1 互利阶段1.2 共栖阶段1.3 寄生阶段 2.实验结果3.参考文献4.Matlab代码5.python代码 摘要:共生生物搜索算法(Symbiotic Organisms Search, SOS)于2014年,提出的一种基于生物学中共生现象的启发式搜索算法。该算法具有控制参数少、操作

基于麻雀搜索算法优化的Elman神经网络数据预测 - 附代码

基于麻雀搜索算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于麻雀搜索算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于麻雀搜索优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要:针对Elman神经网络,初始权值阈值盲目随机性的缺点。采用麻雀搜