劉曼云,趙正旭,郭 陽,趙士偉,曹子騰
1(石家莊鐵道大學 復雜網絡與可視化研究所,石家莊 050043)
2(青島理工大學 機械與汽車工程學院,青島 266520)
宇宙之中充滿了神秘與未知,偌大的宇宙是如何形成以及演化的? 宇宙中無人知曉其數量的星系是如按照何種方式分布的? 宇宙中所有的星球、星體是如何在其軌道上有條不紊得運行的? 星系的光譜有哪些物理性質以及化學成分? 這些問題都激發著我們對天文學的探求欲.天體光譜是對天文學的探索與認知的主要的資源信息,天體光譜的形狀與星體的物理性質、化學成分、運動軌跡、運動狀態有著密切的關系,光譜數據對發現恒星的特征信息提供有利的幫助.星體會拋射出星周氣體,星周氣體具有不同的狀態、性質,其不同的特征會造成恒星光譜發射線在輪廓、寬度上的不同,很少的星體會存在發射線,發射線表示這些星體經歷或正正經歷著一些不穩定的變化,這類星體的發現可以用于研究星體的演化過程.
美國數字巡天計劃(SDSS)、澳大利亞英澳天文臺[1,2]等對于天體中數量龐大的恒星、星系、類星體的光譜信息進行的獲取,為天文學的發展提供了巨大的信息資源.雖然光譜樣本的數據量很大,但仍不能滿足科學界對光譜信息的需求,大天區面積多目標光纖光譜天文望遠鏡,簡稱為LAMOST (Large Sky Area Multi-Object Fibre Spectroscopy Telescope),是我國自主設計并研制的反射施密特望遠鏡,就是為了滿足獲取海量光譜的要求而建造,它位于國家天文臺的興隆觀測站.
LAMOST 的大口徑為4 米,大視場為5 度,光譜觀測系統包括4000 根光纖[3],連接著16 臺光譜儀,其設計上的創新為我國的天文學帶來飛躍式的發展.LAMOST 與國際上同類型的望遠鏡在口徑大小、觀測范圍等方面相比都更勝一籌,是美國數字巡天計劃(SDSS)、澳大利亞英澳天文臺巡天的觀測效率的10~15 倍[4].LAMSOT 的建造的第一個科學目標是根據LAMOST 所觀測到的星體信息,可對宇宙和星系進行研究,通過所獲取的星系光譜得到星系的紅移數據,根據紅移可得到其距離,有了距離便有了其三維分布,從而知曉整個宇宙空間的結構.第二個科學目標是通過對更暗的恒星的觀測,掌握銀河系中更遠處的恒星的分布以及運行的情況,從而對銀河系的結構進行了解.第三個科學目標是通過對大量天體的光譜觀測,根據光譜中包含的不同射線來進行各類天體多波段交叉證認.有關光譜的理論很多,說法不一,光譜信息還能對大量的光譜理論的正確性進行驗證[5].
LAMOST 所觀測到的海量光譜信息構成了一個龐大的天文數據庫,是天文界重要的信息資源,在如今的大數據時代和經濟建設時代,信息資源對國家的發展具有戰略性意義[6].LAMOST 所發布的信息資源為FITS 格式文件,FITS 文件中含有光譜的諸多屬性信息,可以從FITS 文件中提取出與研究相關的屬性信息,通過數據挖掘等技術可對光譜數據之間的聯系進行分析、研究,發掘出恒星光譜分類更準確的依據,還有助于發現未知天體以及脈沖星,脈沖星的信號可為星際導航提供依據.
面對LAMOST 所發布的海量的恒星光譜數據,傳統的人工處理恒星光譜的方法已經不再適用,需要找到更高效的、可利用計算機來處理的恒星光譜分類算法,而數據挖掘中的分類算法就能很好的應用于此.根據適合的光譜自動分類算法處理大量的恒星光譜數據,提高恒星光譜分類速度、效率,高效且便捷地應用于大量數據的分析、處理.
LAMOST 發布的光譜信息包括恒星、星系、類星體、未知天體的光譜信息,將下載的恒星光譜數據進行讀取,并整合到一個csv 文件中,其中可能會摻雜著其他星體的光譜數據,要將其他星體的光譜數據進行刪除,具體方法為將文件中的數據根據class 的屬性值進行排序,然后將class 的類別不為star 的數據選中并刪除;恒星光譜中又包含著諸多子類,最常見的恒星光譜分類系統是哈佛系統[7],此方法為美國一天文學家的創新,將恒星按照溫度的高低進行排序,恒星光譜按照溫度的降序排列為:O,B,A,F,G,K,M,R,S,N 幾個大的類別,每個大類別下又分為諸多小類別,用十進制數值表示,例如光譜A 類型下又分為A0,A1,A2,···,A9 等10 個子類型,這為恒星光譜的分類方面做出了創新性的貢獻,FITS 文件中有一個關于光譜的屬性名稱為subclass,含義為恒星光譜的子分類,需要把子分類的值不是正確范圍內以及類別不明確的光譜數據根據同樣的方法進行刪除.
在收集、處理數據的過程中,經常會遇到特征維度很多的數據,高維度的數據會使我們在后續對數據的處理上非常繁瑣、困難,而且有些數據含有冗余的信息、噪聲信息等,這些數據會對結果的正確性造成影響.所以,需要通過剔除數據中的冗余信息、降低數據維度來達到降低數據量的目的,但又對數據中的重要信息有所保留.降維是數據預處理中非常重要的一個環節,如果不對數據進行預處理,在很多數據處理的算法中便很難得到理想的結果.
在對數據進行降維所選擇的方法為PCA 降維.PCA 是降維方法中使用最頻繁的降維方法,PCA 通過線性投影將高維數據在某方向上進行投影,投影到低維的空間中,此方向可使在投影的維度上,數據之間具有最大的方差,這樣就能保證得到的數據丟失原始數據最少,保留了原始數據中更多的數據特點.PCA 的降維過程,更具體的來說,有一個具有n維屬性特征的數據集,數據集中有m個樣本點,PCA 需要做的就是將具有n維屬性特征的數據集降維到n'(n' 核心代碼如算法1. 算法1.PCA 降維算法pca=PCA(n_components=22)#n_components 為最終得到的維度newDataMat=pca.fit_transform(DataMat)#DataMat 為原始數據,newDataMat 為降維#后的數據print(newDataMat)# 輸出降維后的數據 由于天體距離地球的遠近、天體的亮度不盡相同,所以LAMOST 觀測到的光譜數據的數量級可能會存在著很大的差異[4],對數據進行歸一化處理可使數據處于同一數量級,從而也消除了奇異樣本數據對數據處理結果導致的不良影響.數據歸一化過程是將數據進行同比例縮放,對每個數據進行同樣的處理,使每個數據在被處理后落入一個特定的范圍,如范圍可為[–1,1]或者[0,1]等.在對數據進行分類時,如果分類算法涉及到了神經網絡、最近鄰分類和聚類等,在對數據進行預處理的過程中實現對數據的歸一化操作,會對后續的分類挖掘提供很大的幫助. 對數據進行規范化采用的方法是最小-最大規范化,此方法的思想是對原始數據進行線性變換,將結果變換到[0,1]范圍內,并且不對原始數據之間的關系進行改變.對原始數據中的每個數值進行如下變換: 其中,max、min分別為原始樣本數據中的最大值、最小值,new_max、new_min分別為原始數據經過規范化后的數值中的最大值、最小值,比如,new_max、new_min經常取到的值為1.0,0.0,此方法可以根據數據特點來指定數據進行歸一化后的取值范圍. 對數據進行分類,根據其類別保證數據量的同時,也要保證不同類別的數據量的均衡,如果不同類別的數據量相差較大,在對數據進行分類算法處理的過程中,分類算法會對數量較大的類別投入更多的關注,而忽略數量較小的類別,導致訓練出的分類器的分類性能很低. 重采樣是通過對數量較少的樣本進行增加,減少數量較多的樣本來使不平衡的數據集變得更加平衡,從而改善分類算法的結果.欠采樣也稱為下采樣,是處理數量大的類別所用到的方法,可通過丟棄數量大的類別中的部分數據、去除冗余樣本數據、刪除邊界樣本數據等方法,其目的是減少多數類別的數據量來保證不同類別的數據集的平衡.欠采樣在對數量大的類別樣本進行去除的過程中,會去除掉具有重要信息的樣本數據,而若只去除具有錯誤數據的少數樣本,又不能達到平衡數據集的目的.過采樣也稱為上采樣,過采樣是通過對數量少的類別的數據進行復制,來提高少數類別的數據量,但如果某類別的數據量非常小,而進行過采樣后所要求的數據量又較多,在對此類別數據進行過采樣后,很容易導致過擬合,對數據量小的類別的識別率會沒有意義.為防止過多相同數據的生成,可采用SMOTE 算法,此算法同樣可對數據量小的數據進行過采樣,首先為每個少數類樣本選出幾個近鄰的樣本,將每個樣本與其近鄰的幾個樣本相連接,然后在連接線上隨機取點作為新生成的樣本,這些新樣本與原始樣本并不相同,從而擴大數據量少的類別,使得不同類別的恒星光譜具有大致相同的數據量.SMOTE 算法也是可以直接調用SMOTE 庫來實現數據的平衡. 核心代碼如算法2. 算法2.過采樣SMOTE 算法from imblearn.over_sampling import SMOTE #導入SMOTE 庫print(sorted(Counter(y_train).items())#查看#原始數據中不同類別恒星光譜的數據量X_train,Y_train=SMOTE().fit_sample(x_train,y_train)#對原始數據進行過采樣處理print(sorted(Counter(y_train).items())#得#到不同類別的恒星光譜具有相同的數據量 對數據的處理完成后,就需要采用數據挖掘中的分類算法對數據進行分類.之所以采用BP 神經網絡算法,是因為其具有其他算法所不具有的優點.BP 神經網絡實現了輸入數據經過網絡的傳輸,最終輸出的過程,在這個過程中,BP 神經網絡能夠以任意精度逼近非線性連續函數,具有很強的非線性映射能力;BP 神經網絡在訓練數據的過程中,能夠提取出輸入數據與輸出數據之間的“規則”,并自適應的將“規則”記憶于網絡的權值之中,所以BP 神經網絡具有自適應能力;BP 神經網絡具有著較為復雜的網絡結構,當其中的部分神經元受損后,不會對全局的BP 神經網絡結構造成太大的影響,甚至仍然可以正常工作,具有一定的容錯能力.BP 神經網絡算法適合處理內部機制復雜的問題,而且具有較強的自適應能力與容錯能力,而恒星光譜數據量大,數據關系復雜,所以采用BP 神經網絡算法對恒星光譜數據進行分類是很合適的選擇. 神經網絡,顧名思義,模仿人腦中的傳輸過程,首先是輸入信號進行輸入,經過神經元的層層傳輸以及處理,最終輸出反饋,即得到輸出結果.BP 神經網絡是一種包括3 層或3 層以上的階層型神經網絡,標準的BP 神經網絡模型有3 層,包括輸入層、隱含層、輸出層,如圖1所示.BP 神經網絡具有一層輸入層,一層輸出層,可包含多層隱含層,具有很強的記憶與泛化能力[8],通過對網絡中的權值和閾值不斷地進行調整,來降低預測誤差平方和. 圖1 3 層BP 神經網絡結構示意圖 利用BP 神經網絡系統實現對恒星的分類,其過程類似于上述中信號在神經網絡中的傳輸過程.可以把目標源的輪廓信息、顏色信息、光譜能量分布信息作為輸入數據,輸入到神經網絡系統的輸入層,神經網絡系統按照一定的規則、特定函數來對這些信息進行判斷、處理、分析,輸出層就會給出目標源信息的特征量,然后分析、總結輸出層輸出的數據信息,判斷、總結目標源的特點,從而可以實現對目標源的分類.BP神經網絡包括兩個階段,第一個階段稱為正向傳播過程,輸入數據從輸入層輸入神經網絡,經過層層網絡的計算、處理,得到輸出層各個單元的輸出值.記BP 神經網絡的輸入層節點數為I,輸入向量記為Xp=(x0,x1,x2,···,xI–1).輸出層的節點數為K,隱含層節點數為J,輸入層節點數一般表示數據集中對于數據的屬性描述有I個,將屬性描述對應的屬性值作為BP 神經網絡的輸入值,而數據集中每個樣本的分類類別作為BP 神經網絡的期望輸出值,輸出值為K個,隱含層第j個神經元的閾值αj來表示,輸出層第k個神經元的閾值用βk來表示,輸入層第i個神經元與隱含層第j個神經元間的權值用vij來表示,隱含層第j個神經元與輸出層第k個神經元間的權值用wjk來表示.對于BP 神經網絡,總會有一個理想化的輸出向量,稱為期望輸出向量,表示為Dp=(d1,d2,d3,···,dK–1) 輸入層數值表示: 輸入層的每個神經元的輸入值分別與其連接的隱含層的第j個神經元對應的權值相乘,然后求和,得到隱含層中第j個神經元的輸入值,表示為: 隱含層的輸出:隱含層的第j個神經元輸入值netj經過激活函數的處理得到其輸出值: 其中,激活函數一般選取Sigmoid 函數[9]: 隱含層的每個神經元的輸出值分別與其連接的輸出層的第k個神經元對應的權值相乘,然后求和,作為輸出層中第k個神經元的輸入值,表示為: 輸出層的輸出:輸出層的第k個神經元輸入值netk經過激活函數的處理得到其輸出值: BP 神經網絡的實際輸出與期望輸出之間總會有一定的差別,把差別稱為誤差,對于每個樣本的誤差函數的計算公式為: 如果數據集中有N個樣本,則N個樣本的總誤差計算公式為: 其中,Ep表示p的輸出誤差,表示樣本p的期望輸出,Okp表示BP 神經網絡的實際輸出. 第二個階段為反向傳播過程,經輸出層輸出的數據得到輸出誤差,輸出誤差反向向前傳輸經過各隱含層,計算隱含層各單元的誤差,再根據此誤差來對前層的權值進行修正.具體過程為: 首先對BP 神經網絡中的輸出層與隱含層之間的連接權值進行調整,輸出層的誤差表示為[10]: 對于輸出層與隱含層之間的權值調整為[10]: 其中,η為學習步長,取值區間為(0,1). 然后對BP 神經網絡中的隱含層與輸入層之間的連接權值進行調整,隱含層的誤差表示為[10]: 對于隱含層與輸入層之間的權值調整為[10]: BP 神經網絡算法的流程圖如圖2所示. 圖2 BP 神經網絡算法流程圖 讀取存儲恒星光譜的光譜文件,提取出在不同波長處的光譜波長信息以及光譜類別信息,每個文件中共有3909 個波長數據,提取出光譜信息后,將其中不是恒星以及恒星子類別不明確的光譜數據進行剔除,將光譜波長數據中的冗余數據錯誤數據進行刪除,然后對數據進行降維操作,選擇將光譜波長數據降維成22 維數據,既提取出了其中的重要數據信息,又減少了數據量,方便對數據的操作處理.然后對數據進行歸一化處理,消除數據之間的數量級差距,同時也減小數據,降低對數據的計算量.還要對數據進行平衡處理,通過采樣操作使不同類別的恒星光譜數據具有相似的數據量. 將恒星光譜的波長信息作為BP 神經網絡的輸入,類別信息作為BP 神經網絡的期望輸出,輸入數據經過BP 神經網絡層層傳遞以及反饋,經過BP 神經網絡權值、閾值的不斷修正,使輸入數據經過BP 神經網絡的傳輸后,實際的輸出結果能最大限度的接近期望輸出,從而使誤差達到最下,即較高的分類正確率. BP 神經網絡隱含層的確定可根據輸入層與輸出層節點數目來確定,假設BP 神經網絡的輸入層節點為m個,輸出層節點為n個,則隱含層節點的選取范圍為當設置BP 升級網絡的輸入層節點為22,隱含層節點為13,輸出層為5,基于交叉驗證的BP 神經網絡得到的結果有時為70.34%,而有時又可達76.66%,其中的正確率還是有一定差距的,因為每次選取的訓練集、測試集是不同的,所以導致最終的預測結果也是不同的. 交叉驗證是一種估計泛化誤差的模型選擇方法,在進行誤差估計之前不需要任何假設條件,操作簡單、方便,交叉驗證在各種類型的模型選擇中都可適用,所以其應用非常廣泛[11].當分類算法在對數據中的訓練集進行訓練后得到訓練模型,如果用此訓練模型再去對與訓練集有交集數據的測試集進行誤差估計,會導致預測誤差非常低,得到錯誤的預測結果. 經常用的交叉驗證方法為K-折交叉驗證方法(Kfolder Cross Validation,K-CV).K-折交叉驗證是將數據集隨機分成k份,其中k–1 份作為訓練集,1 份作為測試集,在訓練的過程中,依次從k份中選擇一份作為測試集,剩余的k–1 份為訓練集,每次用訓練集進行模型訓練,用訓練出的模型對測試集進行測試,進行結果預測,得到預測的正確率與誤差[12].K份數據就需要進行k次訓練與測試,最后將得到的k個結果求平均值作為最終預測結果.K-折交叉驗證的優點是數據集中的所有數據都作為了訓練集和測試集,每個數據樣本都被驗證過,這樣可使預測結果更具有客觀性,對預測結果求平均值也降低了偶然性誤差. 在數據需要進行過采樣時,需要注意與交叉驗證過程的順序問題.如果在交叉驗證之前進行過采樣同樣會導致過擬合的問題,因為在對數量小的類別進行過采樣后,對數據集進行隨機劃分,不能保證測試集與訓練集中的數據沒有交集.用一個例子來說明,如圖3,最左邊一列為原始數據,假設包含3 個類別,其中兩個類別的數據量較小;接下來如果首先對少數類別的數據進行過采樣操作,得到圖中第2 列數據集;然后進行交叉驗證中的數據劃分過程,會發現訓練集與測試集中包含著同樣的數據,會導致最終結果產生過擬合的問題. 所以,需要在交叉驗證后對數據進行過采樣操作,如圖4所示,首先將驗證樣本從數據集中挑選出來,剩余數據作為訓練集;然后對訓練集中數量小的類別進行過采樣,得到如圖中第3 列所示,此時訓練集與測試集中的數據是沒有重復的,會防止預測結果產生過擬合.在進行10 折交叉驗證的過程中,同樣是在交叉驗證的每次循環中做過采樣,即每次在訓練集中插入與測試集無交集的數據來保證數據平衡. 圖3 先過采樣再交叉驗證 圖4 先過采樣再交叉驗證 BP 神經網絡中存儲著諸多信息,主要有兩方面的信息,一方面是網絡的結構,包括網絡的輸入層、隱含層以及輸出層的節點個數以及隱含層的層數;另一方面網絡中連接每一層之間的權值.網絡中的輸入層、輸出層節點個數一般是可以確定的,而隱含層層數與節點個數則由用戶憑經驗而設定,設定的過小或過大都會造成不好的影響;網絡中的權值開始是在一個范圍內進行初始化的,在反向傳播過程中,會根據誤差來進行調整.用BP 神經網絡算法對數據進行訓練、測試時,測試的只是其中的一部分數據,對這部分數據的測試結果并不代表對其他數據具有相似的測試結果,而采用交叉驗證的BP 神經網絡,可使所有的數據都用于訓練模型,最終得到的結果會穩定、可靠;實驗過程中消除了數據分配的隨機性而帶來的誤差影響,確保實驗的可重復性. 利用10 折交叉驗證進行BP 神經網絡,將數據集平均分成10 份,每次從中選出1 份作為測試集,剩余9 份作為訓練集,BP 神經網絡用訓練集來訓練出網絡模型,得到網絡中的權值、閾值等,確定了BP 神經網絡模型,再用訓練好的模型對測試集進行結果預測.具體思想過程如圖5所示,將數據集平均分成10 份,分別用編號1,2,3,···,10 來表示,第1 次運行過程是將編號為1 的那部分數據作為測試集,剩余編號為2~10 的9 份數據作為訓練集,得到第1 個測試結果1,第2 次運行過程是將編號為2 的那部分數據作為測試集,剩余的編號為1、3~10 的9 份數據作為訓練集,得到測試結果3,以此類推,最后一次訓練過程是將編號為10 的那部分數據作為測試集,剩余的編號為1~9 的9 份數據作為訓練集,得到測試結果10.然后對10 次的測試結果求平均值,得多最終的測試結果. 利用同樣的數據作為實驗的輸入數據,類別信息作為期望輸出數據,輸入層節點為22 個,輸出層節點為5,設置隱含層節點為12,基于交叉驗證的BP 神經網絡得到的結果為:[72.92%,79.12%,79.17%,67.7%,65.6%,78.1%,80.2%,69.8%,74%,76.7%].從10 次預測的10 個結果中可以發現,最小的預測正確率為65.6%,而最大的預測正確率為79.17%,最大值與最小值之間還是有一定的差距的,所以利用交叉驗證,進行10 次訓練與預測,再求得10 次預測結果的平均值,會得到一個較為平穩、準確的數據結果為74.331%.對預測結果的影響因素有輸入數據的質量、隱含層節點數的定義等,所以在確定BP 神經網絡輸入層節點、輸出層節點后,還需對隱含層節點的數量進行不同的設定來尋找較高的預測結果[13].基于大量實驗,發現當設定隱含層節點數為14 時,得到的較高的預測結果為:[82.24%,78.5%,80.37%,83.18,%,79%,84.11%,81.3%,83.18%,74.3%,78.28%].從數據中同樣可以發現,最小值為74.3%,最大值為84.11%,最大值與最小值差距較大,所以對10 次預測結果求得均值為80.446%. 圖5 10 折交叉驗證過程示意圖 在對數據進行分類前,需要對數據進行噪聲剔除、數據降維、數據規范化、數據平衡預處理,可保證數據在訓練過程中,減少訓練時間,并且可使訓練得到的BP 神經網絡更為準確,從而可以得到較高的預測結果.BP 神經網絡結構中的各層節點都是由數據來控制的,但隱含層的節點的設定在一定范圍內是隨機的,不同的隱含層節點的設定BP 神經網絡的預測結果是有一定的影響的,所以需要基于大量的實驗來確定使BP 什么網絡具有最高預測性能的隱含層節點數目.基于交叉驗證的BP 神經網絡,幾乎所有的數據都經過了BP 神經網絡算法的訓練,既可以在對數據進行過采樣的過程中防止產生過擬合,訓練出的BP 神經網絡更為穩定,降低了隨機性,而且多次訓練得到的預測結果再求均值,可以避免偶然的誤差對結果造成的影響,使測試結果更接近正確的、真實的結果.
2.3 數據規范化

2.4 數據平衡

3 BP 神經網絡算法研究
3.1 BP 神經網絡原理














3.2 BP 神經網絡實現
4 基于交叉驗證的BP 神經網絡
4.1 交叉驗證


4.2 基于交叉驗證的BP 神經網絡
4.3 實驗結果

5 結語