加载中...
算法-问题求解
发表于:2022-09-30 | 分类: 数据建模 遗传算法
字数统计: 4.8k | 阅读时长: 17分钟 |

算法-问题求解


什么是参数优化?举个例子,对于模型y=f(x)=ax+b,附件中会给定x和y的值。当然,模型y=ax+b不会告诉你,这是自己建立的模型。建立了模型之后,通过数据去拟合,求解参数a和b

怎么求a和b,这就是关于算法的问题。对于y=ax+b这样简单的模型,拟合本质上是优化,我们可以使用各种成熟的优化算法,如:
单步长(变步长)搜索法
二分搜索法
黄金分割搜索法
最小二乘法
遗传粒子群模拟退火算法

如何判别是否是优化问题凡事关于最小最大相关或者尽量相关的词汇,一般都是优化问题。收益最大,风险最小,尽量对称,尽量小,尽量大等等另外还有一种最后趋于稳定的问题,一般也是优化问题,例如2019A高压油管压力控制,油压最后稳定在100,优化目标是最后一秒的油压曲线与100的偏差最小

优化问题的组成部分注意优化问题特别是微分方程问题,一般由5个主要部分构成,它们分别是:优化变量(自变量)优化目标(单目标、多目标)(因变量)控制方程(微分方程模型主体及其他附属方程)边界条件初始条件在论文写作时,我们需要做的是把优化目标、控制方程、约束条件等用数学语言表达出来。需要注意:应该明确写出上面5个部分,如果某些部分没有,应该至少写出优化目标和控制方程

在写作时,明确写出以xx为优化变量、以xx为控制方程(约束条件)、以xx为优化目标的单目标(多目标)优化模型

下面开始写控制方程以及约束,注意有下面两点。

第一点、使用大括号把控制方程和约束条件、边界条件写一起。

第二点、后面需要有变量符号的解释(其中,a为:,b为:…)

为什么要这么写?原因是这样评委一看就知道所有的东西

模型的求解部分上面建立完了模型,我们就开始写模型的求解,这部分就是算法了对于一个优化问题,如何选择算法?当然算法不是乱选的,你得体现你的思考与创新比如对于一个参数搜索问题,变步长搜索就比单步长搜索要好,为什么?因为变步长搜索在趋于最优解的时候缩小步长,能够减少运算次数,这就是它的优点。再进一步,二分搜索法比变步长搜索法更好。你用二分,别人用穷举搜索,你的算法就比别人的更优秀。注意,不是越复杂的算法就越好,而是使用简单的算法在最短的时间内解决问题才是最优的算法。

优化问题:

线性规划,半定规划、几何规划、非线性规划,整数规划.多目标规划(分层序列法),动态规划:
存赔论、代理模型、响应面分析法、列生成算法

预测模型:

微分方程,小波分析,回归分析,交色预测,马尔可夫预测,时间序列分析(AR MA ARVA ARIMA, LSTN
神经网絡),混沌模型时间序列预测.支持向量机,神经网络预测(与机器学习部分很多重合)

动态模型:

微分方程模型 (ODE、SDE、 DDE、DAE、PDE).差分方程模型,元胞自动机,排队论,蒙特卡罗随机
模拟

图论模型:

最短路径,最小生成树,最小费用最大流,指派问題,旅行商问題,VRPIW路径规划,网络流,路径
规划算法 (Di jkstra, F1oyd, A, D,RRT, LPA, Dxlite )

评价模型:

层次分析法,熵权法,最优贼权法,主成分分析法,主成分回归评价,因子分析,模糊綜合 评价,
TOPSIS 法,数据包络分析,秩和比法,交色综合评价法
最小一乘主客观一 致賊权评价模型,BP 神经网络綜合评价法

统计分析模型:

分布检验,均值T检验,方差分析,协方差分析,相关分析,卡方检验,秩和检验,回归分析,
Logistic 回归,聚类分析,判别分析,关联分析 (Apriori 算法)

现代智能算法:

(求极值,多目标规划,TSP,车间调度等)模拟退火,遗传算法,粒子群算法,禁忌搜素、免疫算
法,鱼群算法,神经网络,蚁群算法

其他算法:

二分法、直接搜素法、变范围搜索、单因素优选法0.618 法(黄金分割法)、拉
格朗日乘子法、信赖域算法,欧拉法\改进欧拉法,牛顿-拉弗森算法(牛顿迭代法)、抄
牛顿法、梯度下降法

机器学习

分类问题:

RNN,逻得回归,决策树,随机森林,ADABOOST、GBDT\XGBoostNLightGBM, 支持向量机,
朴素贝叶斯,神经网络

回归问题:线性回归,LASSO 回归,岭回归,决策树回归,集成学习中回归方法,支持向量回归,
高斯混合模型,神经网络

聚类问题:

K均值聚类,DBSCAL聚类,以算法

0-1背包算法


0-1背包算法

给定一组多个(n)物品,每种物品都有自己的重量(wi)和价值(vi),在限定的总重量/总容量(C)内,选择其中若干个(也即每种物品可以选0个或1个),设计选择方案使得物品的总价值最高。
给定正整数

评价模型-主成分分析


分析主要原因

(PCA)PCA是一种降维方法,常用于对高维数据集作降维,它会将一个大的变量集合转化为更少的变量集合,同时保留大的变量集合中的大部分信息。“主成分分析在机器学习内被归类成为降维(Dimension reduction)内特征擷取(Feature extraction)的一种方法,降维就是希望数据的维度数减少,但整体的效能不会差异太多甚至会更好”→其实说法还是很文。

  1. 计算标准差
    具体一点说就是因为我们后续的结果对数据的方差十分敏感,取值范围较大的维度会比相对较小的维度造成更大的影响(例如一个在1-100之间变化的维度对结果的影响,比一个0-1的更大),会导致一个偏差较大的结果,所以,将数据转化到相似的范围可以预防这个问题。

  2. 计算协方差矩阵
    协方差矩阵是一个P * P的对称矩阵(P是维度的数量)它涵盖了数据集中所有元组对初始值的协方差,例如一个拥有三个变量x,y,z和三个维度的数据集,协方差矩阵将是一个3 * 3的矩阵

  3. 计算出主成分
    主成分是一个新的变量,他是初始变量的线性组合。新的变量之间是不相关的,第一个主成分中包含了初始变量的大部分信息,是初始变量的压缩和提取。

    • 例如:虽然在一个 10 维的数据集中我们算出了 10 个主成分,但大部分的信息都会被压缩在第一主成分中,剩下的大部分信息又被压缩到第二主成分中
  4. 怎么计算主成分
    有多少个变量就有多少个主成分,对于第一主成分来说沿着对应的坐标轴变化意味着有最大的方差。

    你能直接猜测出主成分应该是沿着哪一个方向吗,大致是图中紫色线的方向。(因为它穿过了原点,而且数据映射在这条线上后,有着最大方差(各点与原点距离的均方))

  5. PCA的步骤
    1)将原始数据按列组成n行m列矩阵X
    2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
    3)求出协方差矩阵
    4)求出协方差矩阵的特征值及对应的特征向量
    5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
    6)Y=PX即为降维到k维后的数据

import matplotlib.pyplot as plt                 #加载matplotlib用于数据的可视化
from sklearn.decomposition import PCA           #加载PCA算法包
from sklearn.datasets import load_iris
 #通过鸢尾花数据集,进行主成分分析
data=load_iris()
y=data.target#这里data为训练所需的数据集,target为数据集对应的分类标签,属于监督学习
x=data.data
pca=PCA(n_components=2)     #加载PCA算法,设置降维后主成分数目为2
reduced_x=pca.fit_transform(x)#对样本进行降维
red_x,red_y=[],[]
blue_x,blue_y=[],[]
green_x,green_y=[],[]
 
for i in range(len(reduced_x)):
    if y[i] ==0:
        red_x.append(reduced_x[i][0])
        red_y.append(reduced_x[i][1])
    elif y[i]==1:
        blue_x.append(reduced_x[i][0])
        blue_y.append(reduced_x[i][1])
    else:
        green_x.append(reduced_x[i][0])
        green_y.append(reduced_x[i][1])
#可视化
plt.scatter(red_x,red_y,c='r',marker='x')
plt.scatter(blue_x,blue_y,c='b',marker='D')
plt.scatter(green_x,green_y,c='g',marker='.')
plt.show()
# n_components指定降维后的维数
pca = PCA(n_components=2)
print(pca)
# 应用于训练集数据进行PCA降维
pca.fit(X)
# 用X来训练PCA模型,同时返回降维后的数据
newX = pca.fit_transform(X)
print(newX)
# 将降维后的数据转换成原始数据,
pca_new = pca.transform(X)
print(pca_new.shape)
# 输出具有最大方差的成分
print(pca.components_)
# 输出所保留的n个成分各自的方差百分比
print(pca.explained_variance_ratio_)
# 输出所保留的n个成分各自的方差
print(pca.explained_variance_)
# 输出未处理的特征维数
print(pca.n_features_)
# 输出训练集的样本数量
print(pca.n_samples_)
# 输出协方差矩阵
print(pca.noise_variance_)
# 每个特征的奇异值
print(pca.ingular_values_)
# 用生成模型计算数据精度矩阵
print(pca.get_precision())

除了这些输入参数外,有两个PCA类的成员值得关注。第一个是explained_variance_,它代表降维后的各主成分的方差值。方差值越大,则说明越是重要的主成分。第二个是explained_variance_ratio_,它代表降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。
7. 提取几个主成分最合适
从累计贡献率曲线可以看出提取两个主成分的累计贡献率达到0.9777,提取四个主成分的累计贡献率为0.9948,增加两个主成分累计贡献率只增加0.0171,但同时却增加了模型复杂度,加大计算量,增加运行时间,所以提取二个主成分最为合适。前4个标准化指标的累计贡献率已达到95.35%,估只需考虑前四个主要指标即可

  1. 参考文章
    https://www.freesion.com/article/520762211/
    https://zhuanlan.zhihu.com/p/170594013
    https://www.aisoutu.com/a/1510739
    https://www.cnblogs.com/hadoop2015/p/7419087.html
    spss主成分分析https://zhuanlan.zhihu.com/p/376799094
    风控模型—WOE与IV指标的深入理解应用(数据权重处理-热力图)https://zhuanlan.zhihu.com/p/80134853
    数据预处理 https://zhuanlan.zhihu.com/p/415705923
    https://www.heywhale.com/mw/project/5d259740688d36002c57b454

在建立模型的过程中,分析问题较为全面,综合考虑影响粮食种植面积的直接因素和间接因素,将农业劳动人口、进口量、出口量、农民教育程度、城乡收入差距、家庭负担(消费收入)、农资指数、农机总动力、上年粮食最低收购价、工业生产总值和城市区域面积均纳入影响粮食种植面积的指标体系;运用了多元线性回归模型提高了影响粮食种植面积的数学模型合理性的可信度。
在运用多元线性回归模型之前首先用主成分分析法选出较少的新因素代替原来的较多影响因素,简化了后面多元线性回归分析的数据量,并且提高了准确性。

模型中需要考虑的影响主要成分的指标体系较多,只考虑了一部分指标体系,使模型在实际使用中缺乏一定的可信度。
选用指标也不全面,使得评价模型结果未能真实反映政策执行效果,结果偏离实际情况较大。

评价模型-机器学习(回归问题)-多元线性回归


https://blog.csdn.net/qq_43923588/article/details/107672879

  1. 一元线性回归是一个主要影响因素作为自变量来解释因变量的变化,但在现实问题中,因变量的变化往往受到多个重要因素的影响,这时就需要两个或两个以上的影响因素作为自变量来解释因变量的变化,这便是多元回归,而当多个自变量与因变量之间是线性关系时,所进行的回归分析就是多元线性回归。多元线性回归的一般形式为:

同一元线性回归一样,我们要在误差平方和最小的情况下,使用最小二乘法求解参数,下面我们通过一个预测房屋租赁价格的实例来透彻理解多元线性回归模型。
2. 数据展示
在此例中房屋租赁价格为因变量,房屋面积和房屋数量为自变量,由4.1可知,此处我们要建立一个二元线性回归模型,首先构建训练数据集,并对其进行可视化。

见代码
3. 参考资料
https://www.heywhale.com/mw/project/5f44c8c2835fe7002d990503

随机森林-可以降维度,预测数值


https://blog.csdn.net/qq_43923588/article/details/107672879

装袋法中的装袋二字是精髓,顾名思义即将多个模型装入同一个袋子后,让这个袋子作为一个新的模型来实现预测需求,仅此而已。换句话说,即把多个模型组合起来形成一个新的大模型,这个大模型最终给出的预测结果是由这多个小模型综合决定的,决定方式为少数服从多数。

  1. 同一元线性回归一样,我们要在误差平方和最小的情况下,使用最小二乘法求解参数,下面我们通过一个预测房屋租赁价格的实例来透彻理解多元线性回归模型。

假设有10万条原始数据,用这些数据来做十棵决策树(当然也可以是其他模型),最后这10棵树将被装进了同一个袋子中。这时候取其中一条数据放入这个袋子,便会得出10个预测值(每棵树各一个),假如其中三棵树给出的预测值为0,剩余的七棵给出的为1,那我们便可知道这个袋子对这个数据的预测结果为 0 的概率是 3/10。

  • 问:袋子中的每个模型使用的样本量范围应为多少合适?

  • 答:如果是上面的例子,袋子里面有十棵树,源数据总量为 10万 条,则每棵树取用的样本量的最小值为最少是1w个(10w/10棵 = 1w/棵),因为至少要保证不能浪费样本,但每棵树最多可取用多少样本呢?其实在样本量已知,同一袋子中模型个数为n的情况下,样本的选择比例为1/n ~ 0.8最好。每个小模型取用 100% 的样本是绝对没有意义的,那就跟没抽是一样的,这样也就没有体现出装袋,只有每个模型用到的数据都有一定的不同,组合起来后每个的投票(预测结果)也才有意义。

  • 问:袋中模型们之间的相关性会影响最后的决策结果吗?

  • 答:装袋法思路最重要的一点:袋子中每个模型之间不能相关,越不相关越好,这里的不相关主要体现在用于训练每个模型的样本不一样。其次,每个模型的精度越高越好,这样它的投票才更有价值。

  • PS:训练模型的样本不一样这一点可以理解为总统选举,抽 10 波选民来投票,这 10 波选民的差异性越大越好,这样一来,只有在选民千差万别的情况下你依然脱颖而出,才足以说明你的实力,如果这10波选民中每一波之间的差异性都很小,比如都是本来就偏袒于总统候选人,那投票结果的说服力就会大减。

  • 问:上面所说的模型精度高是不是哪怕模型很复杂也可以,如果每个模型的精度高但都过度拟合怎么办?

  • 答:在装袋法中,模型是越精确越好,哪怕是过度拟合的也没有关系。因为一个模型要想在训练集上做到越精确越好,而精确程度与模型的复杂度大多是成正比的,所以出现过拟合的情况也是正常且情有可原的。复杂和过度拟合只是对袋子中每个模型而言,因为最后都会被加权,所以整个袋子(整体)并不会出现过度拟合的情况。

最后总结一下:随机森林是集成学习中非常经典的一种方法,基础原理简单,实现优雅,可即学即用。而且随机森林应用十分广泛,并不只是局限于常见的金融领域,只要数据不平衡或者随机缺失严重,都值得尝试。

  1. 参考:
    https://www.heywhale.com/mw/notebook/6337f71bdfae02496728f555

XGBoost


XGBoost的全称是 eXtremeGradient Boosting,2014年2月诞生的专注于梯度提升算法的机器学习函数库,作者为华盛顿大学研究机器学习的大牛——陈天奇。他在研究中深深的体会到现有库的计算速度和精度问题,为此而着手搭建完成 xgboost项目。xgboost问世后,因其优良的学习效果以及高效的训练速度而获得广泛的关注,并在各种算法大赛上大放光彩。

中文官方文档:https://xgboost.apachecn.org/#/
原理:https://www.heywhale.com/mw/project/5dd6316b788b1c002c9822e9

时间序列预测模型


ARIMA时间序列预测模型

中文官方文档:https://xgboost.apachecn.org/#/
原理:https://www.heywhale.com/mw/project/5dd6316b788b1c002c9822e9

主客观集成赋权、OPTICS 聚类、XGBoost 集成学习、 Lorenz 曲线、帕累托分析法、lightgbm-Multi logistic、ARMA 模型

上一篇:
数据降维--因子分析
下一篇:
JupyterNotebook介绍、安装及使用教程
本文目录
本文目录