????為神經(jīng)網(wǎng)絡(luò)尋找數(shù)據(jù)
????為什么規(guī)范化
????指定規(guī)范源
????指定規(guī)范目標(biāo)
神經(jīng)網(wǎng)絡(luò)可以為他們獲取到的數(shù)據(jù)提供深刻的洞察力垃瞧,然而,你不能將任意類型的數(shù)據(jù)直接輸入到神經(jīng)網(wǎng)絡(luò)中乌妒,這種“原始”數(shù)據(jù)必須通常被轉(zhuǎn)換為神經(jīng)網(wǎng)絡(luò)能夠處理的形式色罚,本章將展示如何規(guī)范化“原始”數(shù)據(jù),為encog使用喇颁。
在數(shù)據(jù)能夠規(guī)范化之前,我們必須首先要有數(shù)據(jù)嚎货,一旦你確定神經(jīng)網(wǎng)絡(luò)應(yīng)該做什么橘霎,你必須找一些數(shù)據(jù)教神經(jīng)網(wǎng)絡(luò)怎樣執(zhí)行一個(gè)任務(wù),幸運(yùn)的是殖属,互聯(lián)網(wǎng)提供了豐富的信息能夠被神經(jīng)網(wǎng)絡(luò)使用姐叁。
2.1在哪兒為神經(jīng)網(wǎng)絡(luò)獲取數(shù)據(jù)
互聯(lián)網(wǎng)能夠大大地為神經(jīng)網(wǎng)絡(luò)提供源數(shù)據(jù),在互聯(lián)網(wǎng)上能后找到大量不同格式的數(shù)據(jù)洗显,其中一個(gè)最方便的格式數(shù)據(jù)是逗號分隔值(CSV)格式外潜,有時(shí)候也許需要?jiǎng)?chuàng)建一個(gè)蜘蛛或者機(jī)器人來獲取這些數(shù)據(jù)。
神經(jīng)網(wǎng)絡(luò)一個(gè)非常有用的源是運(yùn)行在加州大學(xué)歐文分校的機(jī)器學(xué)習(xí)倉庫:
這個(gè)機(jī)器學(xué)習(xí)倉庫站點(diǎn)是一個(gè)捐贈(zèng)給加州大學(xué)的豐富的數(shù)據(jù)集倉庫挠唆,這本書將要使用其中幾個(gè)數(shù)據(jù)集处窥。
2.2規(guī)范化數(shù)據(jù)
數(shù)據(jù)從站點(diǎn)獲取,例如上面的列表玄组,通常不能直接傳遞給神經(jīng)網(wǎng)絡(luò)滔驾,神經(jīng)網(wǎng)絡(luò)能夠非常“智能”俄讹,但是它不能接受任何種類的數(shù)據(jù)和產(chǎn)生一個(gè)有意義的結(jié)果哆致,通常這些數(shù)據(jù)首先必須規(guī)范化,我們將開始定義規(guī)范化患膛。
神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)接受一個(gè)float型數(shù)值作為它的輸入沽瞭,通常為了最大效率這些輸入數(shù)值應(yīng)該在-1到+1或者0到+1范圍之間,選擇哪個(gè)范圍通常是由選擇的激活函數(shù)決定的,正如某些激活函數(shù)有正的范圍驹溃,其他的有正和負(fù)兩個(gè)范圍城丧。
例如,對于sigmoid激活函數(shù)豌鹤,僅僅有一個(gè)正的范圍亡哄,相反,雙曲正切激活函數(shù)有正和負(fù)的范圍布疙,大多數(shù)使用雙曲正切激活函數(shù)則規(guī)范化-1到+1的范圍蚊惯。
回想第一章的iris數(shù)據(jù)集,這個(gè)數(shù)據(jù)集可以被應(yīng)用到一個(gè)分類問題,然而,這些數(shù)據(jù)對于神經(jīng)網(wǎng)絡(luò)來說沒有實(shí)際有用陶冷。
在這里顯示部分示例:
這個(gè)數(shù)據(jù)集字段現(xiàn)在必須表示為一個(gè)-1到+1之間的float型數(shù)值。
這里實(shí)際上考慮兩個(gè)不同屬性類型宦焦,首先,在這里有四個(gè)數(shù)值屬性顿涣,每個(gè)將簡單映射到一個(gè)神經(jīng)元波闹,這些值將需要縮放到-1到+1.
類別屬性,有時(shí)被稱為標(biāo)稱屬性涛碑,它提出了一個(gè)獨(dú)特的挑戰(zhàn)精堕,在這個(gè)例子中,iris種類必須表示為一個(gè)或多個(gè)float型數(shù)值蒲障,這個(gè)映射將不是一個(gè)單一的神經(jīng)元歹篓,因?yàn)榘巳齻€(gè)成員,代表種類使用的神經(jīng)元數(shù)將不是一個(gè)單一的神經(jīng)元揉阎,代表種類使用的神經(jīng)元數(shù)有可能是兩個(gè)或者三個(gè)庄撮,這取決于使用的規(guī)范化類型。
下面兩節(jié)將顯示怎樣規(guī)范化數(shù)字值和類值
2.2.1?規(guī)范化數(shù)字值
規(guī)范化一個(gè)數(shù)字值本質(zhì)上是處理一個(gè)數(shù)字值到一個(gè)定義好的數(shù)字值范圍的映射余黎,例如?-1到1重窟,規(guī)范化導(dǎo)致所有屬性在同一范圍內(nèi)沒有一個(gè)屬性比其他的更強(qiáng)大载萌。
規(guī)范化惧财,當(dāng)前所有屬性的數(shù)值范圍必須是已知的,當(dāng)前iris屬性的數(shù)值范圍顯示如下:
考慮“PetalLength”, petal length的范圍是1.0到6.9扭仁,這里必須轉(zhuǎn)換為-1到+1的長度垮衷,可以使用公式2.1:
上面的公式將規(guī)范化一個(gè)值x,在這里變量d指定了該數(shù)據(jù)值的高和低,變量n指定了確定的規(guī)范化范圍乖坠,例如搀突,對于規(guī)范化一個(gè)petal length值3,到范圍-1到+1熊泵,以上的公式代入數(shù)據(jù)就變成為:
這個(gè)結(jié)果為0.66仰迁,這個(gè)值將傳遞到神經(jīng)網(wǎng)絡(luò)甸昏。
對于回歸,神經(jīng)網(wǎng)絡(luò)將返回一個(gè)值徐许,這些值是一個(gè)規(guī)范化的值施蜜,需要還原一個(gè)值,可以使用公式2.3:
比如還原一個(gè)值0.66雌隅,公式2.3代入數(shù)據(jù)變成為:
一旦還原翻默,值0.66就變成了2.0,這是重要的恰起,對于這里的計(jì)算值0.66是完整的被還原修械,Encog提供了這兩個(gè)構(gòu)建類normalization和denormalization,?這些類在這章的最后將被介紹。
2.2.2?規(guī)范化標(biāo)稱值
標(biāo)稱值是用來命名事物的检盼,一個(gè)非常通用的示例是一個(gè)簡單的性別標(biāo)稱值肯污,要么是男性或者女性,另外一個(gè)是任何類型布爾問題梯皿,標(biāo)稱值也包括了“yes/true”或者“no/false”,然而仇箱,不是所有的標(biāo)稱值都僅有兩個(gè)值。
標(biāo)稱值也可以用來描述某物的屬性东羹,如顏色剂桥。神經(jīng)網(wǎng)絡(luò)最擅長處理固定不變的標(biāo)稱值。對于IRIS數(shù)據(jù)集属提,規(guī)范化的標(biāo)稱值是物種权逗。對于IRIS數(shù)據(jù)集,有三種不同的物種需要考慮冤议,這個(gè)值不能改變斟薇。如果對神經(jīng)網(wǎng)絡(luò)進(jìn)行三種訓(xùn)練,就不可能識別出五種恕酸。
Encog支持兩種不同編碼標(biāo)稱值的方式堪滨,最簡單的方式被稱為“1-n”編碼,1-n編碼往往很難訓(xùn)練蕊温,特別是如果有更多的標(biāo)稱類型編碼袱箱。等邊編碼通常是比1-n編碼更好的選擇,這兩種編碼類型將在接下來的兩節(jié)種進(jìn)行討論义矛。
2.2.3?理解1-n?規(guī)范化
1-n編碼是一個(gè)非常簡單的規(guī)范化形式发笔,例如,再一次考慮iris數(shù)據(jù)集凉翻,對神經(jīng)網(wǎng)絡(luò)的輸入時(shí)關(guān)于單個(gè)IRIS的統(tǒng)計(jì)信息了讨,輸出說明評估是哪個(gè)類別的IRIS,是哪個(gè)IRIS類別列表如下:
如果使用1-n規(guī)范化,神經(jīng)網(wǎng)絡(luò)將有三個(gè)輸出神經(jīng)元前计,這三個(gè)神經(jīng)元中的每一個(gè)都代表一種IRIS種類胞谭,由神經(jīng)網(wǎng)絡(luò)預(yù)測的IRIS物種對應(yīng)于最高激活的輸出神經(jīng)元。生成1-n訓(xùn)練數(shù)據(jù)是比較容易的男杈,只需給對應(yīng)于所選iris的神經(jīng)元分配一個(gè)+1,?然后給剩余的神經(jīng)元分配一個(gè)-1韭赘,例如,在setosa iris種類將編碼如下:
同樣的势就,versicolor將編碼如下:
最終泉瞻,virginica將編碼如下:
Encog提供了內(nèi)置的類來實(shí)現(xiàn)這種標(biāo)準(zhǔn)化。這些類將在這一章后面闡述苞冯。
2.2.4?理解等邊規(guī)范化
輸出神經(jīng)元根據(jù)訓(xùn)練集中提供的理想輸出值不斷地進(jìn)行檢查袖牙,實(shí)際輸出和理想輸出之間的誤差用百分比表示,這樣1-N規(guī)范化就會(huì)有問題舅锄,考慮如果神經(jīng)網(wǎng)絡(luò)預(yù)測的是versicolor iris,這時(shí)候應(yīng)該預(yù)測一個(gè)versicolor iris,但是實(shí)際產(chǎn)生的產(chǎn)生和理想輸出如下:
問題是三個(gè)輸出神經(jīng)元中只有兩個(gè)是不正確的鞭达,我們想把這個(gè)錯(cuò)誤的“過失”擴(kuò)大到神經(jīng)元的較大百分比,為此皇忿,必須確定每個(gè)類的唯一值集畴蹭,每一組值應(yīng)該與其他值等距離,是versicolor而錯(cuò)誤的選擇了setosa或者setosa這兩種情況鳍烁,等距離確保具有相同的誤差兩叨襟。
這個(gè)可以用Equilateral類來完成,下面的代碼段演示了如何使用Equilateral類生成這些值:
對Equilateral類的輸入是類的數(shù)量和規(guī)范化范圍幔荒,在上面的代碼中糊闽,有三個(gè)類被規(guī)范化到范圍-1到1,產(chǎn)生以下輸出:
注意爹梁,這三個(gè)類中的每一個(gè)都有兩個(gè)輸出右犹,與1-n編碼相比,這樣減少了所需的神經(jīng)元數(shù)量姚垃,等邊編碼所需的神經(jīng)元數(shù)量總是比1-n編碼少些念链,用等邊編碼時(shí)不會(huì)少于三個(gè)類。
用等邊規(guī)范化前先看看一個(gè)例子积糯,正如之前掂墓,考慮如果神經(jīng)網(wǎng)絡(luò)預(yù)測versicolor iris,而它應(yīng)該預(yù)測verginica iris,輸出和期望值如下:
在這種情況下,只有兩個(gè)神經(jīng)元絮宁,與等邊編碼一致梆暮,現(xiàn)在所有的神經(jīng)元都產(chǎn)生錯(cuò)誤值服协,此外绍昂,只有兩個(gè)輸出神經(jīng)元進(jìn)行處理,略微降低了神經(jīng)網(wǎng)絡(luò)的復(fù)雜度。
神經(jīng)網(wǎng)絡(luò)很少給出與它的任何訓(xùn)練值完全匹配的輸出窘游,使用1-N編碼處理唠椭,看看它的輸出神經(jīng)元產(chǎn)生的最大輸出,此方法不適用于等邊編碼忍饰,等邊編碼顯示計(jì)算出的類等邊值與神經(jīng)網(wǎng)絡(luò)的實(shí)際輸出之間的最短距離贪嫂。
每個(gè)集合在距離上相等的意思是什么?這意味著他們的歐氏距離相等艾蓝,歐幾里得可以用下面的方程計(jì)算:
在上述方程中力崇,變量q表示理想的輸出值,變量P表示實(shí)際輸出值赢织,有N個(gè)理想和實(shí)際的集合亮靴,歐式規(guī)范化是利用Encog中的Equilateral類實(shí)現(xiàn),通常不需要直接處理Encog的Equilateral類于置,本章后面講描述高級規(guī)范化方法茧吊。
如果你有興趣知道精確的等邊數(shù)字計(jì)算方法,訪問以下網(wǎng)址:
http://www.heatonresearch.com/wiki/Equilatera
2.3編程規(guī)范化
Encog提供了大量不同的數(shù)據(jù)規(guī)范化方法八毯,你使用的確切方法將取決于你需要完成的任務(wù)搓侄,這里總結(jié)了三種規(guī)范化方法:
a.??????規(guī)范個(gè)體數(shù)
b.??????規(guī)范csv文件
c.??????規(guī)范內(nèi)存數(shù)據(jù)
下面三節(jié)將討論著三個(gè),從規(guī)范化個(gè)體數(shù)開始
2.3.1?規(guī)范化個(gè)體數(shù)
你經(jīng)常會(huì)想簡單的規(guī)范化或者還原一個(gè)單一的數(shù)字话速,在你的數(shù)據(jù)中的值范圍已經(jīng)知道讶踪,在這種情況下,那就沒有必要去讓Encog自動(dòng)尋找數(shù)據(jù)的范圍泊交。
“登月艙”程序就是一個(gè)很好的例子俊柔,你可以在這里找到“登月艙”的示例:
進(jìn)行規(guī)范化,創(chuàng)建幾個(gè)NormalizedField對象活合,這里你看到的normalizedField對象是登月艙的燃料雏婶。
對于上面的示例,范圍被規(guī)范化到-0.9到0.9之間白指,這非常類似于-1到1之間的規(guī)范化留晚,但不那么極端,這有時(shí)會(huì)產(chǎn)生更好的結(jié)果告嘲,上面的示例也知道燃料的可接受范圍在0到200之間错维。
現(xiàn)在已經(jīng)創(chuàng)建了這個(gè)字段對象,就很容易對值進(jìn)行規(guī)范化橄唬,在這里赋焕,值100被規(guī)范化為變量N:
將n還原為燃料值,使用以下的代碼:
當(dāng)數(shù)字到達(dá)程序運(yùn)行時(shí)仰楚,直接使用normalizedField類是非常有用的隆判,如果已經(jīng)建立了大量的數(shù)字列表犬庇,比如數(shù)組或者csv文件,這個(gè)方法就不會(huì)那么有效了侨嘀。
?
2.3.2?規(guī)范化內(nèi)存數(shù)組
快速規(guī)范化一個(gè)數(shù)組臭挽,使用NormalizeArray類,這個(gè)對象一次規(guī)范化一個(gè)屬性咬腕,在太陽黑子預(yù)報(bào)示例中顯示了規(guī)范化數(shù)組的一個(gè)示例欢峰,這個(gè)例子可以在這里找到:
開始,創(chuàng)建一個(gè)NormalizeArray對象實(shí)例涨共,設(shè)置標(biāo)準(zhǔn)化的高低范圍:
現(xiàn)在纽帖,原始數(shù)據(jù)組可以規(guī)范化成規(guī)范化數(shù)組:
如果你有整個(gè)的數(shù)組要規(guī)范化相同的高低范圍,NormalizeArray類可以很好的處理举反,對于更精細(xì)的控制抛计,請使用前面部分中描述的單個(gè)值的相同技術(shù),但是照筑,所有數(shù)組元素都必須被循環(huán)處理吹截。
2.4規(guī)范化CSV文件
如果規(guī)范化數(shù)據(jù)已經(jīng)存儲(chǔ)在CSV文件中,EncogAnalyst應(yīng)該用來規(guī)范數(shù)據(jù)凝危,java和c#語言可以直接通過EncogWorkbench使用Encog Analyst波俄,這節(jié)說明如何使用它規(guī)范化iris數(shù)據(jù)集,
若要使文件規(guī)范化蛾默,請查看下列位置中找到文件規(guī)范化示例:
這個(gè)例子接受一個(gè)輸入和輸出文件懦铺,輸入文件是iris數(shù)據(jù)集,這里顯示文件的前幾行:
輸出將是一個(gè)規(guī)范化版本的輸出文件支鸡,如下面顯示:
上面的數(shù)據(jù)顯示冬念,所有數(shù)值都被規(guī)范化到-1到1之間,此外牧挣,物種字段分為兩部分急前,這是因?yàn)槲锓N列使用了等邊規(guī)范。
2.4.1?實(shí)現(xiàn)基本文件規(guī)范化
在上一節(jié)中瀑构,你看到EncogAnalyst規(guī)范化文件裆针,在本節(jié)中,你將學(xué)習(xí)實(shí)現(xiàn)此目標(biāo)所需的編程代碼寺晌,通過接受源和目標(biāo)文件開始:
現(xiàn)在創(chuàng)建Encoganalyst和Analystwizard類的實(shí)例世吨。wizard將分析源文件并構(gòu)建執(zhí)行正常化所需的所有規(guī)范化統(tǒng)計(jì)數(shù)據(jù):
現(xiàn)在可以啟動(dòng)wizard:
現(xiàn)在已經(jīng)分析了輸入文件呻征,現(xiàn)在是創(chuàng)建規(guī)范化對象的時(shí)候了耘婚。該對象將執(zhí)行實(shí)際的規(guī)范化:
必須指定CSV的輸出格式,在這種情況下陆赋,使用英語指定小數(shù)點(diǎn)沐祷。同樣重要的是生成輸出頭以方便地識別所有屬性:
?最后嚷闭,我們規(guī)范化這個(gè)文件:
?現(xiàn)在這個(gè)數(shù)據(jù)已經(jīng)規(guī)范化了,規(guī)范化的數(shù)據(jù)也許需要保存以供以后使用戈轿,這將在下一節(jié)介紹。
2.4.2?保存規(guī)范化腳本
Encog統(tǒng)計(jì)規(guī)范化數(shù)據(jù)阵子,這個(gè)數(shù)據(jù)思杯,被稱為歸一化數(shù)據(jù),告訴Encog規(guī)范化的每個(gè)屬性的數(shù)值范圍挠进,這些數(shù)據(jù)可以保存所以不需要每次都重新規(guī)范化色乾,保存數(shù)據(jù)文件,使用以下的代碼:
?文件能夠使用下面代碼后重新加載:
EncogAnalyst保存文件的擴(kuò)展文件后綴為EGA
2.4.3?定制文件規(guī)范化
EncogAnalyst包括了AnalystField對象的集合领突,這些對象持有規(guī)范化的類型和每個(gè)屬性的范圍暖璧,這個(gè)集合可以直接訪問規(guī)范化屬性的改變,同樣的君旦,AnalystField對象也能夠移除和排除來自最終的輸出澎办。
以下的代碼顯示怎樣訪問通過wizard確定的每一個(gè)字段:
在這兒對于每個(gè)AnalystField對象有幾個(gè)重要的屬性,例如金砍,要改變規(guī)范化的范圍到[0, 1],?執(zhí)行以下的代碼:
規(guī)范化模式也能后改變局蚀,使用1-n規(guī)范化而不是等邊規(guī)范化,僅僅使用以下的一句代碼:
EncogAnalyst不僅僅能夠規(guī)范化數(shù)據(jù)恕稠,它也能夠執(zhí)行整個(gè)神經(jīng)網(wǎng)絡(luò)的規(guī)范化琅绅,訓(xùn)練和評估,這部分將在第三章和第四章詳細(xì)介紹鹅巍,第三章說明了怎樣用workbench來實(shí)現(xiàn)千扶,第四章將說明怎樣用代碼來實(shí)現(xiàn)。
2.5總結(jié)
這章說明了怎樣為Encog獲取和規(guī)范化數(shù)據(jù)骆捧,這里有大量不同的數(shù)據(jù)源澎羞,一個(gè)最好的是UCI機(jī)器學(xué)習(xí)倉庫,在本書中提供了大量的數(shù)據(jù)集示例敛苇。
這里有兩種廣泛的規(guī)范化數(shù)據(jù)類煤痕,數(shù)值型和非數(shù)值型,這兩種數(shù)據(jù)類每一個(gè)都有規(guī)范化技術(shù)接谨。
數(shù)值類規(guī)范化通過映射值到一個(gè)指定的范圍摆碉,通常是-1到+1,另外一個(gè)通用的范圍是0到+1,在這一章前面提供了兩個(gè)規(guī)范化和反規(guī)范化的公式脓豪。
非數(shù)值型數(shù)據(jù)通常是一個(gè)定義類的屬性巷帝,對于iris數(shù)據(jù)集例子,iris種類是一個(gè)非數(shù)值型類扫夜,規(guī)范化這個(gè)類楞泼,他們必須轉(zhuǎn)換到一個(gè)float型數(shù)組驰徊,就像數(shù)值數(shù)據(jù)。
Encog支持兩種標(biāo)稱值規(guī)范化堕阔,第一個(gè)被稱為“1-n”,1-n創(chuàng)建一個(gè)和分類數(shù)量相同的神經(jīng)元數(shù)棍厂,類別對應(yīng)的那個(gè)編碼為值1,另外的為0.
等邊編碼是另外編碼類別的一種方式超陆,對于等邊編碼牺弹,大量神經(jīng)元的使用等于1,少于分類項(xiàng)目的數(shù)量时呀,為每一個(gè)類別項(xiàng)目創(chuàng)建一個(gè)統(tǒng)一的float型數(shù)值編碼张漂,它到另外的數(shù)據(jù)分類項(xiàng)目的等邊距離是相等的,這允許所有輸出神經(jīng)元參與每個(gè)分類的部分谨娜,會(huì)比1-n神經(jīng)元編碼導(dǎo)致一個(gè)錯(cuò)誤的影響航攒。
這章介紹EncogAnalyst并說明了將它使用規(guī)范化數(shù)據(jù),EncogAnalyst能夠在EncogWorkbench中使用趴梢,EncogWorkbench是一個(gè)GUI應(yīng)用程序漠畜,允許訪問神經(jīng)網(wǎng)絡(luò)的許多特性而不需要編寫代碼。