-
當前位置:首頁 > 創(chuàng)意學院 > 技術 > 專題列表 > 正文
神經(jīng)網(wǎng)絡算法作用(神經(jīng)網(wǎng)絡算法作用有哪些)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于神經(jīng)網(wǎng)絡算法作用的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關鍵詞,就能返回你想要的內(nèi)容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務客戶遍布全球各地,如需了解SEO相關業(yè)務請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、神經(jīng)網(wǎng)絡算法
20 世紀五、六⼗年代,科學家 Frank Rosenblatt其受到 Warren McCulloch 和 Walter Pitts早期的⼯作的影響,發(fā)明了感知機(Perceptrons)。
⼀個感知器接受⼏個⼆進制輸⼊, ,并產(chǎn)⽣⼀個⼆進制輸出:
如上圖所示的感知機有三個輸⼊: 。通??梢杂懈嗷蚋佥?#12042;。 我們再引⼊權重: ,衡量輸入對輸出的重要性。感知機的輸出為0 或者 1,則由分配權重后的總和 ⼩于等于或者⼤于閾值決定。和權重⼀樣,閾值(threshold)是⼀個實數(shù),⼀個神經(jīng)元的參數(shù)。⽤更精確的代數(shù)形式如下:
給三個因素設置權重來作出決定:
可以把這三個因素對應地⽤⼆進制變量 來表⽰。例如,如果天⽓好,我們把
,如果不好, 。類似地,如果你的朋友陪你去, ,否則 。 也類似。
這三個對于可能對你來說,“電影好不好看”對你來說最重要,而天氣顯得不是那么的重要。所以你會這樣分配權值: ,然后定義閾值threshold=5。
現(xiàn)在,你可以使⽤感知器來給這種決策建⽴數(shù)學模型。
例如:
隨著權重和閾值的變化,你可以得到不同的決策模型。很明顯,感知機不是⼈做出決策使⽤的全部模型。但是這個例⼦說明了⼀個感知機如何能權衡不同的依據(jù)來決策。這看上去也可以⼤致解釋⼀個感知機⽹絡有時確實能夠做出一些不錯的決定。
現(xiàn)在我們隊上面的結構做一點變化,令b=-threshold,即把閾值移到不等號左邊,變成偏置, 那么感知器的規(guī)則可以重寫為:
引⼊偏置只是我們描述感知器的⼀個很⼩的變動,但是我們后⾯會看到它引導更進⼀步的符號簡化。因此,我們不再⽤閾值,⽽總是使⽤偏置。
感知機是首個可以學習的人工神經(jīng)網(wǎng)絡,它的出現(xiàn)引起的神經(jīng)網(wǎng)絡的第一層高潮。需要指出的是,感知機只能做簡單的線性分類任務,而且Minsky在1969年出版的《Perceptron》書中,證明了感知機對XOR(異或)這樣的問題都無法解決。但是感知機的提出,對神經(jīng)網(wǎng)絡的發(fā)展是具有重要意義的。
通過上面的感知機的觀察我們發(fā)現(xiàn)一個問題,每個感知機的輸出只有0和1,這就意味著有時我們只是在單個感知機上稍微修改了一點點權值w或者偏置b,就可能造成最終輸出完全的反轉(zhuǎn)。也就是說,感知機的輸出是一個階躍函數(shù)。如下圖所示,在0附近的時候,輸出的變化是非常明顯的,而在遠離0的地方,我們可能調(diào)整好久參數(shù)也不會發(fā)生輸出的變化。
這樣階躍的跳變并不是我們想要的,我們需要的是當我們隊權值w或者偏置b做出微小的調(diào)整后,輸出也相應的發(fā)生微小的改變。這同時也意味值我們的輸出不再只是0和1,還可以輸出小數(shù)。由此我們引入了S型神經(jīng)元。
S型神經(jīng)元使用 S 型函數(shù),也叫Sigmoid function函數(shù),我們用它作為激活函數(shù)。其表達式如下:
圖像如下圖所示:
利⽤實際的 σ 函數(shù),我們得到⼀個,就像上⾯說明的,平滑的感知器。 σ 函數(shù)的平滑特性,正是關鍵因素,⽽不是其細部形式。 σ 的平滑意味著權重和偏置的微⼩變化,即 ∆w 和 ∆b,會從神經(jīng)元產(chǎn)⽣⼀個微⼩的輸出變化 ∆output。實際上,微積分告訴我們
∆output 可以很好地近似表⽰為:
上面的式子是⼀個反映權重、偏置變化和輸出變化的線性函數(shù)。這⼀線性使得我們可以通過選擇權重和偏置的微⼩變化來達到輸出的微⼩變化。所以當 S 型神經(jīng)元和感知器本質(zhì)上是相同的,但S型神經(jīng)元在計算處理如何變化權重和偏置來使輸出變化的時候會更加容易。
有了對S型神經(jīng)元的了解,我們就可以介紹神經(jīng)網(wǎng)絡的基本結構了。具體如下:
在⽹絡中最左邊的稱為輸⼊層,其中的神經(jīng)元稱為輸⼊神經(jīng)元。最右邊的,即輸出層包含有輸出神經(jīng)元,在圖中,輸出層只有⼀個神經(jīng)元。中間層,既然這層中的神經(jīng)元既不是輸⼊也不是輸出,則被稱為隱藏層。
這就是神經(jīng)網(wǎng)絡的基本結構,隨著后面的發(fā)展神經(jīng)網(wǎng)絡的層數(shù)也隨之不斷增加和復雜。
我們回顧一下神經(jīng)網(wǎng)絡發(fā)展的歷程。神經(jīng)網(wǎng)絡的發(fā)展歷史曲折蕩漾,既有被人捧上天的時刻,也有摔落在街頭無人問津的時段,中間經(jīng)歷了數(shù)次大起大落。
從單層神經(jīng)網(wǎng)絡(感知機)開始,到包含一個隱藏層的兩層神經(jīng)網(wǎng)絡,再到多層的深度神經(jīng)網(wǎng)絡,一共有三次興起過程。詳見下圖。
我們希望有⼀個算法,能讓我們找到權重和偏置,以⾄于⽹絡的輸出 y(x) 能夠擬合所有的 訓練輸⼊ x。為了量化我們?nèi)绾螌崿F(xiàn)這個⽬標,我們定義⼀個代價函數(shù):
這⾥ w 表⽰所有的⽹絡中權重的集合, b 是所有的偏置, n 是訓練輸⼊數(shù)據(jù)的個數(shù),
a 是表⽰當輸⼊為 x 時輸出的向量,求和則是在總的訓練輸⼊ x 上進⾏的。當然,輸出 a 取決于 x, w和 b,但是為了保持符號的簡潔性,我沒有明確地指出這種依賴關系。符號 ∥v∥ 是指向量 v 的模。我們把 C 稱為⼆次代價函數(shù);有時也稱被稱為均⽅誤差或者 MSE。觀察⼆次代價函數(shù)的形式我們可以看到 C(w, b) 是⾮負的,因為求和公式中的每⼀項都是⾮負的。此外,代價函數(shù) C(w,b)的值相當⼩,即 C(w; b) ≈ 0,精確地說,是當對于所有的訓練輸⼊ x, y(x) 接近于輸出 a 時。因
此如果我們的學習算法能找到合適的權重和偏置,使得 C(w; b) ≈ 0,它就能很好地⼯作。相反,當 C(w; b) 很⼤時就不怎么好了,那意味著對于⼤量地輸⼊, y(x) 與輸出 a 相差很⼤。因此我們的訓練算法的⽬的,是最⼩化權重和偏置的代價函數(shù) C(w; b)。換句話說,我們想要找到⼀系列能讓代價盡可能⼩的權重和偏置。我們將采⽤稱為梯度下降的算法來達到這個⽬的。
下面我們將代價函數(shù)簡化為C(v)。它可以是任意的多元實值函數(shù), 。
注意我們⽤ v 代替了 w 和 b 以強調(diào)它可能是任意的函數(shù),我們現(xiàn)在先不局限于神經(jīng)⽹絡的環(huán)境。
為了使問題更加簡單我們先考慮兩個變量的情況,想象 C 是⼀個只有兩個變量 和 的函數(shù),我們的目的是找到 和 使得C最小。
如上圖所示,我們的目的就是找到局部最小值。對于這樣的一個問題,一種方法就是通過微積分的方法來解決,我們可以通過計算導數(shù)來求解C的極值點。但是對于神經(jīng)網(wǎng)絡來說,我們往往面對的是非常道的權值和偏置,也就是說v的維數(shù)不只是兩維,有可能是億萬維的。對于一個高維的函數(shù)C(v)求導數(shù)幾乎是不可能的。
在這種情況下,有人提出了一個有趣的算法。想象一下一個小球從山頂滾下山谷的過程, 我們的⽇常經(jīng)驗告訴我們這個球最終會滾到⾕底。我們先暫時忽略相關的物理定理, 對球體的⾁眼觀察是為了激發(fā)我們的想象⽽不是束縛我們的思維。因此與其陷進物理學⾥凌亂的細節(jié),不如我們就這樣問⾃⼰:如果我們扮演⼀天的上帝,能夠構造⾃⼰的物理定律,能夠⽀配球體可以如何滾動,那么我們將會采取什么樣的運動學定律來讓球體能夠總是滾落到⾕底呢?
為了更精確地描述這個問題,讓我們思考⼀下,當我們在 和 ⽅向分別將球體移動⼀個很⼩的量,即 ∆ 和 ∆ 時,球體將會發(fā)⽣什么情況。微積分告訴我們 C 將會有如下變化:
也可以用向量表示為
現(xiàn)在我們的問題就轉(zhuǎn)換為不斷尋找一個小于0的∆C,使得C+∆C不斷變小。
假設我們選?。?/p>
這⾥的 η 是個很⼩的正數(shù)(稱為學習速率),于是
由于 ∥∇C∥2 ≥ 0,這保證了 ∆C ≤ 0,即,如果我們按照上述⽅程的規(guī)則去改變 v,那么 C
會⼀直減⼩,不會增加。
所以我們可以通過不斷改變v來C的值不斷下降,是小球滾到最低點。
總結⼀下,梯度下降算法⼯作的⽅式就是重復計算梯度 ∇C,然后沿著相反的⽅向移動,沿著⼭⾕“滾落”。我們可以想象它像這樣:
為了使梯度下降能夠正確地運⾏,我們需要選擇合適的學習速率η,確保C不斷減少,直到找到最小值。
知道了兩個變量的函數(shù) C 的梯度下降方法,我們可以很容易的把它推廣到多維。我們假設 C 是⼀個有 m 個變量 的多元函數(shù)。 ∆C 將會變?yōu)椋?/p>
其中, ∇C為
∆v為:
更新規(guī)則為:
在回到神經(jīng)網(wǎng)絡中,w和b的更新規(guī)則為:
前面提到神經(jīng)⽹絡如何使⽤梯度下降算法來學習他們⾃⾝的權重和偏置。但是,這⾥還留下了⼀個問題:我們并沒有討論如何計算代價函數(shù)的梯度。這里就需要用到一個非常重要的算法:反向傳播算法(backpropagation)。
反向傳播算法的啟示是數(shù)學中的鏈式法則。
四個方程:
輸出層誤差方程:
當前層誤差方程:
誤差方程關于偏置的關系:
誤差方程關于權值的關系
算法描述:
檢視這個算法,你可以看到為何它被稱作反向傳播。我們從最后⼀層開始向后計算誤差向量δ。這看起來有點奇怪,為何要從后⾯開始。但是如果你認真思考反向傳播的證明,這種反向移動其實是代價函數(shù)是⽹絡輸出的函數(shù)的結果。為了理解代價隨前⾯層的權重和偏置變化的規(guī)律,我們需要重復作⽤鏈式法則,反向地獲得需要的表達式。
參考鏈接: http://neuralnetworksanddeeplearning.com/
二、神經(jīng)網(wǎng)絡算法是什么?
Introduction
--------------------------------------------------------------------------------
神經(jīng)網(wǎng)絡是新技術領域中的一個時尚詞匯。很多人聽過這個詞,但很少人真正明白它是什么。本文的目的是介紹所有關于神經(jīng)網(wǎng)絡的基本包括它的功能、一般結構、相關術語、類型及其應用。
“神經(jīng)網(wǎng)絡”這個詞實際是來自于生物學,而我們所指的神經(jīng)網(wǎng)絡正確的名稱應該是“人工神經(jīng)網(wǎng)絡(ANNs)”。在本文,我會同時使用這兩個互換的術語。
一個真正的神經(jīng)網(wǎng)絡是由數(shù)個至數(shù)十億個被稱為神經(jīng)元的細胞(組成我們大腦的微小細胞)所組成,它們以不同方式連接而型成網(wǎng)絡。人工神經(jīng)網(wǎng)絡就是嘗試模擬這種生物學上的體系結構及其操作。在這里有一個難題:我們對生物學上的神經(jīng)網(wǎng)絡知道的不多!因此,不同類型之間的神經(jīng)網(wǎng)絡體系結構有很大的不同,我們所知道的只是神經(jīng)元基本的結構。
The neuron
--------------------------------------------------------------------------------
雖然已經(jīng)確認在我們的大腦中有大約50至500種不同的神經(jīng)元,但它們大部份都是基于基本神經(jīng)元的特別細胞?;旧窠?jīng)元包含有synapses、soma、axon及dendrites。Synapses負責神經(jīng)元之間的連接,它們不是直接物理上連接的,而是它們之間有一個很小的空隙允許電子訊號從一個神經(jīng)元跳到另一個神經(jīng)元。然后這些電子訊號會交給soma處理及以其內(nèi)部電子訊號將處理結果傳遞給axon。而axon會將這些訊號分發(fā)給dendrites。最后,dendrites帶著這些訊號再交給其它的synapses,再繼續(xù)下一個循環(huán)。
如同生物學上的基本神經(jīng)元,人工的神經(jīng)網(wǎng)絡也有基本的神經(jīng)元。每個神經(jīng)元有特定數(shù)量的輸入,也會為每個神經(jīng)元設定權重(weight)。權重是對所輸入的資料的重要性的一個指標。然后,神經(jīng)元會計算出權重合計值(net value),而權重合計值就是將所有輸入乘以它們的權重的合計。每個神經(jīng)元都有它們各自的臨界值(threshold),而當權重合計值大于臨界值時,神經(jīng)元會輸出1。相反,則輸出0。最后,輸出會被傳送給與該神經(jīng)元連接的其它神經(jīng)元繼續(xù)剩余的計算。
Learning
--------------------------------------------------------------------------------
正如上述所寫,問題的核心是權重及臨界值是該如何設定的呢?世界上有很多不同的訓練方式,就如網(wǎng)絡類型一樣多。但有些比較出名的包括back-propagation, delta rule及Kohonen訓練模式。
由于結構體系的不同,訓練的規(guī)則也不相同,但大部份的規(guī)則可以被分為二大類別 - 監(jiān)管的及非監(jiān)管的。監(jiān)管方式的訓練規(guī)則需要“教師”告訴他們特定的輸入應該作出怎樣的輸出。然后訓練規(guī)則會調(diào)整所有需要的權重值(這是網(wǎng)絡中是非常復雜的),而整個過程會重頭開始直至數(shù)據(jù)可以被網(wǎng)絡正確的分析出來。監(jiān)管方式的訓練模式包括有back-propagation及delta rule。非監(jiān)管方式的規(guī)則無需教師,因為他們所產(chǎn)生的輸出會被進一步評估。
Architecture
--------------------------------------------------------------------------------
在神經(jīng)網(wǎng)絡中,遵守明確的規(guī)則一詞是最“模糊不清”的。因為有太多不同種類的網(wǎng)絡,由簡單的布爾網(wǎng)絡(Perceptrons),至復雜的自我調(diào)整網(wǎng)絡(Kohonen),至熱動態(tài)性網(wǎng)絡模型(Boltzmann machines)!而這些,都遵守一個網(wǎng)絡體系結構的標準。
一個網(wǎng)絡包括有多個神經(jīng)元“層”,輸入層、隱蔽層及輸出層。輸入層負責接收輸入及分發(fā)到隱蔽層(因為用戶看不見這些層,所以見做隱蔽層)。這些隱蔽層負責所需的計算及輸出結果給輸出層,而用戶則可以看到最終結果。現(xiàn)在,為免混淆,不會在這里更深入的探討體系結構這一話題。對于不同神經(jīng)網(wǎng)絡的更多詳細資料可以看Generation5 essays
盡管我們討論過神經(jīng)元、訓練及體系結構,但我們還不清楚神經(jīng)網(wǎng)絡實際做些什么。
The Function of ANNs
--------------------------------------------------------------------------------
神經(jīng)網(wǎng)絡被設計為與圖案一起工作 - 它們可以被分為分類式或聯(lián)想式。分類式網(wǎng)絡可以接受一組數(shù),然后將其分類。例如ONR程序接受一個數(shù)字的影象而輸出這個數(shù)字?;蛘逷PDA32程序接受一個坐標而將它分類成A類或B類(類別是由所提供的訓練決定的)。更多實際用途可以看Applications in the Military中的軍事雷達,該雷達可以分別出車輛或樹。
聯(lián)想模式接受一組數(shù)而輸出另一組。例如HIR程序接受一個‘臟’圖像而輸出一個它所學過而最接近的一個圖像。聯(lián)想模式更可應用于復雜的應用程序,如簽名、面部、指紋識別等。
The Ups and Downs of Neural Networks
--------------------------------------------------------------------------------
神經(jīng)網(wǎng)絡在這個領域中有很多優(yōu)點,使得它越來越流行。它在類型分類/識別方面非常出色。神經(jīng)網(wǎng)絡可以處理例外及不正常的輸入數(shù)據(jù),這對于很多系統(tǒng)都很重要(例如雷達及聲波定位系統(tǒng))。很多神經(jīng)網(wǎng)絡都是模仿生物神經(jīng)網(wǎng)絡的,即是他們仿照大腦的運作方式工作。神經(jīng)網(wǎng)絡也得助于神經(jīng)系統(tǒng)科學的發(fā)展,使它可以像人類一樣準確地辨別物件而有電腦的速度!前途是光明的,但現(xiàn)在...
是的,神經(jīng)網(wǎng)絡也有些不好的地方。這通常都是因為缺乏足夠強大的硬件。神經(jīng)網(wǎng)絡的力量源自于以并行方式處理資訊,即是同時處理多項數(shù)據(jù)。因此,要一個串行的機器模擬并行處理是非常耗時的。
神經(jīng)網(wǎng)絡的另一個問題是對某一個問題構建網(wǎng)絡所定義的條件不足 - 有太多因素需要考慮:訓練的算法、體系結構、每層的神經(jīng)元個數(shù)、有多少層、數(shù)據(jù)的表現(xiàn)等,還有其它更多因素。因此,隨著時間越來越重要,大部份公司不可能負擔重復的開發(fā)神經(jīng)網(wǎng)絡去有效地解決問題。
NN 神經(jīng)網(wǎng)絡,Neural Network
ANNs 人工神經(jīng)網(wǎng)絡,Artificial Neural Networks
neurons 神經(jīng)元
synapses 神經(jīng)鍵
self-organizing networks 自我調(diào)整網(wǎng)絡
networks modelling thermodynamic properties 熱動態(tài)性網(wǎng)絡模型
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
網(wǎng)格算法我沒聽說過
好像只有網(wǎng)格計算這個詞
網(wǎng)格計算是伴隨著互聯(lián)網(wǎng)技術而迅速發(fā)展起來的,專門針對復雜科學計算的新型計算模式。這種計算模式是利用互聯(lián)網(wǎng)把分散在不同地理位置的電腦組織成一個“虛擬的超級計算機”,其中每一臺參與計算的計算機就是一個“節(jié)點”,而整個計算是由成千上萬個“節(jié)點”組成的“一張網(wǎng)格”, 所以這種計算方式叫網(wǎng)格計算。這樣組織起來的“虛擬的超級計算機”有兩個優(yōu)勢,一個是數(shù)據(jù)處理能力超強;另一個是能充分利用網(wǎng)上的閑置處理能力。簡單地講,網(wǎng)格是把整個網(wǎng)絡整合成一臺巨大的超級計算機,實現(xiàn)計算資源、存儲資源、數(shù)據(jù)資源、信息資源、知識資源、專家資源的全面共享。
三、神經(jīng)網(wǎng)絡算法的神經(jīng)網(wǎng)絡
思維學普遍認為,人類大腦的思維分為抽象(邏輯)思維、形象(直觀)思維和靈感(頓悟)思維三種基本方式。
人工神經(jīng)網(wǎng)絡就是模擬人思維的第二種方式。這是一個非線性動力學系統(tǒng),其特色在于信息的分布式存儲和并行協(xié)同處理。雖然單個神經(jīng)元的結構極其簡單,功能有限,但大量神經(jīng)元構成的網(wǎng)絡系統(tǒng)所能實現(xiàn)的行為卻是極其豐富多彩的。
神經(jīng)網(wǎng)絡的研究內(nèi)容相當廣泛,反映了多學科交叉技術領域的特點。主要的研究工作集中在以下幾個方面:
(1)生物原型研究。從生理學、心理學、解剖學、腦科學、病理學等生物科學方面研究神經(jīng)細胞、神經(jīng)網(wǎng)絡、神經(jīng)系統(tǒng)的生物原型結構及其功能機理。
(2)建立理論模型。根據(jù)生物原型的研究,建立神經(jīng)元、神經(jīng)網(wǎng)絡的理論模型。其中包括概念模型、知識模型、物理化學模型、數(shù)學模型等。
(3)網(wǎng)絡模型與算法研究。在理論模型研究的基礎上構作具體的神經(jīng)網(wǎng)絡模型,以實現(xiàn)計算機模擬或準備制作硬件,包括網(wǎng)絡學習算法的研究。這方面的工作也稱為技術模型研究。
(4)人工神經(jīng)網(wǎng)絡應用系統(tǒng)。在網(wǎng)絡模型與算法研究的基礎上,利用人工神經(jīng)網(wǎng)絡組成實際的應用系統(tǒng),例如,完成某種信號處理或模式識別的功能、構造專家系統(tǒng)、制成機器人等等。
縱觀當代新興科學技術的發(fā)展歷史,人類在征服宇宙空間、基本粒子,生命起源等科學技術領域的進程中歷經(jīng)了崎嶇不平的道路。我們也會看到,探索人腦功能和神經(jīng)網(wǎng)絡的研究將伴隨著重重困難的克服而日新月異。
四、神經(jīng)網(wǎng)絡算法的必要性
這里的distinct表示去重,也可以用group by實現(xiàn), 兩者的區(qū)別在于distinct會讀取所有的記錄,而group by是在分組之后每組只返回一條記錄,也就是說后者讀取的條數(shù)要少很多,效率會更高一些,因此可以將上述代碼改為:
create table validate_set as
select
user_id,
wm_concat(',',brand_id) as brand
from(
select user_id,brand_id
from t_alibaba_bigdata_user_brand_total_1
where type = '1' and visit_datetime > '07-15'
group by user_id,brand_id
)a
group by user_id;
訓練集和測試集建立好之后,我們可以通過以下命令來計算測試集的推薦數(shù)目:
select sum(regexp_count(brand,',')+1) from t_tmall_add_user_brand_predict_dh;
其中REGEXP_COUNT是ODPS的一個自建函數(shù),它的用法如下:
bigint regexp_count(string source, string pattern[, bigint start_position])
表示計算 source 中從 start_position 開始,匹配指定模式pattern 的子串的次數(shù)。比如我們有一條輸出結果是:100 1,2,3,4,通過計算其中的,數(shù)(3)+1=4就計算出推薦的個數(shù)了。
UDF計算重復條數(shù)
UDF(User-Defined Function)(用戶定義函數(shù)),是用戶根據(jù)實際應用的需要而自行開發(fā)的函數(shù)。在 Eclipse 中的項目下新建 UDF。填入 Package 名稱為:chanvee.udf,和 UDF 類名:CountHits,點擊確認。插件會自動幫我們生成chanvee.udf包用于寫 UDF 代碼,和test.chanvee.udf包用于本地測試。
編輯CountHits.java文件,注意下文的Long不能替換為long類型,否則在ODPS上運行會報Method Not Found錯誤:
package chanvee.udf
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class CountHits extends UDF {
public Long evaluate (String a,String b){
if(a == null || b == null) {
return 0L; //異常值
}
Set<String> set1 = new HashSet<String>();
Set<String> set2 = new HashSet<String>();
set1.addAll(Arrays.asList(a.split(",")));
set2.addAll(Arrays.asList(b.split(",")));
Long hits = 0L;
for(String s : set2){
if( set1.contains(s) )
hits++;
}
return hits;
}
}
本段函數(shù)的主要工作是在a串和b串去重后,計算它們中重復元素的個數(shù)。接下來在本地測試下 UDF 。在test.jark.udf包中有兩個文件TestCountHits.java和TestUDFBase.java。由于如果 UDF 的輸入?yún)?shù)是多個的話,本地測試默認的分隔符是逗號,與我們brand中的逗號沖突了。所以修改下TestUDFBase.java文件的第15行的分隔符為空格(當然也可以其他符號):
private final static String ODPS_SEPARATOR = " ";
同時修改第72行,去掉(String),原因是Long型不能強制轉(zhuǎn)換成String:
return callMeth.invoke(UDFClass, input_parameter.toArray()) + "\n";
在TestCountHits.in文件中輸入測試樣例:
123456,444,555,666 123456,666,777,888
888,999 111,222
111,111,222,222 111,222,222,333
運行TestCountHits.java后,在TestCountHits.out文件中得到測試結果(樣例):
2
0
2
在確認 UDF 沒有問題后,準備上傳。將Package chanvee.udf打成 jar 包,命名為chanvee_udf.jar,置于C:/TOOLS下,執(zhí)行以下命令:
create resource jar C:/TOOLS/chanvee_udf.jar
create function count_hits chanvee.udf.CountHits jark-udf.jar
上述命令作用分別是將用戶 jar 包上傳到 ODPS 和在 ODPS 上注冊函數(shù)并命名為count_hits?,F(xiàn)在使用ls functions命令就能看到我們剛剛注冊的函數(shù)了。
現(xiàn)在,我們就能像調(diào)用一般內(nèi)建函數(shù)一樣調(diào)用我們自己的count_hits函數(shù)了。計算推薦集和驗證集中的重復條數(shù),有下面代碼:
select sum(count_hits(a.brand,b.brand)) hits from t_tmall_add_user_brand_predict_dh a
join validate_set b on a.user_id = b.user_id;
上面演示了一般 UDF 的創(chuàng)建使用過程,其他類似的 UDF 都可以參考以上過程構建。UDF 是 SQL 的一大工具 ,很多規(guī)則算法都可以用過 UDF 方便地實現(xiàn)。
計算評估值
我們知道準確率的計算公式:precision=hitspnums, 其中 pnum 代表推薦的條數(shù)。
召回率的計算公式:recall=hitsrnums, 其中 rnum 為驗證的條數(shù)。
F1:
F1=2∗hitspnum+rnum
為了計算方便,我們用full outer join連接驗證集和推薦集,并將計算出的 hits、pnums、rnums 放到臨時表里:
select sum(count_hits(p.brand,r.brand) hits,
sum(regexp_count(p.brand,',')+1) pnums,
sum(regexp_count(r.brand,',')+1) rnums
from t_tmall_add_user_brand_predict_dh p
full outer join validate_set r on p.user_id = r.user_id
有了這三個值后,就可以用上面的公式輕松計算出評測值了。
select (hits/pnums) precision, (hits/rnums) recall,(2*hits/(pnums+rnums)) F1
from (
select hits , pnums , rnums
from ...
)a;
綜合一下,有如下代碼:
create table evaluation as
select (hits/pnums) precision , (hits/rnums) recall , (2*hits/(pnums+rnums)) F1 ,
hits , pnums , rnums , getdate() eval_time
from (
select sum(count_hits(p.brand,v.brand) hits,
sum(regexp_count(p.brand,',')+1) pnums,
sum(regexp_count(v.brand,',')+1) rnums
from t_tmall_add_user_brand_predict_dh p
full outer join validate_set r on p.user_id = r.user_id
)a;
我們將評測值寫到了evaluation表中,可供組員查看分析。運行一次上面代碼后,若以后再進行評測,可以將第一行改成insert into/overwrite table evaluation后直接運行,這樣可以與上次的結果進行比較。
現(xiàn)在已有的模型算法就可以在本地測試調(diào)優(yōu)后,再上傳到線上進行評估了。
以上就是關于神經(jīng)網(wǎng)絡算法作用相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
神經(jīng)網(wǎng)絡多分類(神經(jīng)網(wǎng)絡多分類問題)
神經(jīng)網(wǎng)絡反向傳播公式的推導(神經(jīng)網(wǎng)絡反向傳播公式的推導方法)
神經(jīng)性頭痛和偏頭痛哪個嚴重(神經(jīng)性頭痛和偏頭痛哪個嚴重些)
一般直播運營的抽成是多少(一般直播運營的抽成是多少?。?/a>
杭州適合窮人發(fā)展嗎(杭州適合窮人發(fā)展嗎知乎)