全部版块 我的主页
论坛 提问 悬赏 求职 新闻 读书 功能一区 经管百科 爱问频道
9514 29
2014-07-16
我现在只知道退火算法的名字,其他一应不清楚,但是想通过这个帖子很详细的总结出来,做一件长期的有益的事情。

顺便把学过的统计、概率、运筹学的各种基本知识都融汇贯通了。

还可以把这些算法用很简单的visio画出来,整理成集,方便自己案头临时查阅,也方便初学者免费迅捷地学习到这些知识。

一方面又可视化的东西,另一方面,还可以学会自己编写R软件包直接给别人用。

再到后面,发现有价值的出发点和产生新意之后,还能写成书。

----------------------------------------------------------------------------------------------------------------------------------------------------------
首先,退火算法是个全局优化问题,那么优化问题都有哪些类别呢?
我前面做过一个地铁营收估计的模型,那个问题归结为一个,整数线性规划问题,线性规划问题也属于优化问题吗?
优化问题的定义:the selection of a best element (with regard to some criteria) from some set of available alternatives.
根据维基上的这个定义,线性规划也算是优化问题。

但是我不想简单地搬维基的分类过来,在这里,我要用自己的一种分类来,用自己的思考给所有优化问题,给这个帖子
搭建一个框架。

就从一些经验来看,我不能很迅速的,归结问题属于哪个领域,真是需要好好梳理一下了。
同时,需要适应别人的需要很迅速看到最关键的解决办法,这样的特点,如果不融汇贯通就不能适应这样的要求。

同时,我希望自己能在短时间内熟悉做市场研究业务分析的一些英文。

希望在这个项目里面,把所有该练习的都练习了。

就现实应用的场景来说,我知道的,一个公司的广告产品就是一个庞大的优化系统,它想要优化整个系统在一个比较长的
时间里面的营收。包括Google的搜索广告,展示广告,都是这样的。这里的优化问题都是在约束条件下求最大值的问题。

还有一些问题有可行域,最后的解有范围,这样的问题也会转化成求最大值的问题。

如果在考虑到模型会随时间的改变而改变,就会变成动态规划问题。

再如果在规划的线路上加入概率的因素就会到决策论等复杂的事情。这样的事情在现实中应用的场景会更广泛,因为现实中
大量的不确定因素。

优化的算法是跟着问题变的,譬如,Paxos算法能起到一些容错的作用(?),而且是密切相关,解法紧扣着问题的最核心的
部分,在Paxos中,另外的机器的行为成为了一个正在被研究的机器做决定的判定条件,最终选定一个值,涉及到三组判定条
件,分别来自作为过去的proposer的角色,来自acceptor的角色,来自未来的proposer的角色,能想出来这么一序列的判定条
件不是自然而容易的,他之前为了得到这个算法,还专门编了一个greek的故事,而且每一种角色对于研究机器的影响的维度
是在那个维度,如何将这种影响的维度变得数学化,变得可处理,我觉得,这背后都是有巨大的乾坤的。

--------------------------------------------------------------------------------------------------------------------------------------------------------
言归正传,退火算法,想要解决什么问题?而且看起来还有SA,SAA好几种。
退火算法可以用来TSP问题,Travling Saleman Problem,而且是个NP难题。
--------------------------------------------------------------------------------------------------------------------------------------------------------
计算的复杂度
什么是NP难题?NP就是Nondeterministic Polynomial Time
弄清楚这个问题很有必要,这关系到我们的解决方法能否再有效时间内被计算机算出来。
这里的几个概念稍微有点绕,P,NP,NP-hard,NP-complete,NP-equivalent,但是还是要弄清楚。
这里的概念对于任意解决方法都可以去评价,估计它作为解决方法的可行性。
P contains all problems that can be solved by a derterministic  Turing Machine using a polynomial amount of computation
time or polynomial time.
-------------------------------------------------------------------------------------------------------------------------------------------------------
需要算法的问题
现在在想另外一个问题,如何将R软件包、算法、现实问题顺畅地链接起来?

在考虑这个问题时,下面的问题是有意义的,什么样的问题,不需要一个复杂的算法去实现?

从我过往的经验来看,用到算法必定是涉及到了比较复杂的有约束的系统,比如,Pasox想要让很多台机器达成一致,比如
直接的信息没有办法获得,地铁营收建模那个问题,再比如,Travling Saleman Problem,要找到一条穿过所有点的最短路线
的问题,都可以看到这些问题涉及的要么主体多元,既定目的,求可重复利用的自动的实现方法,要么达到目的的路径多元
,再寻找某一种有现实意义的限制之后(越优化越好),求出可重复的自动的满足条件的实现方法。
所以,可能用到算法的问题一定是目的明确的问题,如果目的不明确,算法就无从谈起,可能用到算法的问题具有一定的复
杂度,比如Paxos算法的呈现不是一下子就想出来的一个直观的解决方法。也就是说在问题没有弄清楚之前,算法是没有意
义的。Paxos的存在是解决了没有这类算法就不能解决的问题。

如果你想知道地铁某号线的营收而你可以获得地铁计费系统的权限,那么你就没有必要自己去设计一个模型来估计它。
所以在回答别人问题时,明白别人的诉求是很重要的,需要谨记。

我自己关注的两类现实问题是:市场研究领域内的数学建模,优化互联网、软件产品设计的建模
所以现实问题的出发点,我会从这里开始。
***********************************************************************************************
这样现实问题的领域、解决办法的数学领域,解决办法的实施工具都已经确定,我们接下去要做的事情是细化分析
该细化的东西,理解透彻一般层面的问题,尝试将实施工具熟练地使用起来。

***********************************************************************************************
-------------------------------------------------------------------------------------------------------------------------------------------------------
从不同的层次考虑,解决问题
在历史上有很多被嘲笑的理论,方法过去很多年却发挥巨大用处被受尊敬,主要就是有些人会用这样的方式思考问题“如果
存在某一种技术能让我描述的方法变得可行了呢?”,在这种前提下他可以轻松自如的发挥自己的创造力。

还有这世界上存在不同效率的解决问题的办法,比较高效的那个会有另外的假设,“如果这些繁琐的事情都由别人或别的什么
东西帮我完成了呢?”在这种勇敢的思想下,他就有可能产生数量级于别人的贡献。只要他的大脑告诉他这种新方式可靠就行
了。

算法复杂度理论就是在思考图灵机对于那些问题可靠,对于那些问题不可靠。
所以如果,你想要确切的了解计算机对于你的可靠性,就十分有必要了解算法复杂度的东西。

当然世界上还存在另外一些人,比如巴菲特,他说过在他的工作里面高等数学都用不到。他说一些话必然是他知道一些事情,
但是你知道他为什么这么说?我只知道的是像Google这样的公司,利用了高等数学的知识改变了世界上人们生活方式的事实,
我看得见数学巨大的力量。也就是说,我真是不知道不用高等数学的巴菲特怎么就变成了富翁,我可是没有办法用他的方式
让自己获得成就感。
-------------------------------------------------------------------------------------------------------------------------------------------------------
提高R编程技术,做出好分析

到底怎么样了就算熟练掌握R了,熟悉对于每一种数学模型都能找到相应的软件包来解决问题?对于每一种软件包给出的结果
都给做合理的解释和分析?对于没有现成的软件包,自己还能够编出软件包来解决问题?
在论坛上看到有同学做出来了结果,但是不知道怎么解释,原因应该有两个,要么不了解软件包可以被应用的场景,要么不了解问题本身。
也就是说,如果我想做出有价值的分析,我必须了解问题本身,我也必须了解选择的软件包的特性。
一项分析好不好,一方面看模型建的好不好,一方面看解决模型返回到具体问题中的解答是否满意。
那同时也就是说我必须知道对于一个问题我建立了一个模型,我建立的好不好。
同时我也必须知道,如果我已经解出来了一个结果,那这个结果对于现实问题有怎样的促进,或者说再退一步要怎么样看到
问题的解答对于现实问题的意义。如果自己都说不清,那怎么跟客户说的清。
所以,我们需要对上面的问题做出自己的可靠的回答,才能做出很好的分析。
-------------------------------------------------------------------------------------------------------------------------------------------------------
怎样的数学模型是一个好模型?要做出怎样的模型?以及为什么。

对于这个问题,我们可以做很直接的回答,如果模型很好的反应了问题的核心,成为了牛的骨头,那么这个模型就是一个好
模型。但是接着我们又问了,如何判断一个模型是不是很好的反应了问题的核心?
我的理解问题的核心涉及到若干主体,涉及到主体之间有清晰逻辑的联系,如果假设我们已经建立了一个模型,我们去检查
如果其中的一个逻辑关系和描述与现实是不相符合的,那么就说这个模型不是一个很好的模型。换句话说很好的反应了问题
实质的模型就是好模型。

在一个统计模型中,我们会做统计模型的检验,为什么要做统计检验,我觉得就是为了让模型在某种程度上符合现实,对于
统计检验我们需要一个专门的模块去讨论。

对于非统计模型,是否也存在检验这样的方式,还需要探索。

毫无疑问的是如果一个模型已经在被广泛使用了,那么在某种程度上,它是有用的。我们需要知道,在我关注的领域已经被
广泛使用的模型或者方法,这个问题也需要一个专题去讨论。我们知道不管在哪一个领域,不管是市场分析、互联网数据意
义发现、商务设计都存在很多经验总结类型的模型,它们有可能不是量化的模型,但是却能帮助很好的分析问题,迅速深入
到问题的实质,发现新的想法,比如,Business Canvas,波士顿矩阵,贝恩利润池等等。

如果我们专注于量化这一块呢,我们就问被广泛使用的市场量化分析模型是什么?
市场研究公司关注什么问题?他们想要使用一些具有预测功能统计模型客户的profiling做市场的细分分析市场调研和分析对意义尚且不明确的数据进行意义发现经济层面和金融层面的分析

我想说说我刚毕业时候对于统计分析的一些事情。我做了一个PPT把大学里学过的几种多元统计方法聚类分析主成分分析
多重回归分析典型相关分析的文档呈现给别人看,就好像说骨头就这么多,你们来选吧。现在想过去,那是多么野蛮的
做法,那里面几乎没有凝聚我自己的脑力产品,方法又不是我自己开发出来的,具体也不知道是谁在怎么样的背景之下把他们开发出来的。后来发现各个大公司都设置有自己的研究部门,自己去开发方法,解决问题,GE麦肯锡矩阵,6西格玛等很系统
的问题解决工具。
下面在补充几个我比较关注的数据意义发现的技术。决策树概率网络模式识别神经网络生存模式,遗传算法。
这几个被广泛使用的互联网数据发现。这时候还会发现,模型不光能呈现直接需要解决的问题,模型也可能指为解决问题开
发出来的工具。
所以很自然的,我们就会发现建模两个侧面的意义:(1)描述直接要解决问题概要的工具,比如估计地铁营收那个模型。(2)描述要解决问题工具一组构架,比如很多的算法,比如我最近研究过的Paxos算法。

所以,需要将(1)(2)部分有效地嫁接起来,我们就有可能做出很Sharp的解决方案了。

为什么这样做方案才是Sharp的?我们没有办法,我们只能尽可能多尽可能深刻理解问题掌握尽可能多尽可能有力工具,如果
不这样的话,譬如,我只有一个锤子,我只能将我遇到的问题当做钉子来处理。
-------------------------------------------------------------------------------------------------------------------------------------------------------
嫁接起现实问题模型与工具模型之间的桥梁。
在地铁营收建模那个工作里面,我是先发现了对问题充分分析之后,尽量的设计可以得到需要的信息,最终想得到的信息,
不能得到的信息,当我看到问题的全貌时,就会发现,这个问题是有数学结构的,而且是我早就接触过的学过的数学问题,
这时候,如果我很清楚这个数学问题的解的方法,以及解的意义,解的有效性,那么现实问题模型和工具模型之间的桥梁
就架起来了。
我要怎样练习这样一个市场领域内的例子呢?那么我就要去深刻的理解在我关注的领域内有什么需要解决的问题,它们有怎
样的类型?有怎样现成的解决方案。

首先,看模型里面罗列的市场研究关注的问题,第一个,具有预测功能的统计的模型,在市场领域内需要预测什么?
最自然想到的是针对不同行业,咨询公司想要提供给他们行业解决方案。
自己之前有一些互联网行业的经验,其实也不算什么经验,数字广告行业有些了解。我自己一直想做的一件事情是,数字广告技术公司那么多,是不是可以有效的对他们对不同行业可以做出的贡献,能做一个有效的评分。如果客户找过来,我可以告诉他,如果你的预算有这么多,那么你最好将这些预算的百分之多少多少投入到哪个公司的哪个产品上面,在什么时间段做最好。而这正是美库尔这样的公司在做的事情。
就比如这件事情该如何去做?就是如何做市场预算的分配。毫无以为这就是一个优化问题。如何去做取决于两个方面,我们能
得到哪些数据,我们想要什么结果。想要的结果肯定是市场投资收益、投资回报率最大化。更毫无疑问的是,这样的事情已经
在进行了。但是说白了,每个案子的目的肯定都是不一样,行业不同,具体公司的行业不同。如果我作为这样的公司,我可能
会建立一个行业或者行业类某些功能能够使用的模型,然后设置一些参数,可以根据情况要么设置新的模型,要么调整参数。设想最后的方案是怎样的,那就是预算应该怎么怎么分配,为什么这么分配,这么分配了有什么好处,逻辑清晰有说服力。就
比如在这个案子里面,你想需要预测什么东西?客户肯定想知道的是对于某一种尚未实施的市场策略,市场的反应可能是怎样
的,所以肯定是要预测的。就像在计算广告里面,需要预测点击率,预测千人展示的价值等等。然后根据预测的东西做决定。
其实关于预测,每个人每一天都在预测,他们根据自己预期的情况及时调整着自己行动的策略。个人和公司的差别在于公司具有更多的资源,公司会花很大力,用很专业的态度去做预期。如果有人说,对于***未来的情况,谁说的出来,要么他就是懒于
调查,要么他就是傲慢于自己得知“事情总不是人们想象的那样”这样的一些信念。对于预期是可以很精准的用数学语言描述的,
那就是概率。只有说模型做的利用知识预知接近于事实的程度,一切的绝对都是有问题的。比如,“未来是不可预知的”
关于预测的模型,肯定有若干参考的因素,要将怎样的信息放进模型完全在人的。

我觉得代理公司他们需要这样的服务啊,他们财大气粗,只能收购一些技术公司,但是总体上,他们心里总觉得哪儿不对,他们总想要怎么转型。另外,我自己对非营利组织的推行产品的过程也比较感兴趣。
-------------------------------------------------------------------------------------------------------------------------------------------------------
预测统计模型

-------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------
我有一些工具箱,数理工具箱(正在理),算法工具箱(没理好),思维工具箱(最主要的理好了),软工具箱
(最主要的理好了),践行力工具箱(没理好),一辈子也就够用了。

------------------------------------------------------------------------------------------------------------------------------------------------------




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-7-16 19:05:28
好贴,关注中
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-7-17 18:30:35
daazx 发表于 2014-7-16 19:05
好贴,关注中
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-7-17 20:42:25
是啊,搂主说说吧,你搞个模型出来,说明了啥?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-7-18 15:54:57

预测统计模型(1)

mapa软件包具有预测功能
forecast程序包也是做时间序列预测的
----------------------------------------------------------------------------------------------------------------------------------------------------------
step 1:下载该软件包之后,程序包-》从本地zip文件安装程序包。
step 2:加载mapa程序包,提示出现“找不到mapa需要的程序包forecast”。
step 3:下载forecast程序包(1.1M),从本地安装,加载该程序包,显示R版本太低。
step 4:下载升级RGui版本至R3.1.1,下载RTool,为以后自己写软件包准备。
step 5:下载尚未完成,有多个程序包不能加载成功的原因是“没有.getNamespace这个函数”和“程序包某某的写码载入失败”。
step 6:下载完成,安装R3.1.1,电脑太热罢工了,休息了几个小时好了,从本地加载的程序包运营都正常。加载rcpp包之后
            , RSNNS包也加载成功了,这是一个做神经网络的程序包。step5中的提示再没有出现。
----------------------------------------------------------------------------------------------------------------------------------------------------------
step7:在R3.1.1中,加载TimeDate,forecast,mapa的过程中,forcast加载失败;于是又补充加载了一个ColorSpace,还是
            不行;于是又加载了一个fracdiff(好像是跟分形有关的,大学时候我自己研究过一阵,颇为之着迷),还是不行;于
            是还是根据提示又加载了tseries和quadprog,终于显示,“This is forecast 5.4”,成功。
step8:现在加载mapa,显示需要miscTools,看名字就知道是个比较杂的工具箱;还需要Parallel,但是软件包库里面没有
            Paralle这个包,只有叫doParallel的,需要forReach,需要iterators,显示加载成功了。
--------------------------------------------------------------------------------------------------------------------------------------------------------
step9:->mapa,我们终于看到了mapa包里面的内容,我们分析下这个函数是怎么写的。
               function (y, ppy = NULL, fh = ppy, ifh = 1, minimumAL = 1, maximumAL = ppy,
                     comb = "mean", paral = 0, display = 0, outplot = 1, hybrid = TRUE,
                     model = "ZZZ", conf.lvl = NULL)
              {
                     if (!is.numeric(y)) {
                     writeLines("Paper reference: ")
                     writeLines("Kourentzes N., Petropoulos F. and Trapero J.R. (2014)")
                     writeLin es("Improving forecasting by estimating time series structural components")
                     writeLines(paste("across multiple frequencies. International Journal of Forecasting,",
                           " 30 (2), 291-302.", sep = ""))
                     return(invisible())
                    }
             if (is.null(ppy)) {
                   if (class(y) == "ts") {
                        ppy <- frequency(y)
                        if (is.null(fh)) {
                              fh <- ppy
                        }
                        if (is.null(maximumAL)) {
                              maximumAL <- ppy
                        }
                  }
                  else {
                         stop(paste("Input ppy is not given and y input not ts class.",
                               "Please provide the periods in a season of the time series",
                               "at the sampled frequency."))
                  }
             }
            mapafit <- mapaest(y = y, ppy = ppy, minimumAL = minimumAL,
                    maximumAL = maximumAL, paral = paral, display = display,
                    outplot = outplot, model = model)
            out <- mapafor(y = y, mapafit = mapafit, fh = fh, ifh = ifh,
                    comb = comb, outplot = outplot, hybrid = hybrid, conf.lvl = conf.lvl)
            return(out)
      }
     <environment: namespace:MAPA>
          我们看到函数就是,先定义了若干变元,然后是一系列的 if 条件选择,if条件下的赋值,和函数变元的关系。
          这些选择条件都是这样的:(1)y是不是数字;(2)ppy是不是空值;(3)class(y)不是等于ts;
          (4)fh是不是空值;(5)maximumAL是不是空值;
          满足了足够的条件对应的操作是这样的:(a)满足(1)显示几行字;不满足(1)返回不可见。
          (b)满足(2)和(3),把frequency(y)赋值给ppy;如果不满足就提示文字出来。
          (c)完成(b)再满足(4),将ppy赋值给fh。
          (d)完成(b)再满足(5),将ppy赋值给maximumAL。
          (e)完成(a)(b)(c)(d),将mapaest赋值给mapafit,将mapafor赋值给out。

           那么,总结下这个函数,主要就是讲估计值赋值为了拟合,输出了mapafor,我疑惑,mapafor估计是个迭代吧。
           也就是说,如果要搞清楚这个函数,我们还需要知道,frequency mapafor 和 mapafit 这三个函数是怎么写的。

=============================================================================
nPS1:MD5是什么意思?
PS2:rcpp是链接C++和R的软件包,有很多其他软件包加载成功前提依赖于它。
PS3:要安装party包,需要先安装strucchange包。
PS4:lpSlove是解线性规划的,我前面做的地铁营收估计是一个整数线性规划问题。
PS5R在介绍一个软件包时候,它的分类下有个In views,In views下面有Optimization,MachineLearning,Environmentric
,Multivariate,Surviva,Spatial,SpatioTemporal
lEconomiticsTimeSeriesFinanceOfficialStatisticsChemPhy
PharmacokineticsPsychometricsSocialScienceHignPerformanceComputingGraphicsWebTechnologies等等,点进去
就是所有该类别下面的软件包,也就是说遇到任何一个问题,只要我判断出了它是什么类型的问题,我就可以去分开的类别
下去寻找现成的能解决问题的软件包,这样,我就像拥有了很多颗大脑!
PS6:我找到了软件包
GenSA,是一般退火算法的一个软件包,这样正好回应帖子开头提出的问题的一部分,我们知道了解决
它的一个工具,接下去,我们需要读懂一个软件包,也就是要搞清楚算法,就像弄清楚Paxos那样一样,然后要画一系列精美
的visio算法解析图。
PS7:package clusteval评估聚类算法的。
PS8:Party 包成功加载之前需要加载grid和zoo。
nPS9:如果,我在做一项很综合性质的工作,几天之内都需要反复的调用一组程序包,那么,难道我每天都需要把这些包都加
载一遍吗?应该不是。可能这需要save Workspace。
nPS10:R版本一直在升,难道我每次都需要重新下载一个版本?
nPS11:doParalle可以代替Paralle?
PS12:我觉得写函数的时候,逻辑是容易出错的,因为涉及到判定条件多复杂,应该是思考的十分清楚之后才去写代码的。
PS13:我觉得原来函数就是,一系列的逻辑条件判断,和执行,形式上,就是这样子的。
PS14:如果我把这个包完全看懂了,R语言的写作习惯,常用函数就都知道了,就会离掌握R,更进一步。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-7-19 08:42:18
好帖,支持楼主坚持写下去
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群