当前位置: 首页 > news >正文

【maxENT】最大熵模型(Maximum Entropy Model)介绍与使用(maxENT软件)

文章目录

  • 一、模型
    • 1.1 最大熵原理
    • 1.2 模型特点
    • 1.3 熵的定义
    • 1.4 约束条件
    • 1.5 最优化问题
    • 1.6模型求解
      • 1.61 拉格朗日函数
      • 1.62 解的形式
      • 1.63 IIS优化算法
  • 二、软件安装
  • 三、数据准备
    • 3.1 ✅ 物种的点位数据
    • 3.2 ✅环境变量
    • 3.3 注意事项
  • 四、软件使用
  • 五、软件参数

一、模型

🟢 第一节简单看一下就行了,写论文别参考本文,去看文献。后面的内容看仔细点

1.1 最大熵原理

最大熵模型(Maximum Entropy Model)源于信息论中的最大熵原理,由E.T. Jaynes于1957年提出。该原理指出:在已知部分约束条件下,最合理的概率分布是满足这些约束条件下熵最大的分布。这种分布对未知信息不做任何主观假设,保持最大的不确定性。

例如预测天气时,若已知下雨概率为0.3,则晴天概率应设为0.7才能保持最大不确定性,而非主观猜测其他可能性。

1.2 模型特点

  • 特征灵活:允许任意形式的特征函数组合
  • 无偏性:避免引入未经验证的假设
  • 概率输出:直接输出条件概率P(Y|X)
  • 兼容性:可与其他模型联合使用

1.3 熵的定义

对于离散随机变量Y,熵的数学表达式为:
H ( Y ) = − ∑ y P ( y ) log ⁡ P ( y ) H(Y) = -\sum_{y} P(y)\log P(y) H(Y)=yP(y)logP(y)

条件熵表达式:
H ( Y ∣ X ) = − ∑ x , y P ( x ) P ( y ∣ x ) log ⁡ P ( y ∣ x ) H(Y|X) = -\sum_{x,y} P(x)P(y|x)\log P(y|x) H(YX)=x,yP(x)P(yx)logP(yx)

1.4 约束条件

假设有n个特征函数 f i ( x , y ) f_i(x,y) fi(x,y),每个特征对应的期望约束为:
E P ( f i ) = E P ~ ( f i ) E_P(f_i) = E_{\widetilde{P}}(f_i) EP(fi)=EP (fi)

其中:

  • 经验期望: E P ~ ( f i ) = ∑ x , y P ~ ( x , y ) f i ( x , y ) E_{\widetilde{P}}(f_i) = \sum_{x,y} \widetilde{P}(x,y)f_i(x,y) EP (fi)=x,yP (x,y)fi(x,y)
  • 模型期望: E P ( f i ) = ∑ x , y P ~ ( x ) P ( y ∣ x ) f i ( x , y ) E_{P}(f_i) = \sum_{x,y} \widetilde{P}(x)P(y|x)f_i(x,y) EP(fi)=x,yP (x)P(yx)fi(x,y)

1.5 最优化问题

建立约束最优化模型:
max ⁡ P ∈ C H ( P ) = − ∑ x , y P ~ ( x ) P ( y ∣ x ) log ⁡ P ( y ∣ x ) \max_{P \in \mathcal{C}} H(P) = -\sum_{x,y} \widetilde{P}(x)P(y|x)\log P(y|x) PCmaxH(P)=x,yP (x)P(yx)logP(yx)
s . t . E P ( f i ) = E P ~ ( f i ) i = 1 , 2 , . . . , n s.t.\quad E_P(f_i) = E_{\widetilde{P}}(f_i) \quad i=1,2,...,n s.t.EP(fi)=EP (fi)i=1,2,...,n
∑ y P ( y ∣ x ) = 1 \sum_y P(y|x) = 1 yP(yx)=1

1.6模型求解

1.61 拉格朗日函数

引入拉格朗日乘子 λ i \lambda_i λi,构造:
L ( P , λ ) = − H ( P ) + ∑ i = 1 n λ i ( E P ( f i ) − E P ~ ( f i ) ) + λ 0 ( ∑ y P ( y ∣ x ) − 1 ) L(P,\lambda) = -H(P) + \sum_{i=1}^n \lambda_i(E_P(f_i) - E_{\widetilde{P}}(f_i)) + \lambda_0(\sum_y P(y|x)-1) L(P,λ)=H(P)+i=1nλi(EP(fi)EP (fi))+λ0(yP(yx)1)

1.62 解的形式

通过变分法求得最优解:
P λ ( y ∣ x ) = 1 Z λ ( x ) exp ⁡ ( ∑ i = 1 n λ i f i ( x , y ) ) P_\lambda(y|x) = \frac{1}{Z_\lambda(x)}\exp\left(\sum_{i=1}^n \lambda_i f_i(x,y)\right) Pλ(yx)=Zλ(x)1exp(i=1nλifi(x,y))

其中归一化因子:
Z λ ( x ) = ∑ y exp ⁡ ( ∑ i = 1 n λ i f i ( x , y ) ) Z_\lambda(x) = \sum_y \exp\left(\sum_{i=1}^n \lambda_i f_i(x,y)\right) Zλ(x)=yexp(i=1nλifi(x,y))

1.63 IIS优化算法

改进的迭代缩放算法步骤:

  1. 初始化 λ i = 0 \lambda_i=0 λi=0
  2. 对每个特征 f i f_i fi
    • 计算 δ i \delta_i δi使下界函数最大
    • 更新 λ i ← λ i + δ i \lambda_i \leftarrow \lambda_i + \delta_i λiλi+δi
  3. 重复直到收敛

更新公式推导:
δ i = 1 C log ⁡ E P ~ ( f i ) E P ( f i ) \delta_i = \frac{1}{C}\log \frac{E_{\widetilde{P}}(f_i)}{E_P(f_i)} δi=C1logEP(fi)EP (fi)
其中 C C C是特征总数

二、软件安装

(1)Java安装

maxENT软件是java编写的,所以先安装java环境。

链接:https://www.java.com/en/download/manual.jsp

下载安装即可:第三个即可(其它也行)
在这里插入图片描述

java被Oracle收购了的,所以去Oracle下载安装也是一样的。

安装后命令行输入java看看有没有输出:这个安装应该是不用手动添加环境变量的。
在这里插入图片描述


(2)maxENT软件安装

链接:https://biodiversityinformatics.amnh.org/open_source/maxent/

选择不提供信息直接下载即可
在这里插入图片描述

下载后解压即可,不用安装。

三、数据准备

3.1 ✅ 物种的点位数据

数据结构:三列:物种名称、经度、纬度

列名应该没有限制,安装这个顺序就行了,比如我是:species、x、y。

网站:https://www.gbif.org/

这个算是民间数据了,大多来自iNaturallist这些网站。你也可以使用你自己实地考察获得的点位数据。

搜索物种名称,结果右边:xxx occurrences ,就是出现的点位。
在这里插入图片描述
点进去选择下载:
在这里插入图片描述

一般选择第一个即可:
在这里插入图片描述

下载的CSV文件是空格分隔的CSV文件:右键用记事本打开显示的好看一点,excel可能不太容易看。

比如我用notepad ++ 打开:数据有几十列呢

在这里插入图片描述

一般只要几列即可,比如:species、 decimalLatitude、decimalLongitude、year就够了(maxENT只要前面3个)。

我用matlab提取的,参考代码:

clear
clc

%% 10列是物种,16列是国家2字母代码,22,23列是纬度、经度,33列是年份

% data = readtable('源文件\藏羚羊.csv',VariableNamingRule='preserve');
% data = data(:,[16,22,23,33]);
% data = data(strcmp(data.countryCode,'CN'),:);
% data = rmmissing(data);
% fprintf('藏羚羊:%d个有效数据.\n',length(data.countryCode));
% writetable(data,'藏羚羊点位.csv');

%%

% 设置路径和文件参数
sourceDir = '源文件';       % 原始数据文件夹
outputDir = './';           % 输出文件夹
targetColumns = [10,16, 22, 23, 33]; % 需保留的列索引
countryFilter = 'CN';       % 筛选的国家代码

% 获取所有CSV文件列表
fileList = dir(fullfile(sourceDir, '*.csv'));

% 遍历处理每个文件
for i = 1:length(fileList)
    % 跳过已处理的“点位”文件(避免重复处理)
    if contains(fileList(i).name, '点位'), continue; end
    
    % 读取数据
    filePath = fullfile(sourceDir, fileList(i).name);
    data = readtable(filePath, 'VariableNamingRule', 'preserve');
    
    % 检查列索引是否合法
    if max(targetColumns) > width(data)
        fprintf('文件 %s 列数不足,跳过处理.\n', fileList(i).name);
        continue;
    end
    
    % 选择指定列
    data = data(:, targetColumns);
    
    % 筛选国家代码(列名为'countryCode'if ~any(strcmp(data.Properties.VariableNames, 'countryCode'))
        fprintf('文件 %s 缺少 countryCode 列,跳过处理.\n', fileList(i).name);
        continue;
    end
    data = data(strcmp(data.countryCode, countryFilter), :);
    
    % 删除缺失值
    data = rmmissing(data);
    
    % 年份降序
    data = sortrows(data,"year","descend");
    
    % 去掉国家代码
    data = data(:,[1,3,4,5]);

    % 生成输出文件名
    [~, baseName, ~] = fileparts(fileList(i).name);
    outputFile = fullfile(outputDir, [baseName '_点位.csv']);
    
    % 保存结果
    writetable(data, outputFile);
    fprintf('文件 %s 处理完成,有效数据量: %d\n', fileList(i).name, height(data));
end
disp('全部文件处理完毕!');


数据的坐标是十进制的,这是ok的。如果你的数据的经纬度是度分秒这种,需要自己转换为十进制。自己问AI写两行代码就行了。

3.2 ✅环境变量

即影响物种分布的相关环境变量,如:气温、降水、高程、坡度、到水源距离等等。

自己找吧,比如:

国家地球系统科学数据中心:www.geodata.cn
资源环境科学数据平台:www.resdc.cn
国家生态科学数据中心:https://www.nesdc.org.cn/

也可以TB买,但是要注意它数据的来源、年份,因为你论文要写数据来源的。

有的数据可以Google搜英文名称:在zenodo、figshare上可能会搜到。

搜数据注意:地点、年份、分辨率

如:中国30米年最大NDVI数据集


最后这些数据栅格的参数要一致:分辨率、坐标系、行列数

我用的是ArcGIS Pro。

行列数一致可以使用:复制栅格,关键设置捕捉栅格和范围,这样就可以与参考的那个栅格完全对齐了。

ArcGIS 有个SDM工具箱:http://www.sdmtoolbox.org/,可以按文件夹批量处理栅格。


3.3 注意事项

另外要注意的是:maxENT需要使用ASCII格式的环境数据,即栅格转ASCII。 ArcGIS的工具箱和SDM Tool都有这个功能。

ASCII格式的文件体积会变大非常多,1GB变成5GB这种。

所以要注意你的栅格的数据类型,最好用整型存储。小数的话可以乘以10000(4位小数的经度)保存为整型。

这个不展开了,数据类型是基础知识。

如果你给你的栅格添加了投影坐标系,那你的点位数据的经纬度也要转为投影的坐标,而不是地理坐标系的经纬度坐标。

四、软件使用

解压maxENT后,会看到:

  • maxent.bat
  • maxent.jar
  • maxent.sh

这三个都可以启动软件。

Windows通常使用bat启动即可。

右键以任意文本编辑器打开bat脚本:可以看到

java -mx512m -jar maxent.jar
@if errorlevel 1 pause

512m就是java虚拟机可以使用的最大内存,你可以改的大一些。

然后双击bat或者jar即可打开软件。

如果你安装了shell终端比如git的,也可以使用那个shell脚本运行软件。

前面说了:maxENT使用的环境变量是ASCII格式的,文件很大,如果你使用的是高分辨率的栅格,如30米,那ASCII格式的文件可能会达到几十GB、几百GB,我猜你的电脑内存是没那么大的,程序运行不了的。

如果你的栅格是1km这种很低的分辨率应该不会有这种困惑。

这时候可以使用R语言实现maxENT模型,支持栅格输入,分块处理。后面写文章,在我主页搜索即可。

五、软件参数

在这里插入图片描述

左边是物种的csv文件,可以把多种物种放在一个csv文件里面,3列:species,经度,纬度。(列名应该没有要求,我是species,x, y)

右边是环境的ascii文件的文件夹,土地利用是分类变量。

Output Folder是输出文件的保存位置。

下面是AI识别图片给出的解释,不全部正确,参考一下即可。


🔹软件其它选项:

主页:

  • 特征类型(左下):线性(Linear)、二次项(Quadratic)、乘积项(Product)、阈值(Threshold)、片段(Hinge),这里使用的是自动选择。
  • Create response curves:创建响应曲线。选中此选项后,软件会生成响应曲线,以展示不同环境变量对物种分布的影响。
  • Make pictures of predictions:生成预测结果的图片。选中此选项后,软件会生成预测结果的可视化图片,方便查看和分析。
  • Do jackknife to measure variable importance:使用Jackknife方法测量变量重要性。选中此选项后,软件会使用Jackknife方法来评估各个环境变量对模型预测结果的重要性。
  • Output format:输出格式。选择输出文件的格式,例如Cloglog。
  • Output file type:输出文件类型。选择输出文件的类型,例如asc(ASCII文件)。

settings:

  • Basic

    1. Random seed:随机种子。选中此选项后,每次运行模型时会使用相同的随机种子,确保结果的可重复性。
    2. Give visual warnings:给出视觉警告。选中此选项后,软件会在出现警告时显示视觉提示。
    3. Show tooltips:显示工具提示。选中此选项后,鼠标悬停在界面元素上时会显示工具提示信息。
    4. Ask before overwriting:覆盖前询问。选中此选项后,软件在覆盖现有文件前会询问用户确认。
    5. Skip if output exists:如果输出存在则跳过。选中此选项后,如果输出文件已经存在,软件会自动跳过该文件的生成。
    6. Remove duplicate presence records:移除重复的出现记录。选中此选项后,软件会自动移除重复的物种出现记录。
    7. Write clamp grid when projecting:投影时写入夹持网格。选中此选项后,软件在进行投影时会生成夹持网格文件。
    8. Do MESS analysis when projecting:投影时进行MESS分析。选中此选项后,软件在进行投影时会进行MESS(Maxent软件的一种统计分析方法)分析。
    9. Random test percentage:随机测试百分比。设置用于测试的随机样本的百分比。
    10. Regularization multiplier:正则化乘数。设置正则化参数的乘数,用于控制模型的复杂度。
    11. Max number of background points:最大背景点数。设置最大背景点的数量,背景点用于训练模型。
    12. Replicates:重复次数。设置模型运行的重复次数,用于评估模型的稳定性。
    13. Replicated run type:重复运行类型。选择重复运行的类型,例如交叉验证(Crossvalidate)。
    14. Test sample file:测试样本文件。指定用于测试的样本文件。
  • Advanced

    1. Add samples to background:将样本添加到背景数据中。选中此选项后,软件会将样本数据添加到背景数据中,以提高模型的准确性
    2. Add all samples to background:将所有样本添加到背景数据中。选中此选项后,软件会将所有样本数据添加到背景数据中。
    3. Write plot data:写入绘图数据。选中此选项后,软件会生成绘图所需的数据文件。
    4. Extrapolate:外推。选中此选项后,软件会在模型预测时进行外推,以覆盖更多的区域。
    5. Do clamping:进行夹持。选中此选项后,软件会在模型预测时进行夹持,以限制预测值的范围。
    6. Write output grids:写入输出网格。选中此选项后,软件会生成输出网格文件。
    7. Write plots:写入绘图。选中此选项后,软件会生成绘图文件。
    8. Append summary results to maxentResults.csv file:将摘要结果追加到maxentResults.csv文件中。选中此选项后,软件会将摘要结果追加到指定的CSV文件中。
    9. Cache ascii files:缓存ASCII文件。选中此选项后,软件会缓存ASCII文件,以提高处理速度。
    10. Maximum iterations:最大迭代次数。设置模型训练的最大迭代次数。
    11. Convergence threshold:收敛阈值。设置模型训练的收敛阈值。
    12. Adjust sample radius:调整样本半径。设置样本半径的调整值。
    13. Log file:日志文件。指定日志文件的名称。
    14. Default prevalence:默认流行率。设置模型训练的默认流行率。
    15. Apply threshold rule:应用阈值规则。选择应用阈值规则的类型。
    16. Bias file:偏差文件。指定偏差文件的名称。
  • Experimental

    1. Logscale raw/cumulative pictures:对原始/累积图片进行对数缩放。选中此选项后,软件会将原始或累积的图片数据进行对数缩放,以便更好地展示数据的分布情况。

    2. Per species results:按物种结果。选中此选项后,软件会为每个物种生成单独的结果文件。

    3. Write background predictions:写入背景预测。选中此选项后,软件会生成背景预测结果文件。

    4. Show exponent in response curves:在响应曲线中显示指数。选中此选项后,软件会在响应曲线中显示指数值,以便于分析变量对物种分布的影响。

    5. Fade by clamping:通过夹持进行淡出。选中此选项后,软件会通过夹持方法对预测结果进行淡出处理。

    6. Verbose:详细模式。选中此选项后,软件会输出详细的运行日志信息。

    7. Use samples with some missing data:使用带有缺失数据的样本。选中此选项后,软件会使用带有缺失数据的样本进行建模。

    8. Threads:线程数。设置软件运行时使用的线程数,增加线程数可以加快计算速度。

    9. Lg to lgp threshold:对数到对数概率阈值。设置对数到对数概率的阈值,用于确定物种分布的概率范围。

    10. Linear to lg threshold:线性到对数阈值。设置线性到对数的阈值,用于确定物种分布的概率范围。

    11. Hinge threshold:铰链阈值。设置铰链阈值,用于确定物种分布的概率范围。

    12. Beta threshold:Beta阈值。设置Beta阈值,用于确定物种分布的概率范围。

    13. Beta categorical:Beta分类。设置Beta分类阈值,用于确定物种分布的概率范围。

    14. Beta lgp:Beta对数概率。设置Beta对数概率阈值,用于确定物种分布的概率范围。

    15. Beta hinge:Beta铰链。设置Beta铰链阈值,用于确定物种分布的概率范围。

    16. Default nodata value:默认无数据值。设置默认的无数据值,用于处理缺失数据。


比如:第三列(最后一张图)那个:Write background predictions选项可以选上,我截图的时候没选择。这个输出数据可以用来自己话ROC曲线。
在这里插入图片描述

相关文章:

  • Python基础语法速通(自用笔记)
  • 01新手村
  • QML布局关于【Row】和【RowLayout】有何异同
  • 游戏引擎学习第223天
  • 解读数据集成建模中的数据模型
  • 蓝桥赛前复习2:一维差分二维差分
  • 讲解贪心算法
  • 顶刊【遥感舰船目标检测】【TGRS】CM-YOLO:基于上下文调制表征学习的船舶检测方法
  • 基于 GoFrame 框架的电子邮件发送实践:优势、特色与经验分享
  • React Redux
  • Docker简介,快速入门
  • OSPF+MGRE的配置练习
  • 1.29G 雨晨 19044.5737 Windows 10 IoT 企业版 LTSC x64 极速版 VIP 7天有效开放体验
  • GPT - 多头注意力机制(Multi-Head Attention)模块
  • AI应用开发平台 和 通用自动化工作流工具 的详细对比,涵盖定义、核心功能、典型工具、适用场景及优缺点分析
  • CTF web入门之文件包含
  • SAP BDC:企业数据管理的新纪元
  • flink部署使用(flink-connector-jdbc)连接达梦数据库并写入读取数据
  • NO.85十六届蓝桥杯备战|动态规划-经典线性DP|最长上升子序列|合唱队形|最长公共子序列|编辑距离(C++)
  • FreeRTOS入门与工程实践-基于STM32F103(一)(单片机程序设计模式,FreeRTOS源码概述,内存管理,任务管理,同步互斥与通信,队列,信号量)
  • 重庆荣昌出圈背后:把网络流量变成经济发展的增量
  • 外交部:习近平主席同普京总统达成许多新的重要共识
  • 纪念|古文字学泰斗裘锡圭:“还有很多事情要做”
  • 上任后首访,德国总理与法国总统举行会晤
  • 湖南张家界警方公告宣布一名外国人居留许可作废
  • 高进华“控股”后首份年报出炉,史丹利账上可动资金大幅缩水