《集體智慧編程》第8章

1.P175
在計算高斯函數時,代碼中的默認標準差爲10.0,如果默認標準差爲10是得不到正文中的數據的,這裏的默認值應該改爲1.0
附上高斯函數的公式和圖像
高斯函數公式
公式中的a代表高斯函數的最大值,b代表平均值(即當高斯函數取最大值時x的值),c代表標準差,c^2表示方差。
標準差爲1
上圖表示a=1,b=0, c=1
標準差爲10
上圖表示a=1, b=0, c=10(注意橫座標數值)
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
注意此處標準差爲1,但是在後邊P181計算按比例縮放後的預測結果時,此處的標準差應該改回10,否則會導致分母爲0的錯誤(error:float division),切記。
2.P182
本頁下方爲了對縮放結果進行優化時,調用了第五章的代碼,但是我們不能直接把第五章的optimization.py文件直接拷貝過來,我們還要對其進行一些修改,或者讀者如果下載了本書的配套代碼就可以直接把\PCI_Code Folder\chapter8中的optimization.py複製過來,但要注意調用第二個geneticoptimize()函數時,chapter8中的文件把函數名稱改爲了swarmoptimize(),也就是說原文中的

>>>optimization.geneticoptimize(numpredict.weightdomain, costf, popsize = 5, lrate = 1, maxv = 4, iters = 20)

應改爲

>>>optimization.swarmoptimize(numpredict.weightdomain, costf, popsize = 5, lrate = 1, maxv = 4, iters = 20)

沒有下載配套代碼的,應該把geneticoptimize()函數改爲

def geneticoptimize(domain,costf,popsize=20,lrate=0.1,maxv=2.0,iters=50):

  # Initialize individuals

  # current solutions

  x=[]



  # best solutions

  p=[]



  # velocities

  v=[]



  for i in range(0,popsize):

    vec=[float(random.randint(domain[i][0],domain[i][1])) 

         for i in range(len(domain))]

    x.append(vec)

    p.append(vec[:])

    v.append([0.0 for i in vec])





  for ml in range(0,iters):

    for i in range(0,popsize):

      # Best solution for this particle

      if costf(x[i])<costf(p[i]):

        p[i]=x[i][:]

      g=i



      # Best solution for any particle

      for j in range(0,popsize):

        if costf(p[j])<costf(p[g]): g=j

      for d in range(len(x[i])):

        # Update the velocity of this particle

        v[i][d]+=lrate*(p[i][d]-x[i][d])+lrate*(p[g][d]-x[i][d])



        # constrain velocity to a maximum

        if v[i][d]>maxv: v[i][d]=maxv

        elif v[i][d]<-maxv: v[i][d]=-maxv



        # constrain bounds of solutions

        x[i][d]+=v[i][d]

        if x[i][d]<domain[d][0]: x[i][d]=domain[d][0]

        elif x[i][d]>domain[d][1]: x[i][d]=domain[d][1]



    #print p[g],costf(p[g])

  return p[g]

就可以得到結果了

發佈了55 篇原創文章 · 獲贊 62 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章