精华内容
下载资源
问答
  • 2018-11-28 11:22:16

    问题

    Matlab 画图过程中,经常有需要全屏展示内容的时候。但是 Maltab 默认提供的 figure 参数中并不能原生控制创建窗口的最大化。

    百度网上大多给出的解决方案是:

    SIZE = get(0);					% 获取显示屏的像素尺寸
    h = figure();					% 创建图形窗口
    set(h, 'outerposition', SIZE);	% 设置图形窗口位置和外尺寸为屏幕大小
    

    或者:

    SIZE = get(0);				% 获取显示屏的像素尺寸
    h = figure();				% 创建图形窗口
    set(h, 'position', SIZE);	% 设置图形窗口位置尺寸为屏幕大小
    

    不管是设置 'outerposition' 还是 'position',都会发现最后创建的图形窗口并不是常规意义上的最大化(右上角的最大化按钮并没有激活),并且图像的位置下部会超出状态栏,上部也可能会超出屏幕边界,两侧也会留有缝隙。

    解决方案

    Baidu 不行,就换 Google。

    终于找到目前最完美解决这个问题的方法,调用 Matlab 隐藏的 Java 底层接口。代码如下:

    h = figure();				% 创建图形窗口
    warning('off','MATLAB:HandleGraphics:ObsoletedProperty:JavaFrame');	% 关闭相关的警告提示(因为调用了非公开接口)
    jFrame = get(h,'JavaFrame');	% 获取底层 Java 结构相关句柄吧
    pause(0.1);					% 在 Win 10,Matlab 2017b 环境下不加停顿会报 Java 底层错误。各人根据需要可以进行实验验证
    set(jFrame,'Maximized',1);	%设置其最大化为真(0 为假)
    pause(0.1);					% 个人实践中发现如果不停顿,窗口可能来不及变化,所获取的窗口大小还是原来的尺寸。各人根据需要可以进行实验验证
    warning('on','MATLAB:HandleGraphics:ObsoletedProperty:JavaFrame');		% 打开相关警告设置
    

    参考

    1: Undocumented Matlab
    2: MatlabCentral - Minimize/maximize figure window

    更多相关内容
  • 最大化期望算法(EM)详解

    万次阅读 多人点赞 2018-07-30 09:15:53
    我们知道最大似然估计的根本目的是根据抽样的到的样本(即数据),反推出最有...这个时候就要依靠最大化期望(EM)算法了。 简单的说,EM算法是在依赖于无法观测的隐藏变量的概率模型中,寻找参数最大似然估计或者...

    我们知道最大似然估计的根本目的是根据抽样的到的样本(即数据),反推出最有可能的分布参数(即模型),这是一个非常典型的机器学习的思想。所以在很多领域最大似然估计有着极为广泛的应用。然而,如果已知的数据中含有某些无法观测的隐藏变量时,直接使用最大似然估计是不足以解决问题的。这个时候就要依靠最大化期望(EM)算法了。

    简单的说,EM算法是在依赖于无法观测的隐藏变量的概率模型中,寻找参数最大似然估计或者最大后验估计的算法。

    1. 最大似然估计

    最大似然其实基本的原理非常简单,假设我们手里现在有一个样本,这个样本服从某种分布,而分布有参数,可如果我现在不知道这个样本分布的具体参数是多少,我们就想要通过抽样得到的样本进行分析,从而估计出一个较准确的相关参数。

    以上,这种通过抽样结果反推分布参数的方法就是“最大似然估计”。现在简单思考一下怎么去估计:已知的一个抽样结果和可能的分布(比如说高斯分布),那我就像小学生解方程那样呗,先设出分布的参数(比如高斯分布中就是设出 σ σ μ μ ),然后我计算得到现在这个抽样数据的概率函数,令这个概率最大,看此时相关参数的取值。

    这个思路很容易理解,能使得概率最大的参数一定是“最可能”的那个,这里的“最可能”也就是最大似然估计中“最大似然”的真正含义。

    只是这么说可能有点抽象,看一个具体的例子。设产品有合格、不合格两类,未知的是不合格品的概率 p p ,显然这是一个典型的两点分布b(1,p)。我们用随机变量 X X 表示是否合格,X=0表示合格, X=1 X = 1 表示不合格。如果现在得到了一组抽样数据 (x1,x2,,xn) ( x 1 , x 2 , … , x n ) ,那么不难写出抽样得到这组数据的概率:

    f(X1=x1,X2=x2,,Xn=xn;p)=i=1npxi(1p)1xi(1) (1) f ( X 1 = x 1 , X 2 = x 2 , … , X n = x n ; p ) = ∏ i = 1 n p x i ( 1 − p ) 1 − x i

    我们把上面这个联合概率叫做样本的似然函数,一般把它两侧同时取对数(记为对数似然函数 L(θ) L ( θ ) )。 L(θ) L ( θ ) 关于 p p 的求偏导数,令偏导数为0,即可求得使得L(p)最大的 p p 值。

    (2)L(p)p=0p^=i=1nxi/n

    其中,求得的 p p 值称为p的最大似然估计,为示区分,用 p^ p ^ 表示。

    其他分布可能计算过程更加复杂,然而基本的步骤与这个例子是一致的。我们总结一下:设总体的概率函数为 p(x;θ) p ( x ; θ ) θ θ 为一个未知的参数,现已知来自总体的一个样本 x1,x2,,xn x 1 , x 2 , … , x n 那么求取 θ θ 的最大似然估计的步骤如下:

    1. 写出似然函数 L(θ) L ( θ ) ,它实际上就是样本的联合概率函数

      L(θ)=p(x1;θ)p(x2;θ)p(xn;θ)(3) (3) L ( θ ) = p ( x 1 ; θ ) ⋅ p ( x 2 ; θ ) ⋅ … p ( x n ; θ )

    2. 对似然函数求取对数,并整理

      ln(L(θ))=lnp(x1;θ)++lnp(xn;θ)(4) (4) ln ⁡ ( L ( θ ) ) = ln ⁡ p ( x 1 ; θ ) + ⋯ + ln ⁡ p ( x n ; θ )

    3. 关于参数 θ θ 求偏导,并令偏导数为0,解得参数 θ^ θ ^ ,这就是参数 θ θ 的最大似然估计

      L(θ)θ=0θ^=(5) (5) ∂ L ( θ ) ∂ θ = 0 ⇒ θ ^ = …

    2. 隐藏变量

    上面介绍了最大似然估计,可上面的做法仅适用于不存在隐藏变量的概率模型。什么是隐藏变量呢,我们看这样一个例子。假设现在班上有男女同学若干,同学们的身高是服从正态分布的,当然了,男生身高分布的参数与女生身高分布的参数是不一样的。现在如果给你一个同学的身高,你很难确定这个同学是男是女。如果这个时候抽取样本,让你做上面的最大似然估计,那么就需要做以下两步操作了:

    • 估计一下样本中的每个同学是男生还是女生;
    • 估计男生和女生的身高分布的参数;

    第二步就是上面说的最大似然估计,难点在第一步,你还得先猜测男女才行。用更抽象的语言,可以这样描述:属于多个类别的样本混在了一起,不同类别样本的参数不同,现在的任务是从总体中抽样,再通过抽样数据估计每个类别的分布参数。这个描述就是所谓的“在依赖于无法观测的隐藏变量的概率模型中,寻找参数最大似然估计”,隐藏变量在此处就是样本的类别(比如上例中的男女)。这个时候EM算法就派上用场了。

    3. EM算法的基本思想

    直观考虑这种隐藏变量的问题,你会发现它很麻烦,因为它使得人们陷入了一种两难的境地:我只有知道了哪些样本是属于同一个类别的,才能根据最大似然函数估计这个类别样本的分布参数;同样,我只有知道了不同类别样本的分布参数,才有可能判断现某个样本到底属于哪个类别的可能性更大。

    也就是说,你不确定,我就确定不了;而我不确定,你也确定不了。那怎么办?我们可以先让其中一方随便确定一个值,然后用根据这个值看看对方如何变化,再根据对方的变化调整己方,这样你根据我调整,我再根据你调整,循环往复,最终双方都几乎不变了(也就是收敛了),那就可以确定相关的值了。百度百科上有一个形象的例子,我抄过来,大家可以理解一下:

    “比如说食堂的大师傅炒了一份菜,要等分成两份给两个人吃,显然没有必要拿来天平一点的精确的去称分量,最简单的办法是先随意的把菜分到两个碗中,然后观察是否一样多,把比较多的那一份取出一点放到另一个碗中,这个过程一直迭代地执行下去,直到大家看不出两个碗所容纳的菜有什么分量上的不同为止。”

    EM的求解思路就是我上面所描述的这样。(1)我们先根据经验为每个类别(即隐藏变量)赋予一个初始分布,这相当于是假定了分布参数。然后根据分布的参数可以求取每个数据元组的隐藏变量的期望(相当于实施了归类操作);(2)再根据归类结果计算分布参数(向量)的最大似然值,然后根据这个最大似然值在反过来重新计算每个元组的隐藏变量的期望。这样循环往复,最终如果隐藏变量的期望与参数的最大似然值趋于稳定了,EM算法就算是执行完毕了。

    这么说可能有点抽象,我那上面那个男女生身高的例子再说一遍:(1)首先,我们根据经验,估计男生的身高分布为 (1.7,0.1) ( 1.7 , 0.1 ) ,女生的为 (1.55,0.1) ( 1.55 , 0.1 ) ,当然这就是瞎猜的,不一定准。然后你就可以根据参数可以求出每个数据(身高值)应该是男生的还是女生的,这个分类结果就是隐藏变量的期望;(2)这时,写出最大似然函数,根据“已知”的每个数据的隐藏变量求出参数列表的最大似然值,反过来再执行(1)步,反复迭代,直到收敛。

    综上,我们也就能理解为什么EM算法要叫“最大化期望”算法了,它是由两步组成,第一步是E步,就是求期望;第二步是M步,就是最大化:

    • E步(Expectation):根据当前的参数值,计算样本隐藏变量的期望;
    • M步(Maximum):根据当前样本的隐藏变量,求解参数的最大似然估计;

    4. EM算法的具体步骤

    现有样本 x1,x2,,xn x 1 , x 2 , … , x n ,设每个样本的隐藏变量(这里就当做是属于的类别)为 zi z i ,其取值有 m m 种:z(1),,z(m)。EM算法的任务是求解不同类别样本的参数的最大似然估计。具体步骤如下:

    4.1 写出对数化后的似然函数

    假设对数似然函数如下:

    lnL(θ)=ln(p(x1;θ)p(x2;θ)p(xn;θ))=i=1nlnp(xi;θ)=i=1nlnj=1mp(xi,z(j);θ)(1) (1) ln ⁡ L ( θ ) = ln ⁡ ( p ( x 1 ; θ ) ⋅ p ( x 2 ; θ ) ⋅ ⋯ ⋅ p ( x n ; θ ) ) = ∑ i = 1 n ln ⁡ p ( x i ; θ ) = ∑ i = 1 n ln ⁡ ∑ j = 1 m p ( x i , z ( j ) ; θ )

    公式(1)其实是两步,第一步是对似然函数正常的对数化处理,第二步则把每个 p(xi;θ) p ( x i ; θ ) 用不同类别的联合分布的概率和表示。可以理解为抽到样本 xi x i 的概率为 xi x i 属于类 z(1) z ( 1 ) 的概率,加上 xi x i 属于类 z(2) z ( 2 ) 的概率,加上。。。一直加到 xi x i 属于类 z(m) z ( m ) 的概率。

    本质上讲,我们的目的是要求公式(1)的最大值。但是你看,现在(1)中存在对数项里面的加和,如果求导的话,是非常麻烦的,所以,我们首先想到的就是对公式(1)化简,转换其形式。

    为了方便推导,我们将 xi x i z z 的分布函数用Qi(z)表示。那么对于 Qi(z) Q i ( z ) ,它一定满足如下条件:

    j=1mQi(z(j))=1,  Qi(z(j))0(6) (6) ∑ j = 1 m Q i ( z ( j ) ) = 1 ,     Q i ( z ( j ) ) ≥ 0

    所以公式(1)可以这样化简:

    lnL(θ)=i=1nlnzp(xi,z(j);θ)=i=1nlnj=1mQi(z(j))p(xi,z(j);θ)Qi(z(j))i=1nj=1mQi(z(j))lnp(xi,z(j);θ)Qi(z(j))(2) (2) ln ⁡ L ( θ ) = ∑ i = 1 n ln ⁡ ∑ z p ( x i , z ( j ) ; θ ) = ∑ i = 1 n ln ⁡ ∑ j = 1 m Q i ( z ( j ) ) p ( x i , z ( j ) ; θ ) Q i ( z ( j ) ) ≥ ∑ i = 1 n ∑ j = 1 m Q i ( z ( j ) ) ln ⁡ p ( x i , z ( j ) ; θ ) Q i ( z ( j ) )

    这里的公式(2)非常重要,几乎可以说是整个EM算法的核心公式。可以看到,化简的过程实际上包含了两步,第一是简单的把 Qi(z) Q i ( z ) 嵌入,第二则是根据 ln() ln ⁡ ( ) 函数是凸函数的性质得到的最后那个 的结果。关于凸函数,我会在本文4.2节中详细说。先看看这个式子,我们发现,通过化简,其实是求得了似然函数的一个下界(记为 J(z,Q) J ( z , Q ) ):

    J(z,Q)=i=1nj=1mQi(z(j))lnp(xi,z(j);θ)Qi(z(j))(7) (7) J ( z , Q ) = ∑ i = 1 n ∑ j = 1 m Q i ( z ( j ) ) ln ⁡ p ( x i , z ( j ) ; θ ) Q i ( z ( j ) )

    这个 J(z,Q) J ( z , Q ) 其实就是变量 p(xi,z(j);θ)Qi(z(j)) p ( x i , z ( j ) ; θ ) Q i ( z ( j ) ) 的期望。回忆一下期望的算法是 E(X)=xp(x) E ( X ) = ∑ x p ( x ) ,这里 Qi(z(j)) Q i ( z ( j ) ) 相当于是概率。

    我们发现, J(z,Q) J ( z , Q ) 是比较容易求导的(因为是一个简单的加法式子),但现在的问题在于对下界求导没用,我们要对似然函数求导才行。换个思路想想,下界取决于 p(xi,z(j);θ) p ( x i , z ( j ) ; θ ) Qi(z(j)) Q i ( z ( j ) ) ,我们如果能通过这两个值不断提升下界,使之不断逼近似然函数 ln L(θ) l n   L ( θ ) ,在某种情况下,如果 J(z,Q)=ln L(θ) J ( z , Q ) = l n   L ( θ ) ,那就大功告成了。说到这,先暂停,我们看一下凸函数的定义和性质。

    4.2 凸函数与Jensen不等式

    4.2.1 凸函数

    定义1-凸函数:设函数 f(x) f ( x ) 在定义域 D D 上式凸函数,当且仅当f(x) D D 任意两点x1, x2 x 2 满足:

    f(λx1+(1λ)x2)λf(x1)+(1λ)f(x2)(8) (8) f ( λ x 1 + ( 1 − λ ) x 2 ) ≤ λ f ( x 1 ) + ( 1 − λ ) f ( x 2 )

    则我们将这样的函数称为“凸函数”。其中, λ(0,1) λ ∈ ( 0 , 1 )

    定义2-严格凸函数:如果将定义1中不等式的” ”换成” < < <script type="math/tex" id="MathJax-Element-74"><</script>”,则这样的凸函数为严格凸函数。

    注:有的教材中对凸函数的定义与上面我给出的是相反的,认为 f(λx1+(1λ)x2)λf(x1)+(1λ)f(x2) f ( λ x 1 + ( 1 − λ ) x 2 ) ≥ λ f ( x 1 ) + ( 1 − λ ) f ( x 2 ) 的函数才叫凸函数,而把上面那个定义的函数叫做“凹函数”。其实就数据挖掘和机器学习领域的学习来看,怎么定义都无所谓,所谓“凸”,你从另一个角度看,它就是“凹”的,而且不论怎么定义,两个函数的一些重要的性质是一样的。这里,我们默认上面的定义1。

    另外,一般用下图直观感受凸函数,图中取 λ=1/2 λ = 1 / 2 ,显然这图像是向下“凸”的:

    注:图像截取自博客:【机器学习理论】第4部分 凸函数


    定义3-凸函数的一般化定义:若 f(x) f ( x ) 为凸函数, x1,x2,,xn x 1 , x 2 , … , x n 是定义域 D D 内的n个值,那么:

    f(λ1x1+λ1x1++λnxn)λ1f(x1)+λ2f(x2)++λnf(xn)(9) (9) f ( λ 1 x 1 + λ 1 x 1 + ⋯ + λ n x n ) ≤ λ 1 f ( x 1 ) + λ 2 f ( x 2 ) + ⋯ + λ n f ( x n )

    其中, λi(0,1) λ i ∈ ( 0 , 1 ) ,且 ni=1λi=1 ∑ i = 1 n λ i = 1 。这也就是公式(2)中得到似然函数下界的依据。

    4.2.2 凸函数的性质

    下面给出凸函数的两个重要性质:

    • f(x) f ( x ) D D 上连续,且在D上二阶可导,则若 f′′(x)>0 f ″ ( x ) > 0 f(x) f ( x ) 为凸函数;反之, f(x) f ( x ) 为凹函数

    • Jensen不等式:若 f(x) f ( x ) 是凸函数,则下面的公式(3)成立:

    f((x1+x2++xn)/n)1n(f(x1)+f(x2)++f(xn))(3) (3) f ( ( x 1 + x 2 + ⋯ + x n ) / n ) ≤ 1 n ( f ( x 1 ) + f ( x 2 ) + ⋯ + f ( x n ) )

    可以看出,Jensen不等式就是凸函数的一般化定义的公式的一种特例(参数 λi λ i 全部取等了)。

    放到概率论中,Jensen不等式是如下表述的。若 f(x) f ( x ) 为凸函数,则:

    f(E(X))E(f(x))(4) (4) f ( E ( X ) ) ≥ E ( f ( x ) )

    公式(4)与公式(3)是一样的,只是在概率论中,把系数 λi λ i 的概念用概率替换了。需要注意的是,如果 f(x) f ( x ) 为严格凸函数,那么当且仅当变量 X X 为常数时,即X=E(X)时,公式(4)的等号才成立。

    4.3 E步求取隐藏变量的期望

    了解了公式(4),即Jensen不等式中等式成立的条件。我们回过头再看4.1节末尾的问题。此时使得 lnL(θ)=J(z,Q) ln ⁡ L ( θ ) = J ( z , Q ) 的条件就很明显了,因为 J(z,Q) J ( z , Q ) 是变量 p(xi,z(j);θ)Qi(z(j)) p ( x i , z ( j ) ; θ ) Q i ( z ( j ) ) 的期望(相当于 E(f(x)) E ( f ( x ) ) ),那根据Jensen不等式, X X 为常数时,等号成立。

    我们不妨设:

    (10)p(xi,z(j);θ)Qi(z(j))=c

    其中c为常数。因为 mj=1Qi(z(j))=1 ∑ j = 1 m Q i ( z ( j ) ) = 1 ,所以 zp(xi,z(j);θ)=c ∑ z p ( x i , z ( j ) ; θ ) = c ,有下式成立:

    Qi(z(j))=p(xi,z(j);θ)mj=1p(xi,z(j);θ)=p(xi,z(j);θ)p(xi;θ)=p(z(j)|xi;θ)(5) (5) Q i ( z ( j ) ) = p ( x i , z ( j ) ; θ ) ∑ j = 1 m p ( x i , z ( j ) ; θ ) = p ( x i , z ( j ) ; θ ) p ( x i ; θ ) = p ( z ( j ) | x i ; θ )

    其中 p(z(j)|xi;θ) p ( z ( j ) | x i ; θ ) 是为 zi z i 的后验概率。公式(5)解决了如何选择 Q(z) Q ( z ) 能使得似然函数与其下界相等的问题,其实就是令 Qi(z(j)) Q i ( z ( j ) ) z(j) z ( j ) 的后验概率即可。实际操作中,这个后验概率是根据初始的分布参数决定的。这一步就是EM算法中的E步, Qi(z(j)) Q i ( z ( j ) ) 就是隐藏变量的期望。

    4.4 M步求解最大似然函数

    跟4.1节介绍的方法一致,现在既然

    lnL(θ)=i=1nj=1mQi(z(j))lnp(xi,z(j);θ)Qi(z(j))(11) (11) ln ⁡ L ( θ ) = ∑ i = 1 n ∑ j = 1 m Q i ( z ( j ) ) ln ⁡ p ( x i , z ( j ) ; θ ) Q i ( z ( j ) )

    那就对这个函数关于 θ θ 求偏导,令偏导数为0即可。然后迭代执行E步和M步,直到收敛。

    EM算法的E步和M步可以形式化的表示如下:

    E步: Qi(z(j))=p(xi,z(j);θ) Q i ( z ( j ) ) = p ( x i , z ( j ) ; θ )
    M步: θ=maxθni=1mj=1Qi(z(j))lnp(xi,z(j);θ)Qi(z(j)) θ = m a x θ ∑ i = 1 n ∑ j = 1 m Q i ( z ( j ) ) ln ⁡ p ( x i , z ( j ) ; θ ) Q i ( z ( j ) )

    5. EM算法的收敛性证明

    但是我们写到这里还有一个疑问,这种反复迭代一定会收敛吗?假定 θ(t) θ ( t ) θ(t+1) θ ( t + 1 ) 为第 t t 轮和第t+1轮迭代后的结果, l(θ(t)) l ( θ ( t ) ) l(θ(t+1)) l ( θ ( t + 1 ) ) 为对应的似然函数。显然,如果 l(θ(t))l(θ(t+1)) l ( θ ( t ) ) ≤ l ( θ ( t + 1 ) ) ,那么随着迭代次数的增加,最终会一步步逼近最大似然值。也就是说,只需要证明公式(6)成立即可。

    l(θ(t))<l(θ(t+1))(6) (6) l ( θ ( t ) ) < l ( θ ( t + 1 ) )

    证明:得到 θ(t) θ ( t ) 后,执行E步:

    Qti(z(j))=p(z(j)|xi;θt)(20) (20) Q i t ( z ( j ) ) = p ( z ( j ) | x i ; θ t )

    此时,

    l(θ(t))=i=1nj=1mQi(z(j))lnp(xi,z(j);θt))Qi(z(j))(22) (22) l ( θ ( t ) ) = ∑ i = 1 n ∑ j = 1 m Q i ( z ( j ) ) ln ⁡ p ( x i , z ( j ) ; θ t ) ) Q i ( z ( j ) )

    然后执行M步,求偏导为0,得到 θ(t+1) θ ( t + 1 ) ,此时有公式(7)成立:

    l(θ(t+1))i=1nj=1mQi(z(j))lnp(xi,z(j);θ(t+1)))Qi(z(j))i=1nj=1mQi(z(j))lnp(xi,z(j);θt))Qi(z(j))=l(θt)(7) (7) l ( θ ( t + 1 ) ) ≥ ∑ i = 1 n ∑ j = 1 m Q i ( z ( j ) ) ln ⁡ p ( x i , z ( j ) ; θ ( t + 1 ) ) ) Q i ( z ( j ) ) ≥ ∑ i = 1 n ∑ j = 1 m Q i ( z ( j ) ) ln ⁡ p ( x i , z ( j ) ; θ t ) ) Q i ( z ( j ) ) = l ( θ t )

    简单说一下公式(7),第一步 l(θ(t+1))ni=1mj=1Qi(z(j))lnp(xi,z(j);θ(t+1))Qi(z(j)) l ( θ ( t + 1 ) ) ≥ ∑ i = 1 n ∑ j = 1 m Q i ( z ( j ) ) ln ⁡ p ( x i , z ( j ) ; θ ( t + 1 ) ) Q i ( z ( j ) ) 是由前面的公式(2)决定的;

    第二步 ni=1mj=1Qi(z(j))lnp(xi,z(j);θt))Qi(z(j)) ≥ ∑ i = 1 n ∑ j = 1 m Q i ( z ( j ) ) ln ⁡ p ( x i , z ( j ) ; θ t ) ) Q i ( z ( j ) ) 是M步的定义,M步中,将 θt θ t 调整到 θ(t+1) θ ( t + 1 ) 就是为了使似然函数 l(θ(t+1)) l ( θ ( t + 1 ) ) 最大化。

    综上,我们证明了EM算法的收敛性。

    展开全文
  • 影响力最大化 IMRank 我心中的最优算法

    千次阅读 热门讨论 2020-04-08 21:00:09
    对于影响力最大化问题,我以前写过两个blog 影响力最大化 IC模型+贪心算法 影响力最大化 模拟爆发(粗糙笔记) 但是,对于这两个方法都不是最优的: 对于IC模型 模型使用了贪心算法,然后遍历激活结点,每一次遍历将...

    简介

    对于影响力最大化问题,我以前写过几个个blog
    影响力最大化 IC模型+贪心算法
    影响力最大化 模拟爆发(粗糙笔记)
    影响力最大化 IC 蒙特卡洛模拟 贪心算法
    影响力最大化 IMRank 我心中的最优算法
    影响力最大化 CELF 成本效益延迟转发算法
    但是,对于这两个方法都不是最优的:

    1. 对于IC模型

    模型使用了贪心算法,然后遍历激活结点,每一次遍历将可能被激活的结点按照概率激活。然后选择影响力最大的组合。
    对于我测试使用的邻接矩阵的大小是200*200的,也就是200个点的图,选出影响力最大的五个点的时间是13s左右。准确率比较高。

    1. 对于模拟爆发

    模拟爆发只要设置足够多的模拟爆发次数就几乎可以得到最准确的影响力最大的五个点,但是缺点就是性能太差了,在实际的应用中根本不可能使用。
    表现:
    在这里插入图片描述
    这个时间根本没法看。

    废话不多说,IMRank绝对是我见过的影响力最大问题的最好方法,当然如果有更好的大家一定留言发我。这是我看到的一篇论文,本身没有代码,所以就自己实现了。可以说比 IC加贪心这个方法快了几百倍。

    IMRank (边缘爆破)

    IMRank,我干脆起个中文名字,叫边缘爆破,但是我还真不知道专业的怎么叫。我也没考证,管他呢,就这么叫了,什么是边缘爆破呢。

    算法思路

    这里我只说我自己的理解,借用论文中的一副图:
    在这里插入图片描述
    上图中的下角标是代表的当前的根据M的排名顺序,这个顺序是在不断地迭代中优化的。

    实线表示存在传播概率,或者说传播概率不为零。

    首先,总述一下算法,大致就是说,会为整个图的每一个结点得到一个M(边际影响力),然后根据边际影响力对所有点进行排序。通过不断优化这个排序,最终得到的排序顺序就是影响力最大的点的顺序,那么在我们一开始的要求下就只需要去除前五个点就可以了。

    那么计算M其实是一个倒叙的方法,也就是从后往前推导,上图中的虚线表示扫描节点时传递影响分数的边缘。我们可以看到首先只有存在传播概率的(也就是图中存在实现的)才能存在边际影响力传递。但是v2和v3之间没有是因为2<3,所以不能传递。

    定义M的计算公式:
    在这里插入图片描述

    优化迭代:
    在这里插入图片描述
    r表示根据M的排序,后面的实现中我用list存储。

    效率分析

    我们想一下为什么他这么快:

    • 最重要的,只需要遍历一遍,这是我认为时间短的最重要的原因。
    • 然后我觉得使用了动态规划的思想,每个结点存储的M是可以存储非邻居节点传过来的影响力的,这样大大减少了运算。
    • 充分利用节点的等级与其基于等级的边际影响力扩散之间的相互作用,该框架有效地将任何初始等级调整为迭代式的自洽等级
    • 论文评价:其可扩展性优于最新的启发式算法,同时其准确性可与贪婪算法相媲美

    代码实现

    import operator
    import numpy as np
    import copy
    import time
    
    data = np.loadtxt('graph.txt')
    data = list(data)
    
    def LFA(matrix):
        n = len(matrix)
        Mr = [1 for i in range(n)]
        for i_ in range(1, n):
            i = n - i_
            for j in range(0, i + 1):
                Mr[j] = Mr[j] + matrix[j][i] * Mr[i]
                Mr[i] = (1 - matrix[j][i]) * Mr[i]
        return Mr
    
    def IMRank(matrix):
        start = time.clock()
        t = 0
        r0 = [i for i in range(len(matrix))]
        r = [0 for i in range(len(matrix))]
        while(True):
            t = t + 1
            r = LFA(matrix)
            r = np.argsort(-np.array(r))
            if operator.eq(list(r0), list(r)):
                break
            r0 = copy.copy(r)
        print('运行时间 : {}'.format(time.clock() - start))
        print(r)
    
    IMRank(data)
    

    结果
    在这里插入图片描述

    可见,速度、正确性没得说。

    大家共勉~~

    展开全文
  • 动态规划解决币值最大化问题

    千次阅读 2019-05-15 22:40:03
    币值最大化 问题描述 给定一排n个硬币,其面值均为整数c1, c2, …, cn, 这些整数并不一定两两不同。问如何选择硬币,使得在其原始位置互不相邻的条件下,所选硬币的总金额最大。 解题思路 上述最大可选金额用f(n...

    币值最大化

    问题描述

    • 给定一排n个硬币,其面值均为整数c1, c2, …, cn, 这些整数并不一定两两不同。问如何选择硬币,使得在其原始位置互不相邻的条件下,所选硬币的总金额最大。

    解题思路

    • 上述最大可选金额用f(n)表示,我们可以将所有可行的选择划分为两组:包括最后一枚硬币的和不包括最后一枚硬币的。第一组中,可选包含最后一枚硬币的,最大金额为Cn+f(n-2),即最后一枚硬币加上前面n-2枚硬币可选的最大金额。按照f(n)的定义,另一组中可选的最大金额为f(n-1),即前n-1枚硬币的最大金额。

    • 可得出符合初始条件的递推方程:

    f(n)=max{Cn+f(n-2),f(n-1)}
    f(0)=0,f(1)=c1

    • 再用回溯的方法得到获取最大值的各个币值

    • 用币值大小为5 1 2 10 6 4 的几枚硬币为例子

    • 通过上述方程列表:
      在这里插入图片描述

    • 再通过回溯法得到所选择的硬币

    • 分为两种情况,即选择了第n-1个和没选择第n-1个硬币,如果f(n)=f(n-1)则选择了第n-1个反之则没有选择第n-1个。

    • 代码如下所示:

    
    
    // a币值最大化.cpp : 定义控制台应用程序的入口点。
    //
    
    	#include "stdafx.h"
    	#include"math.h"
    	
    	#define max(x,y)  (x>y)?x:y
    	#define MAX 20
    	int c[MAX];//代表价值
    	int f[MAX];
    
    
    	int coinmax(int n)
    	{
    		c[0] = 0;//初始化c[0]及f[0]
    		f[0] = 0;
    		f[1] = c[1];
    
    		for (int i = 2; i <= n; i++)
    		{
    			f[i] = max(c[i] + f[i - 2], f[i - 1]);
    				//获取最大币值
    
    		}
    		return f[n];
    
    	}
    
    
    
    	int main()
    	{
    
    		int n;
    		printf("请输入有多少个纸币:");
    		scanf("%d", &n);
    		printf("请分别输入纸币的价值:");
    		for (int i = 1; i <= n; i++)
    		{
    			scanf("%d", &c[i]);
    
    		}
    		int arr[MAX];//定义arr数组表示所选择的硬币
    		int num = 0;
    		printf("最大币值为:%d\n", coinmax(n));
    		for (int i = n; i >= 1; i--)
    		{
    			if (f[i] == f[i - 1])//选择了第i-1个,然后再将第i-1个放进arr数组
    			{
    				arr[num++] = c[--i];
    
    			}
    
    			else{
    				arr[num++] = c[i--];//没有选择第i-1个则将他本身先放入数组,
    				               //然后再将数组c的下标减一,arr的下标加一
    
    			}
    
    
    		}
    		printf("各个币值为:");
    		for (int i = 0; i<num; i++)
    
    			printf("%d ", arr[i]);
    
    
    
    
    	}
    
    
    • 运行结果如下:在这里插入图片描述
    展开全文
  • 期望值最大化算法

    千次阅读 2015-12-12 19:54:36
    在参数估计中常常通过最大似然函数进行估计,由于隐变量的存在,不能直接求解这个最大似然函数,期望值最大化算法就是将这个最大似然函数的求解问题转化为求解其下界的最大值的问题,通过一个求隐变量的分布的“期望...
  • Java实现币值最大化问题

    万次阅读 多人点赞 2019-07-21 21:24:11
    请问如何选择硬币,使得在其原始位置互不相邻的条件下,所选硬币的总金额最大。 2 解决方案 2.1 动态规划法 本文所写代码思想参考自《算法设计与分析基础》第三版上一段讲解,具体如下: package ...
  • 影响力最大化 IC模型+贪心算法

    千次阅读 多人点赞 2020-01-28 20:39:07
    记录一下影响力最大化的遍历解决的方法,写的很粗糙,就是怕自己以后忘了,不喜勿喷。 一起共勉~~ 贪心 (1)首先|S|=1,在所有点中选一个在IC模型下跑出感染的点数量最多的点加入S (此时跑了n趟IC) (2)再在剩下...
  • tool('最大化', showMax) fig.canvas.manager.toolbar.add_tool('最大化', 'window_state') fig.canvas.manager.toolmanager.add_tool('最小化', showMin) fig.canvas.manager.toolbar.add_tool('最小化', 'window_...
  • 2浏览器最大化 3截屏并保存文件 4退出浏览器 二、代码 #coding:utf-8 ''' 1设置浏览器窗口大小 2浏览器最大化 3截屏并保存文件 4退出浏览器 ''' #导入依懒的模块 from selenium import webdriver as web ...
  • 文章目录1 线性规划2 利润最大化问题3 求解代码4 结果 1 线性规划 无论我们做什么事,都希望用最小的代价换取最大的利益,而线性规划就是解决这类问题的一个重要方法,下面我们通过1个具体的示例来介绍一下如何使用...
  • #coding = utf_8 import time from selenium import webdriver #浏览器操作 ...#driver.maximize_window() #最大化浏览器窗口 driver.set_window_size(1280,720) #自定义窗口大小: driver.implicitl...
  • !...在MDI子窗体 1、放了一个菜单 Me.MenuStrip... 运行结果为,子窗体显示在了Panel控件之上,但子窗体最大化后,如上截图,子窗体的标题栏不能与主窗体标题合并显示,且窗口菜单中也不显示子窗体的标题?请达人解惑?
  • 社交网络影响力最大化——线性阈值模型(LT模型)算法实现(Python实现) 1、环境配置 环境配置:Win7 Pycharm Anaconda2 该算法每个节点的阈值设为 0.5 2、LT传播模型算法实现 linear_threshold.py (L....
  • 使用ShowWindow(SW_MAXIMIZE),使对话框最大化后,任务栏也被遮住了,如何去掉任务栏的遮盖?而且对话框窗口还处于激活状态。此时,应该没有设置WS_CAPTION属性,只能自己MoveWindow。函数ShowWindow(SW_MAXIMIZE)...
  • IE窗口最小化最大化的快捷键

    千次阅读 2012-02-03 13:55:17
    ·窗口最大化快捷键 Shift+WIND+M Windows键+CTRL+M功能是:重新将恢复上一项操作前窗口的大小和位置 ·在最大化和最小化之间切换的快捷键:WIN+D · 最大化ALT+空格+X  最小化ALT+空格+N 其它有关...
  • VB控件随窗体最大化变化的方法

    千次阅读 2017-12-11 17:05:42
    用代码控制特定的控件随着窗体最大化展现出自己所希望的结果。 第一步:窗体LOAD事件时记下每一个控件的位置属性和大小,并取得窗口大小的属性值。 第二步:计算缩放比,就是用控件的LEFT和WIDTH属性分别
  • 最大最小标准

    万次阅读 多人点赞 2019-02-28 21:10:47
    不同评价指标往往具有不同的量纲,数值见的差别可能很大,不进行处理可能会影响到数据分析的结果。为了消除指标之间的量纲和取值范围差异的影响,需要进行标准处理,将数据按照比例进行缩放,使之落入一个特定的...
  • windows消息控制窗口最大化最小化

    千次阅读 2013-04-24 16:51:33
    var hwnd: hwnd;//句柄 PostMessage(hwnd,WM_SYSCOMMAND, SC_MINIMIZE,0); //最小化 PostMessage(hwnd,WM_...//最大化 PostMessage(hwnd,WM_SYSCOMMAND, SC_CLOSE,0);//关闭 窗口最小化时将释放占用的资源
  • 浮点数加减运算的结果规格处理

    千次阅读 2019-12-28 14:10:22
    对运算结果进行规格处理 (1)先判断结果是不是规格,如不是执行下面几步 (2)补码尾数的最高位和尾数符号相反,如 (3)结果溢出(01,10)则需要右规,否则左规 二.例题分析 例题1: x = 2^110.100101, y = 2^-...
  • 最大值最小值归一 Xjmin是Xj所在列的最小值 Xjmax是Xj所在列的最大值 问题: 能做到归一(0-1zhi之间),但是一旦数据中有一个离群值(特别大的值)就会出现这个离群值做完归一后特别趋近于1,而其他...
  • 注意:ELM构造分类器得到的结果并不在(0,1)区间,通过软最大化将分类结果整合到(0,1)区间,通过模糊积分判别样本的结果. 具体实现步骤: 对于多个ELM分类器软最大化到模糊积分的具体实现: 软最大化具体实现: ...
  • 本文代码均已在 MATLAB R2019b 测试通过,如有错误,欢迎指正。 一、数据规范的原理 ...(1)最小-最大规范 假定min和max分别为属性A的最小值和最大值,则通过下面公式将属性A上的值v映射到区间[new_min, new_max]
  • 最大值最小值归一

    千次阅读 2018-09-07 17:49:00
    1 # -*- coding: utf-8 -*- 2 """ 3 Created on Fri Sep 7 16:28:20 2018 4 ... 7 # 最大值最小值归一:(X-Xmin)/(Xmax-Xmin) 8 import numpy as np 9 import matplotlib.pyplot as ...
  • 参数估计:期望最大化算法

    万次阅读 2014-03-31 13:34:03
    最大化最大似然估计,也就是    这是将 的k种情况展开后的样子,未知参数 和 。  固定 和 ,对 求导得    等于0时,得到    这就是我们之前模型中的 的更新公式。 ...
  • Python——K-means聚类分析及其结果可视

    万次阅读 多人点赞 2020-04-07 15:28:52
    mdl['label'] = clf.labels_ # 对原数据表进行类别标记 c = mdl['label'].value_counts() print(mdl.values)# 以数组形式打印结果 #图形展示 label_pred = clf.labels_ #获取聚类标签 centroids = clf.cluster_...
  • QT中窗体最大化最小化

    千次阅读 2012-07-23 19:35:56
    这几天在看QT,虽然QT已经广泛使用了这么多年,但是自己还是第一次用,遇到许多问题,QT窗体的最大化最小化就是其中之一。下面我说一下。  虽然QT中提供了最大化showMaximized()函数,和全屏函数showFullScreen()...
  • wxWidgets主窗口最大化启动

    千次阅读 2011-11-28 17:09:55
    1.在建立frame的时候使用wxMAXIMIZE参数,不可以和caption属性一起用,建立出来的最大化窗口会没有标题栏,最大最小化按钮等东 西,属于工作区的最大化; 2.在显示窗口的时候一般为使用Show(true),可以选择使用...
  • GWR4软件怎么用+结果解读+结果在ArcGIS中可视

    万次阅读 多人点赞 2020-07-08 09:57:25
    R square:R2,越大越好 综上所述,GWR优于MLR (2)csv文件–GWR中每个点系数、R2 因为global模型全局的系数一样,所以在左图的最下面直接给出结果,而GWR则是每个点/多边形都有一个系数,所以这些系数就会有最大值...
  • 决策树、随机森林结果可视

    万次阅读 多人点赞 2017-12-19 15:13:08
    决策树、随机森林结果可视决策树随机森林结果可视 一 决策树可视环境搭建 二 决策树可视的三种方法 第一种 第二种 第三种 三 决策树可视实例 四 随机森林可视实例 五 决策树各特征权重可视【 本文测试...
  • 2、标准差标准 标准差标准也称作Z-score标准,当某个变量的最大、最小值未知,或存在超出取值范围的离群值(outliers)时,则不适合计算极差,此时可采用标准差标准处理方式。在计算过程中,令变量观测值减去...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,278,223
精华内容 511,289
关键字:

如何让结果最大化