《集体智慧编程》第8章
生活随笔
收集整理的這篇文章主要介紹了
《集体智慧编程》第8章
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.P175
在計算高斯函數時,代碼中的默認標準差為10.0,如果默認標準差為10是得不到正文中的數據的,這里的默認值應該改為1.0
附上高斯函數的公式和圖像
公式中的a代表高斯函數的最大值,b代表平均值(即當高斯函數取最大值時x的值),c代表標準差,c^2表示方差。
上圖表示a=1,b=0, c=1
上圖表示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.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 solutionsx=[]# best solutionsp=[]# velocitiesv=[]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 particleif costf(x[i])<costf(p[i]):p[i]=x[i][:]g=i# Best solution for any particlefor j in range(0,popsize):if costf(p[j])<costf(p[g]): g=jfor d in range(len(x[i])):# Update the velocity of this particlev[i][d]+=lrate*(p[i][d]-x[i][d])+lrate*(p[g][d]-x[i][d])# constrain velocity to a maximumif v[i][d]>maxv: v[i][d]=maxvelif v[i][d]<-maxv: v[i][d]=-maxv# constrain bounds of solutionsx[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]就可以得到結果了
總結
以上是生活随笔為你收集整理的《集体智慧编程》第8章的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《集体智慧编程》第六章
- 下一篇: 《集体智慧编程》第九章