发帖
日期

北太天元在数学建模中的应用

卢朓老师最新分享~一些北太天元在数学建模中的应用案例以及北太天元软件介绍,可以参考

社区小助手 0 0 2024-07-26

北太天元应用案例分享:北太天元做二维金属槽电位函数分布数值计算

卢朓老师《数值方法:原理、算法及应用》课堂 学生大作业~供大家参考学习~

社区小助手 0 0 2024-07-12

北太天元应用案例分享:用向量机做心脏病筛查

数据age,sex,cp,trestbps,chol,fbs,restecg,thalach,exang,oldpeak,slope,ca,thal,target42,1,1,120,295,0,1,162,0,0,2,0,2,148,0,2,130,275,0,1,139,0,0.2,2,0,2,154,1,2,120,258,0,0,147,0,0.4,1,0,3,154,0,2,108,267,0,0,167,0,0,2,0,2,151,0,2,130,256,0,0,149,0,0.5,2,0,2,157,0,0,128,303,0,0,159,0,0,2,1,2,161,1,0,138,166,0,0,125,1,3.6,1,1,2,045,1,0,115,260,0,0,185,0,0,2,0,2,160,0,3,150,240,0,1,171,0,0.9,2,0,2,149,0,0,130,269,0,1,163,0,0,2,0,2,153,1,2,130,246,1,0,173,0,0,2,3,2,154,1,0,140,239,0,1,160,0,1.2,2,0,2,151,1,0,140,298,0,1,122,1,4.2,1,3,3,049,1,2,118,149,0,0,126,0,0.8,2,3,2,058,1,2,105,240,0,0,154,1,0.6,1,0,3,148,1,1,130,245,0,0,180,0,0.2,1,0,2,148,1,0,122,222,0,0,186,0,0,2,0,2,152,1,2,138,223,0,1,169,0,0,2,4,2,154,1,1,192,283,0,0,195,0,0,2,1,3,063,0,0,150,407,0,0,154,0,4,1,3,3,070,1,1,156,245,0,0,143,0,0,2,0,2,1这是一个关于心脏病筛查的数据集片段,每一行代表一个病人的信息。以下是各列字段的解释:age:年龄 - 病人的年龄(以岁为单位)。sex:性别 - 通常为0(女性)或1(男性)。cp:胸痛类型 - 这是一个分类变量,表示胸痛的类型。不同的数字可能代表不同的胸痛类型(例如,0可能表示无胸痛,1、2、3、4可能代表不同类型的胸痛)。trestbps:静息血压 - 病人在静息状态下的血压(单位可能是mmHg)。chol:血清胆固醇 - 病人的血清胆固醇水平(单位可能是mg/dL)。fbs:空腹血糖 - 病人的空腹血糖水平(0可能表示正常,1可能表示高于正常)。restecg:静息心电图结果 - 这可能是一个分类变量,表示静息状态下的心电图结果。thalach:最大心率 - 病人能达到的最大心率(单位可能是次/分钟)。exang:运动诱发的心绞痛 - 0可能表示没有,1可能表示有。oldpeak:ST段下降 - 这是心电图的一个参数,可能表示心肌缺血的程度(单位可能是mV或其他相关单位)。slope:ST段峰值斜率 - 这也是心电图的一个参数,可能与心脏的病理状况有关(例如,1、2、3可能表示不同的斜率类型)。ca:冠状动脉造影的主要血管数量 - 这可能是一个分类变量,表示在冠状动脉造影中检测到的主要血管数量(0可能表示无血管受损,其他数字可能表示受损血管的数量)。thal:缺陷类型 - 这可能是一个分类变量,表示某种心脏缺陷或病理状况的类型。target:目标变量 - 这是我们要预测或分类的变量。通常,1可能表示病人有心脏病,0可能表示没有。下面是北太天元软件的代码, 关于心脏病数据集的多类支持向量机(SVM)分类器的完整实现,包括数据预处理、主成分分析(PCA)降维、交叉验证划分、模型训练和测试、以及结果可视化。下面是对代码的详细解读:导入插件和数据北太天元代码

load_plugin("optimization");
data = readmatrix('heart disease.csv');
load_plugin("optimization"): 加载优化工具箱,用于求解二次规划问题。readmatrix('heart disease.csv'): 读取心脏病数据集。数据预处理北太天元代码
if any(any(ismissing(data)))
    data = rmmissing(data);
end
检查数据中是否有缺失值,并使用rmmissing函数删除包含缺失值的行。分离特征和标签北太天元代码
X = data(:,1:end-1);
y = data(:,end);
将数据集中的最后一列作为标签,其余列作为特征。主成分分析降维北太天元代码
[coeff,score,latent] = pca(X);
X_pca = score(:,1:2);
使用自定义的pca函数对特征进行降维,保留前两个主成分。划分训练集和测试集北太天元代码
cv = my_cvpartition(size(X_pca,1),'HoldOut',0.3);
% ...(省略部分代码)
使用自定义的my_cvpartition函数进行HoldOut交叉验证划分,将数据集分为70%的训练集和30%的测试集。训练SVM模型北太天元代码
SVMModel = my_fitcecoc(X_train,Y_train,C);
使用自定义的my_fitcecoc函数训练多类SVM模型。该函数内部采用一对一(One-vs-One)策略,为每个类别对训练一个SVM分类器。预测测试集并计算准确率北太天元代码
[label,score] = predict(SVMModel,X_test);
accuracy = sum(label-1 == Y_test) / length(Y_test);
使用predict函数对测试集进行预测,并计算准确率。注意这里假设标签是从1开始的,所以计算准确率时需要将预测的标签减1。可视化matlab复制代码
gscatter(X_pca(:,1),X_pca(:,2),y);
% ...(省略绘制决策边界的代码)
使用gscatter函数绘制原始数据点的散点图,并使用轮廓线绘制决策边界。自定义函数解读pca: 实现主成分分析算法,对数据进行降维。my_cvpartition: 自定义的交叉验证划分函数,这里只实现了HoldOut方法。my_fitcecoc: 实现多类SVM分类器的训练,采用一对一策略。my_fitcsvm和my_fitcsvm_soft: 实现硬间隔和软间隔SVM分类器的训练,使用二次规划求解。predict: 对测试集进行预测,并返回预测的标签和得分。predictOneVsAll: 使用单个SVM模型进行预测,并返回预测结果和决策函数的值。注意事项代码中存在一些假设和简化,例如标签从1开始、直接计算决策函数的值作为得分等,这些在实际应用中可能需要根据具体情况进行调整。在使用二次规划求解SVM问题时,需要注意目标函数和约束条件的设置,以确保求解的正确性。可视化部分仅绘制了前两个主成分的散点图和决策边界,对于更高维度的数据可能需要进行其他形式的可视化。下面是全部代码
load_plugin("optimization");
% 导入数据
data = readmatrix('heart disease.csv');
% 检查并处理缺失值
if any(any(ismissing(data)))
    data = rmmissing(data);
end
% 分离特征和标签
X = data(:,1:end-1);
y = data(:,end);
% 主成分分析降维
[coeff,score,latent] = pca(X);
X_pca = score(:,1:2);
% 划分训练集和测试集
cv = my_cvpartition(size(X_pca,1),'HoldOut',0.3);
idx = cv.test;
train_idx = setdiff(1: size(X_pca,1), idx);
X_train = X_pca(train_idx,:);
Y_train = y(train_idx,:);
X_test = X_pca(idx,:);
Y_test = y(idx,:);
% 训练SVM模型
C = 1e2; % 设置较大的C值以确保硬间隔分类(对于线性可分数据)
SVMModel = my_fitcecoc(X_train,Y_train,C);
% 预测测试集
[label,score] = predict(SVMModel,X_test);
% 计算准确率
accuracy = sum(label-1 == Y_test) / length(Y_test);
% 可视化
gscatter(X_pca(:,1),X_pca(:,2),y);
hold on;
% 绘制决策边界c
d = 0.15;
[x1Grid,x2Grid] = meshgrid(min(X_pca(:,1)):d:max(X_pca(:,1)),...
min(X_pca(:,2)):d:max(X_pca(:,2)));
xGrid = [x1Grid(:),x2Grid(:)];
[~,scores] = predict(SVMModel,xGrid);
contour(x1Grid,x2Grid,reshape(scores(:,2),size(x1Grid)),[0 0],'k');
% 输出准确率
fprintf('The accuracy of the SVM model is %.2f%%\n', accuracy * 100);
hold off;
function [coeff, score, latent] = pca(X)
    % X: 数据矩阵,每一列是一个特征,每一行是一个样本
    % coeff: 主成分系数
    % score: 表示主成分得分
    % latent: 主成分对应的特征值
    % 标准化数据(均值为0,方差为1)
    X = (X - mean(X)) ./ std(X);
%    X = (X - mean(X));
    % 计算协方差矩阵
    CovMat = cov(X);
    % 对协方差矩阵进行特征值分解
    [V, D] = eig(CovMat);
    % 将特征值按降序排序,并获取对应的特征向量
    [latent, order] = sort(diag(D), 'descend');
    coeff = V(:, order);
    % 计算主成分得分
    score = X * coeff;
end
function cv = my_cvpartition(n, method, param)
    % n: 总样本数
    % method: 分区方法,目前仅支持 'HoldOut'
    % param: 分区方法的参数,对于 'HoldOut',该参数为留出的比例
    % 初始化输出结构体
    cv = struct('train', [], 'test', []);
    if strcmp(method, 'HoldOut')
        % 生成一个从 1 到 n 的整数数组
        idx = 1:n;
        % 随机打乱 idx 数组
        idx = idx(randperm(n));
        % 计算留出样本的数量
        numHoldOut = floor(n * param);
        % 分配训练和测试索引
        cv.test = idx(1:numHoldOut);
        cv.train = idx(numHoldOut+1:end);
    else
        error('Unsupported partition method.');
    end
end
function SVMModel = my_fitcecoc(X_train, Y_train, C)
    % X_train: 特征矩阵 (n x d),其中 n 是样本数,d 是特征维度
    % Y_train: 标签向量 (n x 1)
    % C: 正则化参数,控制对错分样本的惩罚程度
    % 获取类别数量
    uniqueClasses = unique(Y_train);
    numClasses = length(uniqueClasses);
    % 初始化 SVM 模型结构体数组
    SVMModel = struct('Classifiers', cell(numClasses*(numClasses-1)/2, 1), ...
    'ClassPairs', [], 'ClassPairsIndex', [], 'UniqueClasses', uniqueClasses);
    % 训练一对一 SVM 分类器
    classifierIndex = 1;
    for i = 1:numClasses
        for j = (i+1):numClasses
            % 提取当前类别对的训练数据
            classI = Y_train == uniqueClasses(i);
            classJ = Y_train == uniqueClasses(j);
            X_train_ij = [X_train(classI, :); X_train(classJ, :)];
            Y_train_ij = [ones(sum(classI), 1); -1*ones(sum(classJ), 1)];
            % 训练 SVM 分类器
            SVMModel.Classifiers{classifierIndex} = my_fitcsvm_soft(X_train_ij, Y_train_ij, C);
            % 记录当前分类器对应的类别对
            SVMModel.ClassPairs(classifierIndex, :) = [uniqueClasses(i), uniqueClasses(j)];
            SVMModel.ClassPairsIndex(classifierIndex, :) = [i,j];
            classifierIndex = classifierIndex + 1;
        end
    end
end
function [wb] = my_fitcsvm(X, Y)
    % X: 特征矩阵 (n x d),其中 n 是样本数,d 是特征维度
    % Y: 标签向量 (n x 1),取值为 +1 或 -1
    load_plugin("optimization");
    % 假设X和Y已经定义,如之前的示例
    N = size(X, 1); % 数据点的数量
    D = size(X,2); % 数据的维度
    % 将w和b组合成一个向量,以便使用quadprog
    % 注意:这里我们将w放在前面,b放在最后
    p = rand(D + 1, 1); % 初始猜测解(通常设为0)
    Aeq = []; % 没有等式约束
    beq = [];
    % 构造二次规划的目标函数和线性不等式约束
    H = eye(D+1); % Hessian矩阵(目标函数的二次项系数)
    f = zeros(D+1,1); % 目标函数的一次项系数(对于SVM原始问题,通常为负)
    % 线性不等式约束 Ax <= b
    % 对于每个数据点 (x_i, y_i),我们有 y_i * (w' * x_i + b) >= 1
    A = [-Y.*X, -Y]; % 不等式约束的系数矩阵
    b = -ones(N, 1); % 不等式约束的右侧向量
    % 使用quadprog求解二次规划问题
    options = optimoptions('quadprog','Algorithm','interior-point');
    [w_b, fval, exitflag, output] = quadprog(H, f, A, b, Aeq, beq, [], [], p, options);
    % 分离出w和b
    w = w_b(1:D);
    b = w_b(D+1);
    wb = struct('w',w,'b',b);
end
function [wb] = my_fitcsvm_soft(X, Y, C)
    % X: 特征矩阵 (n x d),其中 n 是样本数,d 是特征维度
    % Y: 标签向量 (n x 1),取值为 +1 或 -1
    % C: 正则化参数,控制对错分样本的惩罚程度
    % 假设X和Y已经定义,如之前的示例
    N = size(X, 1); % 数据点的数量
    D = size(X, 2); % 数据的维度
    % 初始化松弛变量(slack variables)
    xi = zeros(N, 1);
    % 将w和b以及松弛变量组合成一个向量,以便使用quadprog
    p = zeros(D + 1 + N, 1); % 初始猜测解
    % 构造二次规划的目标函数和线性不等式约束
    H = [diag( [ones(1,D),0] ), zeros(D+1, N); zeros(N, D+1), zeros(N,N)]; % Hessian矩阵
    f = [zeros(D+1, 1); C*ones(N, 1)]; % 目标函数的一次项系数
    % 线性不等式约束 Ax <= b
    % 对于每个数据点 (x_i, y_i),我们有 y_i * (w' * x_i + b) >= 1 - xi_i
    A = [-Y.*X, -Y, diag( -ones(1,N) )]; % 不等式约束的系数矩阵
    b = -ones(N, 1); % 不等式约束的右侧向量
    Aeq = []; % 没有等式约束
    beq = [];
    lb = [ -inf*ones(D+1,1); zeros(N,1)];
    ub = inf*ones(D+1+N,1);
    % 使用quadprog求解二次规划问题
    options = optimoptions('quadprog','Algorithm','interior-point');
    [w_b_xi, fval, exitflag, output] = quadprog(H, f, A, b, Aeq, beq, lb, ub, p, options)
    % 分离出w, b和xi
    w = w_b_xi(1:D);
    b = w_b_xi(D+1);
    xi = w_b_xi(D+2:end);
    % 构造并返回结构体wb,包含w和b
    wb = struct('w', w, 'b', b);
end
function [label, score] = predict(SVMModel, X_test)
    % SVMModel: 训练好的多类SVM模型,由my_fitcecoc函数返回
    % X_test: 测试集特征数据
    % label: 预测的类别标签
    % score: 预测的得分(可选,这里简化为投票得分)
    % 初始化预测标签和得分
    [numTest, ~] = size(X_test);
    numClasses = length(SVMModel.Classifiers);
    label = zeros(numTest, 1);
    score = zeros(numTest, numClasses);
    % 对每个测试样本进行预测
    for i = 1:numTest
        sample = X_test(i, :);
        votes = zeros(1, numClasses+1);
        % 使用每个SVM分类器进行预测,并进行投票
        for j = 1:numClasses
            svmModel = SVMModel.Classifiers{j};
            [~, ~, ~, output] = predictOneVsAll(svmModel, sample);
            if output == 1
                classIdx1 = SVMModel.ClassPairsIndex(j, 1);
                votes(classIdx1) = votes(classIdx1) + 1;
            else
                classIdx2 = SVMModel.ClassPairsIndex(j, 2);
                votes(classIdx2) = votes(classIdx2) + 1;
            end
        end
        % 找到得票最多的类别作为预测标签
        [~, maxVoteIdx] = max(votes);
        label(i) = SVMModel.UniqueClasses(maxVoteIdx);
        score(i, maxVoteIdx) = votes(maxVoteIdx); % 将最高票数作为得分
    end
end
function [predictedLabel, predictedScore, decisionValues, output] = predictOneVsAll(svmModel, sample)
    % 使用单个SVM模型进行预测
    % 这里简化为直接计算决策函数的值,实际应用中可能需要更复杂的处理
    w = svmModel.w;
    b = svmModel.b;
    decisionValues = dot(w, sample) + b;
if decisionValues >= 0
        predictedLabel = 1; % 属于正类
    else
        predictedLabel = -1; % 属于负类
    end
    predictedScore = abs(decisionValues); % 决策函数的绝对值作为得分
    output = predictedLabel; % 用于投票的输出
end
处理非连续或非标准化标签处理非连续或非标准化标签(例如,不是从1开始的整数或不是连续整数)是机器学习中的一个常见问题。在我的SVM分类器实现中,为了处理这种情况,我引入了SVMModel.UniqueClasses和SVMModel.ClassPairsIndex两个字段。下面我将详细解释这两个字段的作用以及如何在预测过程中使用它们。SVMModel.UniqueClassesSVMModel.UniqueClasses存储了数据集中所有唯一的类别标签。当训练数据中的标签不是从1开始的连续整数时,这个字段特别有用。例如,如果标签是[-1, 0, 2],那么UniqueClasses就会是[-1, 0, 2]。在训练过程中,这个字段用于记录所有不同的标签,以便在预测时能够正确地将预测的类别索引映射回原始标签。SVMModel.ClassPairsIndexSVMModel.ClassPairsIndex存储了训练一对一SVM分类器时所使用的类别对的索引。由于我们可能不能直接使用原始标签作为索引(尤其是当它们不是从1开始的连续整数时),我们需要一个从1开始的连续整数索引来标识不同的类别。这个索引在训练SVM分类器和投票过程中都是必要的。例如,如果UniqueClasses是[-1, 0, 2],我们可以为这些类别分配一个从1开始的索引:-1对应索引1,0对应索引2,2对应索引3。然后,ClassPairsIndex就会存储这些索引对应的类别对,例如[1, 2]、[1, 3]和[2, 3]。在预测过程中使用这些字段在预测过程中,SVMModel.UniqueClasses和SVMModel.ClassPairsIndex一起使用来确保正确的类别映射。以下是一个简化的流程:对于测试集中的每个样本,使用所有的一对一SVM分类器进行预测。根据每个分类器的预测结果(正类或负类)进行投票。但是,由于我们使用了从1开始的连续整数索引来标识类别,因此投票结果也是基于这些索引的。找到得票最多的索引(例如,索引2)。使用SVMModel.ClassPairsIndex(如果必要的话)和SVMModel.UniqueClasses将得票最多的索引转换回原始标签。在这个例子中,索引2对应UniqueClasses中的第二个元素,即标签0。返回预测的原始标签作为预测结果。通过这种方式,即使训练数据中的标签不是从1开始的连续整数,我的SVM分类器实现也能够正确地预测类别并返回原始标签。软间隔的SVM(支持向量机)算法软间隔的SVM(支持向量机)算法是为了解决线性不可分或存在噪声数据的问题而引入的。在硬间隔SVM中,所有样本都必须被正确地分类,这在实际应用中往往很难满足。软间隔SVM则允许部分样本被错误分类,通过在目标函数中引入一个惩罚项(或称为损失函数)来控制这种错误分类的程度。软间隔SVM的算法可以通过二次规划问题来描述。二次规划问题是一个优化问题,它涉及最小化或最大化一个二次函数,同时满足一组线性不等式约束。在软间隔SVM中,这个二次函数通常与超平面的参数(如权重向量w和偏置项b)有关,而约束条件则与样本点到超平面的距离和分类正确性有关。下面是软间隔SVM二次规划问题的标准形式:灵感来自卢朓老师《数值方法:原理、算法及应用》课堂 学生大作业~学生作业的原代码是用MATLAB写的,以上为卢朓老师修改之后可以在北太天元上运行的代码分享原视频见下方:

社区小助手 0 0 2024-06-27

北太天元应用案例分享:二维喷管流动传热数值解及模拟

卢朓老师《数值方法:原理、算法及应用》课堂 学生大作业~供大家参考学习~

社区小助手 0 0 2024-06-26

北太天元应用案例分享:基于FFT算法的氨基酸序列分类的方法

卢朓老师《数值方法:原理、算法及应用》课堂 学生大作业~供大家参考学习~

社区小助手 0 0 2024-06-25

北太天元应用案例分享:LBP算法和逻辑回归模型基于人脸图像判断男性性取向

卢朓老师《数值方法:原理、算法及应用》课堂 学生大作业~供大家参考学习~

社区小助手 0 0 2024-06-24

北太天元应用案例分享:解高温下特种服装温度分布(18年国赛A题)

卢朓老师《数值方法:原理、算法及应用》课堂 学生大作业~2018年全国大学生数学建模竞赛A题:特种防护服设计供大家参考学习~

社区小助手 0 0 2024-06-21

北太天元应用案例分享:基于英雄选择的 Dota2 对局结果预测

卢朓老师《数值方法:原理、算法及应用》课堂 学生大作业~希望有给到你一些灵感与启发~

社区小助手 0 0 2024-06-21

线性规划如何使用

线性规划建模在哪里找,怎么带入啊

匿名 1 0 2023-09-08

数学建模论文查重和代码查重如何规避?

有没有老师讲一下?

xianjiaozm 1 0 2023-08-24

数模竞赛里广泛应用的算法--聚类分析

一、聚类分析概述1、聚类(Clustering):聚类是一个将数据集划分为若干(class)或类(cluster)的过程,并使得同一个组内的数据对象具有较高的相似度;而不同组中的数据对象是不相似的。相似或不相似是基于数据描述属性的取值来确定的,通常利用各数据对象间的距离来进行表示。聚类分析尤其适合用来探讨样本间的相互关联关系从而对一个样本结构做一个初步的评价。2、聚类与分类的区别聚类是一种无(教师)监督的学习方法。与分类不同,其不依赖于事先确定的数据类别,以及标有数据类别的学习训练样本集合。 因此,聚类是观察式学习,而不是示例式学习。3、什么是好的聚类一个好的聚类方法将产生以下的高聚类:最大化类内的相似性最小化类间的相似性聚类结果的质量依靠所使用度量的相似性和它的执行。聚类方法的质量也可以用它发现一些或所有隐含模式的能力来度量。聚类分析有两种:一种是对样品的分类,称为Q型,一种是对变量(指标)的分类,称为R型。R型聚类分析的主要作用:(1) 不但可以了解个别变量之间的亲疏程度,而且可以了解各个变量组合之间的亲疏程度。(2) 根据变量的分类结果以及它们之间的关系,可以选择主要变量进行Q型聚类分析或回归分析。(R2为选择标准)Q型聚类分析的主要作用:(1) 可以综合利用多个变量的信息对样本进行分析(2) 分类结果直观,聚类谱系图清楚地表现数值分类结果(3) 聚类分析所得到的结果比传统分类方法更细致、全面、合理。二、样品间的相似度量--距离1、常用距离的定义2、相似系数3、类间距离三、谱系聚类算法1、谱系聚类算法的步骤:(1)选择样本间距离的定义及类间距离的定义(2)计算n个样本之间的距离,得到距离矩阵(3)构造个类,每类只含有一个样本(4)合并符合类间距离要求的两类为一个新类(5)计算新类与当前各类的距离。若类的个数为1,则转到步骤6,否则回到步骤4(6)画出聚类图(7)决定类的个数和类四、K-平均聚类算法1、K-平均聚类算法步骤:(1)从n个数据对象任意选择k个对象作为初始聚类中心(2)循环 (3)到 (4)直到每个聚类不再发生变化为止(3)根据每个聚类对象的均值(中心对象 ),计算每个对象与这些中心对象的距离,并根据最小距离重新对相应对象进行划分:(4)重新计算每个(有变化)聚类的均值(中心对象)2、算法的基本思想:(1)首先,随机的选择k个对象,每个对象初始的代表了一个簇的平均值;(2)对剩余的每个对象,根据其与各个簇中心的距离,将它赋给最近的簇;(3)然后重新计算每个簇的平均值。(4)这个过程不断重复,直到准则函数收敛。3、算法的特点:只适用于聚类均值有意义的场合,在某些应用中,如:数据集中包含符号属性时,直接应用k-means算法就有问题。用户必须事先指定k的个数。对噪声和孤立点数据敏感,少量的该类数据能够对聚类均值起到很大的影响。本文转自公众号“数学建模老哥”

社区小助手 0 0 2023-07-28

全网最全数据可视化基本套路总结,这33种常用图形你都知道吗?

本文来源:公众号“生信宝典”数模竞赛的论文里常常会遇到需要数据可视化的情况,因为图表能更直观清晰的表述问题。评阅老师需要在短时间内阅读大量的论文,此时就需要简单易懂且漂亮的图表来抓住老师的眼球。首先从维基百科上搬出数据可视化的概念:数据可视化是关于数据的视觉表现形式的研究;其中,这种数据的视觉表现形式被定义为一种以某种概要形式抽提出来的信息,包括相应信息单位的各种属性和变量。简单来说,数据可视化就是用图形的方式来表征数据的规律。首先要明确几点:1.数据可视化从来不止是表层的东西,数据分析才是核心。就像一个人,不一定长得漂亮人格就高尚,也不一定长得不好看人格就低下。而应该反过来,只有数据分析内涵丰富、价值高,数据可视化才能内容丰富、有价值。2.在一个看脸的世界,只有把数据可视化做得漂亮才更能吸引别人的注意;只有把数据可视化做得简单易懂,他们才能理解数据分析的内涵。3.对于数据可视化,最重要的东西从来不是图形、工具、配色这些套路性的东西,而在于创意和灵感。但创意和灵感的前提,还是要以实用为主,所以掌握套路还是很必要的。本文旨在总结数据可视化基本套路,理解了本文的内容,在此基础上加上自己的创意,数据可视化部分就会变得比较亮眼。熟悉了套路怎么看,再结合专业知识,就可以解释可视化结果了。常用图形散点图散点图用来表征两个(如果多个就分面,如上图)数值型变量间的关系,每个点的位置(即x轴和y轴坐标)映射着两个变量的值。当然对于三个数值型变量,也有三维散点图,不过用得不多。气泡图在散点图的基础上加一个维度,把各个点的面积大小映射一个新的变量,这样不仅点的位置还有大小表示数据特征。折线图把散点图各个散点用折线连接起来就成了折线图,当然不仅仅只是为了好看,当散点越多,折线就越平滑地趋近于曲线,能更加贴切地反映连续型变量的规律。面积图把折线图进一步往坐标轴投影就成了面积图,本质其实跟折线图没区别,只是看起来更加饱满一点。柱状图柱状图是一种用得很广泛的图形,它表征分类型变量 vs 数值型变量的关系。如果分类型变量的每一个取值还能继续分类,那么简单的柱状图就变成了复杂的柱状图,每一个类别仅由一根柱变成多根柱,多根柱可以串列,也可以并列。值得一提的是,柱状图一般需要排序:如果分类型变量是有序的,按照它本身的顺序排列即可;如果分类型变量无序,那么则根据数值型变量的大小进行排序,使柱状图的高度单调变化。(排序的宗旨是直观的表达出想展示的规律)条形图只不过把柱状图坐标旋转一下,竖着的变成横着的,这个可根据版面自由选择。上图示例就是串列的堆叠条形图。南丁格尔玫瑰图本质还是柱状图,只不过把直角坐标系映射成极坐标系。看起来比柱状图更美观。瀑布图瀑布图是柱状图的一种延伸,它一般表示某个指标随时间的涨跌规律,每一个柱状也不都是从0开始的,而是从前一个柱状的终点位置开始,这样既反映了每一个时刻的涨跌情况,也反映了数值指标在每一个时刻的值。饼图饼图的本质仍是柱状图,只不过饼图一般用来表示各个类别的比例,而不是绝对的数值,用角度来映射大小。值得一提的是,因为一个圆饼只有360度,如果类别太多了,这个饼会被切割得非常细,不利于阅读;这种情况下老老实实地用柱状图。圆环图本质就是饼图,只不过把实心圆换成了空心的圆环;如果清一色的饼图太过单调,可以考虑换个环形图。sunburst chartsunburst chart看起来跟饼图比较像,但比饼图更复杂得多。它从中心向外辐射,每辐射一层就细分一层,用来表示多个变量多层之间的比例关系。马赛克图马赛克图比较复杂,与柱状图相比,它的分类变量就多了几个,而且还能实现交叉映射,所以比柱状图更抽象,更细化。马赛克图隐含着大量的数据信息。例如:(1)从船员到头等舱,存活率陡然提高;(2)大部分孩子都处在三等舱和二等舱中;(3)在头等舱中的大部分女性都存活了下来,而三等舱中仅有一半女性存活;(4)船员中女性很少,导致该组的Survived标签重叠(图底部的No和Yes)。继续观察,你将发现更多有趣的信息。关注矩形的相对宽度和高度,你还能发现那晚其他什么秘密吗?扩展的马赛克图添加了颜色和阴影来表示拟合模型的残差值。在本例中,蓝色阴影表明,在假定生存率与船舱等级、性别和年龄层无关的条件下,该类别下的生存率通常超过预期值。红色阴影则含义相反。一定要运行该例子的代码,这样你可以真实感受下着色图形的效果。图形表明,在模型的独立条件下,头等舱女性存活数和男性船员死亡数超过模型预期值。如果存活数与船舱等级、性别和年龄层独立,三等舱男性的存活数比模型预期值低。尝试运行example(mosaic),可以了解更多马赛克图的细节。直方图直方图看起来跟柱状图很像,但其实本质并不一样 (这一点需要注意)。直方图用来表征一个数值型变量的分布,具体来说就是把这个连续型变量划分成多个区间,然后统计各个区间的频数。直方图横轴是数值型变量本身的值,纵轴是频数。概率密度曲线图概率密度曲线图本质与直方图类似,不过纵轴不是频数而是频率。正如折线图和面积图一样,概率密度曲线图也可自由选择要不要面积投影。这个图太学术了,一般出现在数学教材中(比如正态分布……)。雷达图很多游戏中的人物能力极向对比就是以雷达图表示的。柱状图一般是一个分类型变量不同类别间的比较,雷达图可以是多个数值不在同一个scale之下;更具体地说,柱状图一般是横向比较,雷达图既可以多个观测之间的纵向比较,也可以是一个观测在不同变量间的横向比较。值得一提的是,雷达图如果用来横向比较,需先把各个数值变量作归一化处理。箱线图箱线图亦称盒须图,也是挺学术的一个图。它用来表征各个数值型变量的分布状况,每一条横线代表分位数,盒内部的横线代表中位数,点代表异常值。小提琴图小提琴图本质与直方图一样,都是表征数值型变量的分布,每一个小提琴的宽度代表它在该高度处的频率范围。热力图热力图一般以颜色来映射密度或者其他数值变量,一般来说,颜色最深的地方表示数据最集中。(比较常用,对于热图的解释还需要看图例的含义)日历图日历图是热力图的变种,它把每一个矩形重新排列成日历的形状,这样可以方便地观察一段时间内每一天的数值特征。地图地图用来可视化地理数据,这些数据一般由国家地理测绘部门提供,在一些网站上也能找到,常用的数据格式有shp、JSON、csv等。地图的绘制原理是基于大量的散点,勾勒成曲线,再连接成多边形——其中每一块多代形代表一个地区,可以是国家、省、市、区县等。地图的应用主两有种情况:一是如上图一样以颜色填充每一个多边形来映射一个指标,这种情况下地图跟柱状图本质相同,但是多了多边形之间的位置关系;另一种是在地图上叠加散点或者曲线,来表征各个点之间的地理位置。地球图地图是二维的,三维的就是地球图。这种图形一般是交互的,也就是说你可以用鼠标实现地球的旋转和缩放等操作。值得一提的是,不要仅仅为了3D就使用地球图,要看数据本身的情况。如果你的数据范围本来就覆盖全球,用地球图很合适;但如果你的数据范围小,就一个国内,甚至一个省市内的,搞个地球图就太浮夸,而且整个球上只有一个非常小的区域有数据,是很不和谐的。网络图网络图的元素包含点和边,边分为无向边、单向边和双向边来表征点与点的连接关系,边的粗细可以映射这种关系的强弱。arc diagramarc diagram也是一种网络图,只不过它把所有的节点一字排开,以弧线来表示边。这样看起来艺术感更强,适合于节点较多的网络关系可视化。和弦图和弦图一般用来表示双向的网络关系(比如AB两个城市相互流入流出了多少人),数据结构一般为邻接矩阵。当节点很多的时候,各种弧线交叉得就非常密密麻麻,这种情况下,要么交互,要么考虑别的图形。hierarchical edge bundlinghierarchical edge bundling也表示节点间的网络关系,不过它把边扭曲成曲线,这样就适合节点比较多的可视化。矩形树图矩形树图本质就是决策树的可视化,只不过排成矩形。它也是把各个变量层层细分,这一点跟sunburst图类似。当变量比较多的时候,做成交互可缩放的形式更合适。平行坐标图平行坐标图的优点是可以把多个变量并形排开,把每一个记录都以折线连接上。这样当数据量大的时候,其实可以很方便地观察各个变量的分布情况。桑基图桑基图看起来跟平行坐标图有点像,但含义不一样。桑基图主要的用法是表征流量在各个层级的流动关系,上一层如何向下一层分散,下一层如何由下一层汇聚。漏斗图互联网运营有一个很重要的概念就是层级转化,这个每层的转化率用漏斗图来可视化,形神俱佳。如果两层之间的宽度近似,表征该层的转化率高;如果两层之间的宽度一下子减小了很多,表示转化率低。仪表盘仪表盘的观赏性大于实用性,实际上它的功能很简单,就是表征一个数值型变量在最小值和最大值之间的什么分位。象柱形图象柱形图其实就是柱形图,只不过把柱子换成了其它的图形。如果数据本身有比较具体、形象的含义和背景,那么用象柱形图是一种比较新颖的选择。主题河流图主题河流图好看,但不好解释,如果不是交互式的,最好不要用。它一般是把多个类别随时间的变化数据堆叠起来,表征随时间变化的趋势。词云图词云图即是对词汇的频数进行可视化,一个词越大它出现的次数就越多,一般与文本挖掘配合使用。在实际的数据可视化中,往往不是孤立地用一个基本图形,把多个图形组合、邻接,能交叉对比出更多的信息。比如在柱状图上叠加折线图,在地图上叠加散点图,把多个柱状图放在一起对比等等。记住数据可视化展现信息是第一位的,好看倒是其次。图形语法看了以上这么多图形,对可视化图形也有了一个感性的认识。现在粗略地介绍一下图形语法,想学习全面的图形语法还需去专门学习。1.数据(data):数据才是图形的灵魂,这点无需解释。2.几何对象(geom):也就是图形本身,这是可视化的外形。根据数据特征,选择最合适的图形。3.映射(mapping):映射即是把数据和图形给连接起来。映射什么数据变量,它是连续的还是离散的?4.标度(scale):这个是从数据中剥离,但是控制数据如何映射到图形上的属性。图形中用什么通道来映射?常用的有颜色、长度、面积、形状、透明度等通道。5.坐标系(coord):坐标系不一定非得是直角笛卡尔坐标系,比如对于地图并不适合,所以要做专门的投影操作。转换坐标系也有造成不同的视觉效果,比如把柱状图的坐标系转换成极坐标系就变成了玫瑰图。6.统计变换(stat):对数据进行常规的统计操作,不过也可以先把数据处理好,可视化的时候就不再做变换。7.分面(facet):如果图形维度较高,并不是一张图能说明的,那么就分面处理。分面实际上是多加了一个维度,就像一页纸和一页书的区别。8.位置(position):一般来说图形各个元素的位置是由数据决定的,不过在不影响分析的前提下为了视觉美观也可以做一些微调。比如有的散点图只看它在y轴的高度,这个时候就可以在x轴上加扰动,没必要很多点都挤在一起。掌握了图形语法,对理解可视化的本质,构思图形属性很有帮助;只有掌握了图形语法,才能真正自由地去创造数据可视化,而不仅仅只是往模板里套数据。

社区小助手 2 1 2023-06-29

2016-2022年国赛题型及算法模型总结

       以下为近7年的国赛题型和所用到的模型汇总,希望对即将参加2023国赛的小伙伴有所帮助呀!      一、2022年国赛题型及模型      二、2021年国赛题型及模型      三、2020年国赛题型及模型      四、2019年国赛题型及模型      五、2018年国赛题型及模型      六、2017年国赛题型及模型      七、2016年国赛题型及模型      结合2016-2022年国赛的历年赛题和参考模型不难发现,单目标和多目标优化模型、遗传算法、微分方程属于最常出现的几个模型,优化类问题则是每年必出的赛题,解决优化类问题一般常见的模型包括整数规划、线性规划、非线性规划、单目标和多目标规划、遗传算法等等,大家可以针对性的去准备。本文转自公众号“数学建模老哥”

社区小助手 0 2 2023-06-28

一文带你了解到底什么是数学建模

一、数学建模简介数学建模是现代科学和工程技术中不可或缺的一部分。数学建模是一种将现实世界中的问题抽象成数学模型,并利用数学方法求解的过程。它可以帮助我们更好地理解问题的本质,发现问题的规律,并为决策提供依据。在计算机科学领域,数学建模也扮演着重要的角色。二、相关概念和术语介绍数据:指用于建模的实际观测或实验结果。变量:指数据中的一个或多个属性,可以是连续的或离散的。模型:指对现实世界中某个现象的数学描述。它通常由一组方程组成,可以预测未来的结果。算法:指解决问题的一种步骤序列。在数学建模中,算法通常用于求解模型中的方程组。三、数学建模的基本步骤1.确定问题:明确要解决的实际问题,并将其转化为数学模型。2.建立模型:根据问题的性质和特点,选择合适的数学模型,并进行建立。3.求解模型:利用数学方法对模型进行求解,得到问题的解答。4.验证结果:对求解结果进行验证,确保其符合实际情况。在数学建模中,常用的数学工具包括微积分、线性代数、概率论与数理统计等。同时,还需要掌握一些常用的数学建模方法,如优化理论、统计分析等。四、数学建模的方法与技巧1.确定问题类型与范围2.选择合适的数学工具与方法3.数据处理与预处理:在进行数学建模之前,需要对数据进行预处理,包括清洗、转换和归一化等操作。4.模型优化与改进:在完成模型建立之后,需要对模型进行评估。这可以通过比较不同模型的预测结果来实现。5.结果可视化与解释五、数学建模在实际应用中的示例1.交通流量预测(1)基于时间序列分析的交通流量预测模型:该模型通过分析历史交通数据,建立时间序列模型,并利用该模型对未来的交通流量进行预测。这种方法可以用于预测短期内的交通流量变化,如节假日、天气变化等。(2)基于神经网络的交通流量预测模型:该模型利用神经网络对大量的交通数据进行学习,从而建立一个能够自动学习和预测未来交通流量的模型。这种方法可以用于预测长期内的交通流量变化,如城市扩张、道路建设等。(3)基于灰色系统理论的交通流量预测模型:该模型利用灰色系统理论对复杂的交通数据进行分析和建模,从而预测未来的交通流量。这种方法可以用于处理多种因素对交通流量的影响,如天气、路况、人口密度等。2.环境污染控制(1)大气污染物扩散模型:该模型利用数学方法对大气污染物的扩散进行模拟和预测,从而为制定有效的污染控制措施提供依据。这种模型可以用于预测不同气象条件下的污染物扩散情况,如风速、湿度等。(2)废水处理模型:该模型利用数学方法对废水的处理过程进行建模和优化,从而提高废水处理效率和降低处理成本。这种模型可以用于预测废水处理过程中的各种参数变化,如温度、压力、pH值等。(3)固体废物管理模型:该模型利用数学方法对固体废物的管理过程进行建模和优化,从而提高废物处理效率和降低处理成本。这种模型可以用于预测固体废物的产生量、储存量和处理量等。3.金融风险管理(1)风险管理:数学模型可以帮助银行和其他金融机构更好地管理和控制风险,例如使用VaR(Value at Risk)模型来评估投资组合的风险。(2)信用风险建模:信用风险是金融领域中的一大挑战,数学模型可以帮助银行和其他金融机构更好地管理和控制信用风险,例如使用Logit模型来评估贷款违约概率。(3)股票价格预测:数学模型可以帮助投资者预测股票价格的走势,例如使用Black-Scholes模型来计算期权价格。4.机器学习与人工智能(1)机器学习中的数据处理、特征工程、模型选择、寻找最佳超参数、模型分析与模型融合等环节都需要数学建模思维。(2)数学建模可以用于人工智能算法的优化和改进,例如深度学习中的梯度下降算法。(3)数学建模可以用于人工智能算法的证明和推导,例如使用人工智能技术来帮助证明或提出复杂数学领域的新定理。除以上举例,数学建模还应用在医学研究、航空航天等多个领域。六、数学建模入门建议1.学习基础知识:数学建模需要掌握一定的数学基础知识,包括微积分、线性代数、概率论与数理统计等。可以通过阅读相关书籍和论文,或者参加相关的培训课程来学习这些知识。2.熟悉数学建模方法:数学建模需要掌握一些常用的数学建模方法,如微积分、优化理论、统计分析等。可以通过阅读相关书籍和论文,或者参加相关的培训课程来学习这些方法。3.练习解题技巧:数学建模需要具备较强的解题能力,需要通过大量的练习来提高自己的解题技巧。可以通过做一些历年的数学建模题目,或者参加一些模拟赛来提高自己的解题能力。4.培养团队合作精神:数学建模通常需要组成一个团队来完成任务,因此需要具备良好的团队合作精神。可以通过参加一些团队活动或者组织一些小组讨论来培养自己的团队合作能力。5.提高英语水平:数学建模中可能会涉及到一些英文文献和资料,因此需要具备一定的英语水平。可以通过阅读英文文献、参加英语角等方式来提高自己的英语水平。

社区小助手 0 0 2023-06-26

数模竞赛论文写作攻略:每个部分需要注意的细节你都知道吗?

      论文写作是数模竞赛中非常重要的一个环节,最后的竞赛成果通过论文体现,是成绩评定的唯一依据。因此,写好论文十分重要。在撰写论文前,可以先了解论文的评阅原则:假设的合理性,建模的创造性,结果的合理性,表述的清晰性。      论文的整体结构大致分为摘要、问题重述与分析、模型假设、模型建立、模型求解、模型检验与结果分析、模型评价与改进方向、结论、参考文献、附录这几个部分,本文将按照这几个部分进行介绍,提出一些论文写作中应该注意的问题,以供参考。一、摘要      摘要的内容要包括模型的数学归类、问题的求解思路、建模模型的特点(模型优点,算法特点,结果检验,灵敏度分析等)、模型检验与主要结果(结论指定要明确,如果有具体结果要以数值的形式体现)、列出关键字(为检束论文所用,指出论文所涉及问题的特征)。      摘要的基本结构可参考“随着…,本文依据…,建立××模型进行求解、优化。针对问题一,...,针对问题二,...,针对问题三,...,(最后,给出每个模型的优缺点及评价。)”的形式。摘要需要准确、简明,300字到1000字之间,绝不超过一页纸;条理清晰,合乎语法,字体符合论文格式要求。二、问题重述与分析       根据自己对于竞赛题目的理解,用自己的语言来描述所要解决的问题,千万不要复制原问题,在描述过程中可以重点强调要求解的问题,将要解决的问题明确化,也可以增加要研究的问题,或略微改变所研究的问题,添加一些限制条件等(但不要降低问题难度)。最好做一张好看的思路流程图放在论文里面,会很加分。       除此之外,对问题的实际背景要进行必要的一些叙述,增加对问题的认识;对问题做宏观的分析(着重于数量分析),大体上表述出解决问题的思路和归结成的数学问题的类型。三、模型假设      模型假设主要注意以下两点:      假设的合理性:根据题目条件和要求作出假设,所有的假设都要与题意切合,具有相对的合理性。      假设的关键性:关键性假设不能缺,不要罗列过多不关键的假设。      假设的作用是简化问题,明确问题,限定模型的适用范围。必要时可以利用增加假设的方式提高模型的合理性,对于一些比较强的假设,需要增加合理性分析予以说明,基本假设要逐条编号表达(在论文实际用到的假设需要逐条添加)。此外,也要对论文中会出现的变量进行说明:要列出问题中所有的涉及到的固定量和变量的列表(临时性的变量可以不必列入);表中要记录量的符号、说明、单位、以及相互间的简单关系等;量的次序以它在论文中出现的次序为好,后出现的可逐个添加到表;绝对避免一个符号表示不同意义的几个变量。四、模型建立      (1)实际问题简化为数学模型      首先要有数学模型、数学公式、方案等,基本模型要求完整正确且简明;要明确说明简化思想,尽可能完整给出简化后模型。在这个过程中,要讲清楚该模型中的元素和问题中的元素是如何对应的。      (2)模型要实用、有效   数学建模是要解决实际问题,不追求数学上的高级、深刻、难度大,在建立模型时应遵循“能用初等方法解决的就不用高等方法;能用简单方法解决的就不用复杂方法;能用被更多人看懂、理解的方法就不用只能少数人看懂、理解的方法”的原则。      (3)问题分析推导要专业      分析要中肯、确切;术语使用要专业、内行;使用的原理和依据要正确、明确;表述方法要简明,特别是关键步骤要列出。切忌使用外行话,专业术语不明确,表述混乱和冗长。五、模型求解      (1)过程的叙述要尽量规范化,需要说明计算方法或算法的原理、思想、依据、步骤。命题和定理叙述要符合数学表述规范,应给出尽可能严密的论证。      (2)若采用软件,要说明其作用和名称,或者求解设定的参数,但不能只写“采用××软件求得:”直接出结果。      (3)计算过程和中间结果可要可不要的,不要列出。      (4)要有求解方案及计算流程框图,按步骤依次写清楚、详细。每一步都要有总结性语言。      (5)多做模型仿真与可视化。      (6)结果表示要集中,一目了然,直观,便于比较分析及评委查找。      (7)数值结果表示:精心设计表格;可能的话,用图形表示更好。      (8)重要的且简短程序可放在论文正文中,一般程序应放在附录中。六、模型检验与结果分析      (1)对要求回答的问题,必须要明确回答数值的结果和结论,一一列出。      (2)对几套计算方案算得的答案可列出进行比较,以选择好的计算方案。      (3)数值型结果可用表格,图形来显示。      (4)可对问题的解答作定性或规律性的讨论,的结论必须明确。      (5)对数值结果或模拟结果进行必要的检验。      (6)对于结果不正确、不合理、或误差大的情况,必须分析原因,并对算法模型进行修正改进。七、模型评价与改进方向      (1)要优点突出,但缺点也不回避。      (2)对修改过的问题的建模可在这部分叙述。      (3)在叙述推广或改进方向时,不要玩弄标新立异的概念。      (4)不要写模型的致命缺陷,可以适当写一些对于结果不产生较大影响的缺点,比如精度问题。八、结论      总结一下文章所建立的模型以及所对应的求解方法,最后针对每个问题给出一个最终的结果。九、参考文献      列出所引用过的重要的他人的论文或资料。特别是对本论文有重大参考意义的材料。参考文献的表达方式要符合规范。十、附录      (1)详细的结果及数据表格,可在此列出。绝对不要列出错误的数据,特别不能有与正文中的数据有矛盾的数据。      (2)在正文中出现的重要的计算结果,在附录中必须能够找到。      (3)编制的计算程序,计算的详细框图等。      (4)一些要参考意义的图表。

社区小助手 0 1 2023-06-26

数模干货|数学建模评价类算法优缺点总结

      数学建模中,评价类模型是一类比较基础的数学模型之一,往往是对应生活中的一些实际问题。      最常见的数学模型包括:层次分析法、模糊综合评价、熵值法、TOPSIS法、数据包络分析、秩和比法、灰色关联法。下面就上述几种评价类模型的优缺点进行系统地分析。      一、层次分析法      优点:      1、层次分析法是一种系统性的分析方法。把研究对象作为一个系统,按照分解、比较判断、综合的思维方式进行决策,成为继机理分析、统计分析之后发展起来的系统分析的重要工具。      2、层次分析法是一种简洁实用的决策方法。既不单纯追求高深数学,还不片面地注重行为、逻辑和推理,而是把定性方法与定量方法有机地结合起来。      3、层次分析法所需定量数据信息比较少。层次分析法主要是从评价者对评价问题的本质、要素的理解出发,比一般的定量方法更讲究定性的分析和判断。      缺点:      1、当指标过多时数据的统计量较大,权重较难确定。      2、特征值和特征向量的精确求法比较复杂。在求判断矩阵的特征值和特征向量时,所用的方法和我们多元统计所用的方法是一样的。      3、层次分析法只能从原有方案中进行选取,而不能为决策者提供解决问题的新方案。      二、模糊综合评价      优点:      1、模糊评价通过精确的数字手段处理模糊的评价对象,能对蕴藏信息呈现模糊性的资料作出比较科学、合理、贴近实际的量化评价。      2、模糊评价法的评价结果是一个矢量,而不是一个点值,包含的信息比较丰富,既可以比较准确的刻画被评价对象,又可以进一步加工,得到参考信息。      缺点:      1、模糊综合评价的计算复杂,对指标权重矢量的确定主观性较强。      2、当指标集U较大时,在权矢量和为1的条件约束下,相对隶属度权系数往往会偏小,权矢量与模糊矩阵R不匹配,结果会出现超模糊现象,分辨率很差,无法区分谁的隶属度更高,严重情况甚至会造成评判失败,此时可以使用分层模糊评估法加以改进。      三、熵值法      优点:      1、熵值法是根据各项指标值的变异程度来确定指标权数的,这是一种客观赋权法,避免了人为因素带来的偏差。      2、是一种客观赋权法,有理论依据,相对主观赋权具有较高的可信度和精确度。      3、算法简单,实践起来比较方便,不需要借助其他分析软件。      缺点:      1、熵值法不能减少评价指标的维数。      四、TOPSIS法      优点:      1、TOPSIS法避免了数据的主观性,不需要目标函数,不用通过检验,而且能够很好的刻画多个影响指标的综合影响力度。      2、TOPSIS法对于数据分布及样本量、指标多少无严格限制,既适于小样本资料,也适于多评价单元、多指标的大系统,较为灵活、方便。      缺点:      1、必须有两个以上的研究对象才可以进行使用。      2、TOPSIS法需要的每个指标的数据,对应的量化指标选取会有一定难度。      3、TOPSIS法不确定指标的选取个数为多少才适宜去很好刻画指标的影响力度。      五、数据包络分析      优点:      1、数据包络分析又称作DEA,可用于处理具有多个输入和输出的问题。      2、数据包络分析对于效率的评估结果是一个综合指标,并且可以用于在经济学中总生产要素的概念。      3、可以处理间隔数据以及序号数据,且不会受到不同规模的影响。      4、分析中的加权值是数学的乘积计算,因此摆脱了人类的主观性。      缺点:      1、数据包络分析不应该有太多变量。      2、数据包络分析的输入变量和输出变量之间的关系程度没有考虑。      3、数据包络分析它产生了有效的边界,这可能相当大。如果样本量太小的话结果不太可靠。      六、秩和比法      优点:      1、秩和比法又称为RSR法,该方法使用了数据的相对大小关系,而不真正运用数值本身,所以此方法综合性强,可以显示微小变动,对离群值不敏感。秩和比法能够找出评价指标是否有独立性。      2、秩和比法能够对各个评价对象进行排序分档,找出优劣,是做比较,找关系的有效手段。      缺点:      1、是排序的主要依据是利用原始数据的秩次,最终算得的RSR值反映的是综合秩次的差距,而与原始数据的顺位间的差距程度大小无关,这样在指标转化为秩次是会失去一些原始数据的信息,如原始数据的大小差别等。      2、当RSR值实际说不满足正态分布时,分档归类的结果与实际情况会有偏差,且只能回答分级程度是否有差别,不能进一步回答具体的差别情况。      七、灰色关联法      优点:      1、灰色关联法对于数据要求比较低,工作量比较少。      2、灰色关联法的思路明晰,可以在很大程度上减少由于信息不对称带来的损失。      缺点:      1、灰色关联法要求需要对各项指标的最优值进行现行确定,主观性过强。      2、灰色关联法的部分指标最优值难以确定。      以上内容转载自公众号“数学建模老哥”

社区小助手 0 1 2023-05-26

数模干货|优化问题的常见算法总结

      “优化”是生活中经常使用的词:开车时希望能在安全的前提下以最短时间到达目的地;双11做功课考虑各种优惠活动,希望获得最大优惠;超市进货时需要考虑动销存,最大化提高物品周转效率。 这些问题都是“最优化问题”,也是数学建模中的典型问题,是各大数学建模比赛里的常客。      优化题型有三要素:决策变量、目标函数、约束条件。      (1)决策变量:是决策者可以控制的因素,例如根据不同的实际问题,决策变量可以选为产品的产量、物资的运量及工作的天数等。      (2) 目标函数:是以函数形式来表示决策者追求的目标。例如目标可以是利润最大或成本最小等。      (3) 约束条件:是决策变量需要满足的限定条件。      历年国赛优化问题:      优化问题的出发点是系统思维,其基本思路是在一定的约束条件下,保证各方面资源的合理分配, 最大限度地提升系统某一性能或系统整体性能,最终实现最理想结果。对于这类问题,想要建立并求解数学模型,可以参考以下思路:      (1)明确目标,分析问题背景,确定约束条件,搜集全面的客观数据和信息。      (2)建立数学模型,构建变量之间的数学关系,设立目标函数。      (3)分析数学模型,综合选择最适合该模型的优化方法。      (4)求解模型,通常借助计算机和数学分析软件完成。      (5)对最优解进行检验和实施。      PS.北太天元内已有优化工具箱optimization,可以调用工具箱解决优化类问题。      下面给大家分享几种数学建模中常用优化算法:      1、线性规划      在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济效益的问题。此类问题构成了运筹学的一个重要分支—数学规划,而线性规划(Linear Programming 简记 LP)则是数学规划的一个重要分支。      1.1 用北太天元求解线性规划问题      北太天元内已有优化工具箱optimization,其中的linprog等相关函数可用于求解线性规划问题。      1.2 线性规划特点      优点:      (1)作为经营管理决策中的数学手段,在现代决策中的应用非常广泛。      (2)有统一算法,任何线性规划问题都能求解,解决多变量最优决策的方法。      (3)训练速度快。      (4)预测速度快,可以推广到非常大的数据集,对稀疏数据也很有效。      缺点:      (1)对于数据的准确性要求高,只能对线性的问题进行规划约束,而且计算量大。      1.3 相关问题      运输问题(产销平衡)、指派问题(匈牙利算法)、对偶理论与灵敏度分析、投资的收益和风险。      2、整数规划      规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。目前所流行的求解整数规划的方法,往往只适用于整数线性规划。目前还没有一种方法能有效地求解一切整数规划。      2.1 用北太天元求解线性混合整数规划问题      可在北太天元内调用优化工具箱optimization,使用intlinprog等相关函数求解线性混合整数规划问题。      2.2 整数规划的分类      如不加特殊说明,一般指整数线性规划。对于整数线性规划模型大致可分为两类:      (1)变量全限制为整数时,称纯(完全)整数规划。      (2)变量部分限制为整数的,称混合整数规划。      2.3 整数规划特点      原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况:      (1)原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。      (2)整数规划无可行解。      (3)有可行解(当然就存在最优解),但最优解值变差。      整数规划最优解不能按照实数最优解简单取整而获得。      2.4 求解方法分类      (1)分枝定界法—可求纯或混合整数线性规划。      (2)割平面法—可求纯或混合整数线性规划。      (3)隐枚举法—求解“0-1”整数规划:过滤隐枚举法;分枝隐枚举法。      (4)匈牙利法—解决指派问题(“0-1”规划特殊情形)。      (5)蒙特卡洛法—求解各种类型规划。      3、非线性规划      如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。一般说来,解非线性规划要比解线性规划问题困难得多。而且,也不象线性规划有单纯形法这一通用方法,非线性规划目前还没有适于各种问题的一般算法,各个方法都有自己特定的适用范围。      3.1 线性规划与非线性规划的区别      如果线性规划的最优解存在,其最优解只能在其可行域的边界上达到(特别是可行域的顶点上达到);而非线性规划的最优解(如果最优解存在)则可能在其可行域的任意一点达到。      3.2 相关问题      无约束问题(一维搜索方法、二次插值法、无约束极值问题的解法)、约束极值问题(二次规划、罚函数法)、飞行管理问题      4、动态规划      动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decisionprocess)最优化的数学方法。例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动态规划方法比用其它方法求解更为方便。      虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规划),只要人为地引进时间因素,把它视为多阶段决策过程,也可以用动态规划方法方便地求解。应指出,动态规划是求解某类问题的一种方法,是考察问题的一种途径,而不是一种特殊算法(如线性规划是一种算法)。因而,它不象线性规划那样有一个标准的数学表达式和明确定义的一组规则,而必须对具体问题进行具体分析处理。因此,在学习时,除了要对基本概念和方法正确理解外,应以丰富的想象力去建立模型,用创造性的技巧去求解。      5、多目标规划      多目标规划已经应用到科学的许多领域,包括工程、经济和物流,在两个或更多冲突的目标之间存在取舍时,需要采取最优决策。      解决多目标规划问题的方法:      (1)将多目标化为单目标 (给多个目标赋予权重)      (2)保持多目标不变,根据自己的偏好选择解      实际问题中,目标函数相互冲突是很常见的,例如购买汽车时,要求花费少且舒适度高或者要求性能好油耗低,这种问题并没有绝对最优解(因为并没有确定多个目标的权值),但是我们可以根据自己的需要选择一个相对好的(达到我们想要的最佳平衡)。为了寻求这种“最佳平衡”,可以采用算法帕累托最优(Pareto optimal)。      以上部分内容引用公众号“科研交流”,希望对大家有帮助,觉得有用就点个赞吧。小助手会不定期更新数学建模干货,可以多多关注哟。

社区小助手 0 1 2023-05-06

为了推广北太天元使用,我自己做了一本教材

数学实验与数学建模:基于Baltamatica作者:华中科技大学 马世拓首先非常感谢北京大学卢朓老师和李若老师等大咖对本项目的支持。这个项目是我春节的时候写的,为了促进新手学习数学建模并推广北太天元软件。书稿是我编写,参考了我大二的时候写的《数据科学基础:from 0 to 1》和正在北大出版社审稿的《MATLAB数学建模》。有些地方可能写的还有点生草,因为的确是对我在前期书稿的一个重排、删改与整合。里面如果有一些有误的地方欢迎与我联系。项目的下载地址链接:github下载链接: github版数学建模教程gitee下载链接: gitee版数学建模教程百度网盘链接:链接:https://pan.baidu.com/s/17Q4_kcgP8Hx7hF6kWaykmA 提取码:g79k为什么要写这本教材我在华中科技大学的时候就很喜欢数学建模竞赛,一直探索数学建模的教与学。我讲过基于Python版本的数学建模,也讲过基于MATLAB版本的数学建模。但是基于北太天元,我们还是第一次尝试。Python和MATLAB这两个系列更多的要求我们“先知其然,后知其所以然”,这也是“学术”和“工程”的辩证统一。北太天元则不同,它是刚起步的,有很多插件还没有弄好,还存在一些底层的问题,所以在使用北太天元做建模的时候要注意从底层原理学习起,宁可学的东西没那么多,但是要理解底层逻辑。这本教材的优点据卢朓老师跟我说,这应该是业内第一本开源的北太天元教程。我的初衷是推广到竞赛中,让学生有胆气冲击北太数模之星的冠名奖。在编写过程中,我不喜欢市面上大多数教材的写法,太死板,也太没人性化。恕我直言,对于那些不讲人话的学术类书稿,你如果是给同行传阅倒也罢了,但是你的受众是学生,我考教师资格证的时候就明确记得有“量力性”这一条要求。不讲人话的书稿我必须得奉上一句“RNM退钱”,所以,我在编写过程中尽可能做到通俗易懂,让读者能够轻易上手接受。此外,书稿大纲是我在华中科大给同学们作数学建模培训磨了几轮才形成的大纲,在此基础上进行了删改,将过于复杂的一些章节去掉了,更容易被同学们接受。作为计科人,我始终记得谭志虎副院长和秦磊华副院长给我们强调的软硬协同观。在本书编写的过程中,虽然更多的是数值计算与模拟方面的东西,但是也同样以自己的理解从软硬协同的角度在看这个软件。本人在计算机领域功力尚浅,是当时专业课学的很拉胯的程度,如果有一些错误之处欢迎批评斧正,读者朋友们见笑。特此声明本书将免费开源不收取任何费用,但是请注意一些版权问题。如果是从我的github或gitee主页下载的书稿,还请star一下可以咩谢谢。最后再次感谢卢朓老师和李若老师等人的支持!~

马世拓 13 24 2023-04-26