人工智慧演算法 演算法基礎之邁向機器學習

2021-10-21 13:52:00 字數 3301 閱讀 9538

所謂多項式,其實就是由變數和常係數組成的數學表示式,其中的運算只有加法、減法、乘法和正整數的冪運算

比如f (x

)=2x

2+4x

+6f(x)=2x^2+4x+6

f(x)=2

x2+4

x+6接受乙個值x,返回乙個值y,輸入、輸出向量的大小均為1,式中三個係數分別為:2,4,6。其中,各係數均乘以變數x的冪項,係數2乘以x的平方,係數4乘以x,係數6則乘以x的0次冪,也就是常數1,表現出來就是乙個單純的常數項。

上述函式的3個係數可作為乙個向量並表示如下:

[2,4,6]

一般情況下係數的值需要使用機器學習演算法來確定。要達到這個目的,就需要用包含各種預期輸出的訓練集來對演算法進行訓練,其中,不同的預期輸出對應於各種不同的輸入,這樣的訓練資料可以經由實驗收集。要將這些資料擬合為二次多項式,機器學習演算法就很有用處。

通過模擬產生一些訓練資料。

在訓練期間調整乙個機器學習演算法的長期記憶的方法有很多,接下來我們使用的是「貪心隨機訓練演算法」

概括起來基本上就是為長期記憶向量隨機選取一組值。演算法的「貪心」之處在於它只儲存到當前為止效果最好的一組長期記憶值,如果新的長期記憶值比上一組效能更優,毫無疑問演算法會選擇儲存新的這一組值而丟棄之前的值,這一演算法有時也被稱作「隨機漫步演算法」。

"""

ltm當前的長期記憶向量

lowrange隨機範圍的最小值

highrange隨機範圍的最大值

"""function iteration(ltm,lowrange,highrange)

: oldscore = calculatescore(ltm)

#評估當前狀態的效能

lem = ltm.length

oldltm = ltm.clone #儲存當前的副本 以免提公升失敗

for i in

range(0

,lem)

:#隨機設定乙個狀態

ltm[i]

=rand(lowrange,highrange)

#評估新的隨機狀態

newscore = calculatescore(ltm)

#貪心判定,新的隨機狀態相對於上乙個狀態是否有效能上的提公升,如果沒有,則恢復上乙個狀態

if(newscore>oldscore)

: ltm = oldltm.clone

迭代函式把隨機值賦給長期記憶向量,將隨機賦值前後的評估得分進行比較,如果得分沒有下降,則丟棄新的長期記憶值並恢復上乙個狀態的長期記憶值。演算法只接受效能有所改善的結果,這正是演算法被稱作「貪心」的原因,卻並非總是最佳策略。

貪心隨機訓練演算法的結果一般被作為乙個基準,可以將貪心隨機訓練演算法的結果與要評估的新演算法進行比較,如果新演算法的表現不比貪心隨機訓練演算法好,就說明新演算法的效能堪憂。

一種可以用於回歸和分類的統計模型。

徑向基函式網路有乙個代表「長期記憶」的向量,但不存在「短期記憶」向量,其中「長期記憶」由係數和其他引數組合而成。

徑向基函式關於其在x軸上的中點對稱,並在中點處達到最大值,這一最大值稱作「峰值」,且峰值一般為1。實際上在徑向基函式網路中,峰值總是1,中點則視情況而定。

徑向基函式可以是多維的,但無論輸入向量是多少維,輸出都總是乙個標量值。

有很多場景的徑向基函式,比如高斯函式。

返回的則是乙個標量值——這是通過計算徑向基函式的輸入向量和中心向量之間的距離實現的,其中「距離」記為r。當然,要使計算能夠進行,輸入向量和中心向量維數必須相同。只要計算出了這個r,接下來就可以計算出對應的徑向基函式值了——所有的徑向基函式都要用到這個計算出的「距離」r。

雙重豎線的符號表示計算的是「距離」。歐氏距離是徑向基函式中最常用的距離概念,但在特殊情況下,也有可能使用其他的距離概念。

高斯徑向基函式:

常用的徑向基函式包括:

徑向基函式網路是一種既可以用於分類問題,也可以用於回歸問題的統計模型。該網路本質上就是一至多個徑向基函式的加權求和,其中每個徑向基函式均接受乙個帶權重的輸入,從而對輸出進行**。

徑向基函式網路的長期記憶向量由幾個不同的部分組成:

徑向基函式網路把這所有的元素儲存為乙個向量,這個向量即為該徑向基函式網路的「長期記憶向量」。稍後我們會使用貪心隨機訓練演算法或爬山演算法來訓練網路,以使其長期記憶向量的值達到能夠根據提供的特徵資料正確判斷鳶尾花類別的程度。

要建立乙個徑向基函式網路,需要提供下列3項資訊:

輸入和輸出的數目決定於輸入和輸出向量的大小,對於選定資料集,這些值也是給定的。徑向基函式的數目就稍微主觀一些,使用的徑向基函式越多,模型得到預期結果的效能就越好,但同時也會導致模型的時間效率下降。

初始化徑向基函式網路的偽**

function initrbfnetwork(

theinputcount,

//網路的輸入通道數目

rbfcount,

//網路中徑向基函式的數目

theoutputcount//網路的輸出通道數目

)//分配乙個高斯函式,並指定輸入數目和該徑向基函式引數在長期記憶向量中的儲存位置 高斯函式的引數是寬度和中心點位置

result.rbf[i]

=new gaussianfunction(inputcount,result.longtermmemory,rbfindex)

//返回新生成的網路

return result;

}

名為「result」的物件來儲存徑向基函式網路,其中儲存的內容包括長期記憶向量和網路的其他基本引數。

計算徑向基函式網路的輸出:

function computerbfnetwork(

input

,#輸入向量

network#徑向基函式網路

)//計算當前徑向基函式的值

rbfoutput[rbfindex]

=network.rbf[rbfindex]

.evaluate(weightedinput)

}//計算輸出值 各徑向基函式輸出的加權結果

result = alloc(network.outputcount)

for outputindex from

0 to result.length

result[outputindex]

=sum

}//最後 返回計算結果

return result

}

人工智慧演算法 演算法基礎之線性回歸

線性回歸的宗旨是構建乙個相對比較簡單的線性模型,將輸入對映為輸出。對x和y兩個變數,很容易寫出它們對應的線性函式 y mx b,m為斜率,b為截距。該函式之所以被稱為 線性函式 是因為其函式影象畫出來就是一條直線。在同乙個座標系下,曲線代表的則是非線性函式。乙個線性回歸模型只對應乙個變數即稱 單變數...

人工智慧演算法分類

人工智慧演算法大體上來說可以分類兩類 基於統計的機器學習演算法 machine learning 和深度學習演算法 deep learning 總的來說,在sklearn中機器學習演算法大概的分類如下 1 回歸演算法 2 分類演算法 3 聚類演算法 4 降維演算法 5 概率圖模型演算法 6 文字挖掘...

人工智慧演算法(一)進化演算法

我希望用這類文章,來盡可能通俗的解釋一些聽上去很 高大上 的人工智慧演算法,不僅可以幫助自己真正的理解,還能帶來更多的思考。目前想寫專家系統,神經網路,還有本篇進化演算法。不說大話,進入正題 相信大部分對人工智慧感興趣的人都聽說過進化演算法 遺傳演算法,基因演算法 一篇文章當然不可能把進化演算法的方...