㈠ 為什麼LMD方法分解出的分量跟文獻里比較總是少了很多,是程序的問題么
JPEG2000圖像壓縮標准及其關鍵演算法
周唐寧曉軍徐威浦
(人工智慧與機器人研究所西安西安交通大學,710049,中國)
:JPEG2000圖像壓縮應用,以適應不斷發展,出現了一個新的靜止圖像壓縮標准。 JPEG2000圖像編碼系統實施過程中,基本演算法和關鍵技術進行了描述,這一新標準的特點和應用,並分析了其性能。
關鍵詞:JPEG2000圖像壓縮;離散小波變換;速率控制;地區的利益
1引言
快速增長的多媒體應用領域的不斷發展,網路,傳統的JPEG壓縮技術已無法滿足人民的數字化多媒體圖像數據的要求,功能更強大,效率較為顯著的靜止圖像壓縮標准中提到的發展議程,這是JPEG2000 。
JPEG(聯合圖像專家組)標准ISO 10918-1(JPEG)靜止圖像壓縮標准,國際標准化組織(ISO)委員會的領導下制定的第一套國際流行的靜態圖像壓縮設立的該委員會的。由於JPEG優良的品質,使他在短短幾年內取得巨大成功,被廣泛應用於領域的互聯網和數碼相機,80%的圖像在網站上使用的JPEG壓縮標准。然而,目前的JPEG靜止圖像壓縮標准,有一個良好的率失真性能的中端和高比特率,但低比特率的范圍內,會出現明顯的塊效應,其質量已達到不可接受的。 JPEG無法提供在一個單一的流有損和無損壓縮,圖像壓縮,不能支持超過64×64 K.與此同時,盡管目前的JPEG標準的規定重新開始的間隔,但圖像質量時,遇到位錯誤將受到嚴重損壞。
要解決這些問題,1997年3月以來,JPEG圖像壓縮標准委員會開始開發的新一代圖像壓縮標准,以解決上述問題。 2000年3月的東京會議上,新一代的編碼壓縮標准JPEG2000圖像壓縮編碼演算法來決定顏色的靜態圖像。
JPEG2000系統分為以下七個部分:
①JPEG2000圖像編碼系統;
②擴展(①添加更多的功能和復雜性的核心定義);...... />③運動JPEG2000;在
④一致性;在
⑤參考軟體(目前包含Java和C);
⑥復合圖像文件格式(文檔掃描和傳真應用程序);
⑦①最小支持度(技術報告)。 在
①充分認可的ISO標準定義的核心壓縮技術,以最小的文件格式,②??⑥定義的壓縮文件格式的擴展。其中,①已經敲定,其餘的仍在進行過程??。 JPEG2000標準的第1部分本文討論的基礎上。
2 JPEG2000系統的特點
JPEG2000其獨特的優勢來彌補目前的JPEG標準的不足之處。甲離散小波變換演算法,圖像可以被轉換成一系列模塊,可以更有效地存儲像素的子頻帶,因此,JPEG2000格式的圖像壓縮比可以增加10%至30%,JPEG壓縮的基礎上的圖像顯示更加細膩流暢。換句話說,在線觀看使用JPEG2000壓縮的圖像,不僅下載速度是快了近30%,比使用JPEG格式,但質量會更好。對於當前的JPEG標准,在相同的壓縮流中不能同時提供有損和無損壓縮,在JPEG2000系統中,通過選擇參數,它是可能的有損和無損壓縮的圖像,並能滿足高圖像質量的要求醫學圖像處理,圖像庫的需要。 JPEG圖像下載網路上的「塊」傳輸,只能是漸進式顯示,而JPEG2000圖像格式的支持漸進傳輸(漸進式傳輸),可讓影像所需的解析度重建或像素精度所需的圖像傳輸控制,所需的圖像解析度質量要求終止解碼,而不是接受整個圖像的壓縮碼流。 JPEG2000採用小波技術,使用其本地的傑出的特性,可以是隨機的,以獲得一定的圖像的感興趣區域(ROI)的非解壓縮,壓縮後的圖像數據傳輸,過濾,和其他操作的情況下的壓縮碼流中。
JPEG2000圖像編碼與解碼系統
本節介紹了JPEG2000圖像編解碼系統。圖1示出了在編碼器和解碼器的框圖。
早在編碼器的預處理,第一源圖像處理的結果,離散小波變換,小波系數。然後,對小波系數進行量化和熵編碼,標準的輸出流(比特流)的最終組合物。該解碼器是編碼器的逆過程,第一碼流以進行解壓縮,並進行熵解碼,然後逆量化和離散小波逆變換,並進行合成處理後,的逆變換的結果,得到的重構圖像數據。雖然JPEG2000編解碼器是類似過程和JPEG,但為的兩個特定的實施方案的每一個步驟中,有一個非常大的差異。的編碼處理的一般步驟如下:
(1)將多個顏色分量組成的圖像分解成由單一顏色成分??的圖像。組件之間存在一定的相關性,可以減少數據冗餘組件之間的轉換通過分解,以提高壓縮效率;
矩形板(2)成分的圖像被分解成均勻的尺寸 - 圖像片劑。的圖像片材是變換和編解碼器的基本單元;
(3)每一個圖像薄片小波變換進行。圖像多級系數。這些不同的級數系數的不同解析度的圖像,可重構圖像;
(4)的多級分解的結果組成的多個子帶的小波系數。他們說,的頻率特性的圖像的局部區域??中的薄膜(而不是整個圖像);
(5)子頻帶上的系數量化,和組成的代碼塊的矩形陣列;
(6)中的系數的位平面在一個碼塊(即在一個代碼塊具有相同的權重,這些位的整系數)熵編碼;
(7)相對於背景的圖像區域,可以是更高質量的編碼區的利益;
(8)通過增加比特列掩碼的抗干擾;
(9)在每個碼流的報頭結構的前面,他介紹了這些屬性的源圖像,各種情況下的分解和編碼風格。磁頭結構可以用於定位,提取,解碼和重構的圖像,所得到的圖像可以有期望的解析度時,重現性精度,感興趣的區域,或其它特性。
編碼處理被劃分成以下過程:預處理,核心處理和比特流組織。預處理部分包括的圖像切片,dc電平位移(DC)和分量變換。核心處理部分由離散小波變換,量化和熵編碼。機構代碼塊,其中包括分區,組織層和數據包的比特流的一部分。
3.1預處理
(1)的圖像切片
切片是指與源圖像的矩形塊 - 圖像切片,不相互重疊,每個圖像被劃分成作為一個獨立的圖像編碼表。編碼所有的操作都??進行了形象片。形象片的基本單位轉換和編解碼器。圖象切片降低存儲空間的要求,和他們的重建是獨立進行的,所以可用於解碼的特定區域?而不是整個圖像的圖像。當然,圖象切片將影響圖像質量。小塊的圖像失真大於大的圖像切片。引起的圖像失真的圖像切片圖像在低比特率將更加嚴重。
(2)DC電平轉換
DC電平移位,應進行離散小波變換的圖像的每個片。當解碼時,它可以正確地恢復從符號值與?重建的無符號的樣值。該DC電平移位是唯一的無符號的圖像切片的像素組成。電平移位不影響圖像質量。在解碼器中,離散小波逆變換,扭轉的重構圖像的DC電平移位。
(3)成分變換
和JPEG2000支持多分量圖像。不同的組件並不需要有相同的位深度,也不需要是無符號數。可收回的系統(無損),唯一的要求是必須遵循由相應的輸入分量圖像一致的比特深度,每個輸出分量圖像的位深度。
3.2核心處理
(1)小波變換
不同於傳統的離散餘弦變換,小波變換具有多解析度分析的特點,反映信號局部特徵的信號。通過離散小波變換,小波系數的圖像,和分解的一系列視情況可以是圖像切片。小波系數的圖像由幾個子帶系數圖像。這些子帶系數的圖像切片的水平和垂直方向的空間頻率特性的圖像描述的。不同子頻帶的小波系數反映了不同的空間解析度的圖像片材的特性。通過多級小波分解,小波系數的兩個高頻信息的本地區域的??的圖像的膜(如圖像的邊緣),所述的膜的低頻信息的圖像(如圖像的背景)。因此,即使在低比特法的情況下,我們可以保持的更詳細的圖像(如邊緣)。另外,根據分解的系數所表示的解析度的圖像在水平和垂直方向僅由小波系數表示的圖像的上半部分。因此,由解碼的圖像的不同級別的系數,它是能夠得到具有不同的空間解析度(或清晰,或模糊)的圖像。
小波變換的JPEG2000標準的,因為這方面的優勢已通過。在該編碼系統中,為每個圖像薄片Mallat的金字塔小波分解。經過廣泛的測試,JPEG2000使用兩種小波濾波器:LeGall 5/3濾波器的Daubechies 9/7濾波器。前者可用於有損或無損壓縮的圖像壓縮,這只能用於有損壓縮。
JPEG2000標准,小波濾波器實現模式:基於卷積和升降機構的基礎上。周期對稱延伸,這樣就可以防止圖像失真的邊緣上的過濾器的操作,應進行的具體實現的圖像的邊緣。此外,為了減少所需的空間在變換的開銷,標準的應用程序的基於行的小波變換技術。
(2)量化
上的解析度的圖像,人的視覺系統需要具有一定的局限性,通過適當的量化的變換系數的精度降低的主觀圖像質量的前提下,而不影響,來實現圖像壓縮的目的。的量化的關鍵是設計合理的量化步長的大小,根據轉換後的圖像的特徵,並重構的圖像的質量要求和其他因素。量化操作是不利的產生的量化誤差。然而,除的情況下,也就是,量化步長的大小是1,和小波系數是整數,拍攝得到的通過小波變換的小波濾波器的可收回整數5/3的查詢結果在這種情況下符合。
在JPEG2000標准,對於每個子帶可以具有不同的量化步長的大小。然而,在一個子帶是只有一個量化步長。量化每個小波系數具有兩個部分:符號和幅度。編碼量化的小波系數。對於無損壓縮,量化步長的大小必須是1。熵編碼
圖像
(3)變換,量化,在一定程度上,在空間域和頻域,以減少冗餘,但這些數據在統計意義上,仍然有一個相關的,其中的熵編碼,以消除數據之間的統計相關性。的量化的子帶系數被分成小的長方形單元 - 的碼塊(代碼塊)。
在圖2中所示,使用兩層的編碼策略,首先使用基於上下文的算術編碼器,獨立嵌入的代碼塊,每個碼塊進行編碼,嵌入的代碼塊壓縮後的比特流。然後,根據率失真優化的原則盈科拓展(後壓縮率失真)優化演算法思想,壓縮比特流的所有代碼塊合適的攔截,組織成一個壓縮碼流具有不同的質量水平層。每個層上的壓縮位流,壓縮後的比特數據流的所有的層與前面的可重構一定質量的圖像。貢獻為每個代碼塊中的每個層的壓縮位流的層次組織的信息,必須進行編碼,即在截斷點的層的信息,和編碼等的代碼塊中的位流。自使用小波變換的圖像,整個圖像的壓縮流的可伸縮性,解析度,並且因此,在壓縮碼流既可以是質量和解析度可伸縮性。由於,在獨立編碼的代碼塊,因此可以要求,隨機接入對應的代碼塊的壓縮位流進行解碼,以重建所需的圖像區域。
①第一層編碼演算法
與傳統的算術熵編碼是不同的各系數反過來,JPEG2000編碼系統的代碼塊的量化系數被組織成一個位平面數,從最顯著的位平面(MSB)第一,然後由每個位平面的算術編碼的子波系數中的比特。
第一層編碼可被視為兩部分:生成的上下文(CF)和算術編碼的編碼裝置(AE)。的生成的范圍內,的順序掃描的代碼塊中的所有位。頂部向底部掃描,在每個位平面的代碼塊,從左至右,從左上角的系數開始,並為每一個生成一個上下文。算術編碼器的基礎上,為每一個編碼所生成的上下文。被轉換為一個符號 - 幅度模式的
量化後的小波系數。遇到的第一個1位當從MSB到LSB的編碼,所述像素被稱為是顯著的,否則,是不顯著的。通過以下四種方式的背景下,所有位是他們的鄰居:
歸零碼(零編碼,ZC),用於在當前位平面編碼的非顯著的像素將成為顯著;登記/>遊程長度編碼(遊程長度編碼,RLC),用於編碼位於在同一列中的四個非顯著性的像素,如果他們的鄰里非顯著性;
符號編碼(符號編碼,SC )時,該位變得顯著,他的符號位編碼;
振幅幅度細化編碼(MR)是用來編碼一個顯著的一點。
每個位平面的三個編碼通道,以進行編碼。通道1是傳播路徑的重要性(意義傳播通道),鄰近的像??素的至少有一個在該通道中的重要性,使用ZC和SC編碼。信道2的幅度細化路徑(幅度細化證),在該通道中所有最重要的位進行編碼,使用MR。通道3是明確的通道(清理通行證),而不是在最後兩個信道編碼的像素,信道編碼,ZC,LRC SC。進行檢查,以確定它是否應該被編碼在三個通道中的位平面的每一個。
上下文一起通過以下方式獲得的編碼信道,發送到編碼的算術編碼器,用於和相應的數據。在這里,使用的自適應二進制算術編碼[1],主要是考慮到計算的復雜性,並且易於實現。執行算術編碼得到一個單獨的嵌入的代碼塊,每個代碼塊之後,壓縮後的比特流中。
②的第二層編碼演算法
PCRD率失真優化演算法思想[1,2]中的第二層編碼演算法,壓縮後的比特流中的所有代碼塊嵌入適當的截取,分層組織,形成整個圖像質量分級壓縮的流。的第二層編碼演算法也可以被認為在兩部分:速率控制和壓縮位流的層次組織。通過某些編解碼措施的,並獲得最優質的重建圖像壓縮比特率的速率控制。根據需要層的分層編碼參數壓縮的比特流,並且每一層的編碼率,估算的率失真閾值的每個層的層次組織,然後估計失真閾值的每個層的速率,按照率的代碼塊失真演算法找到嵌入每個碼塊的壓縮後的比特流中的層上的截止點,將碼塊壓縮比特流打包,並存儲在按照規定的格式,形成的圖像壓縮,將被截斷流。碼流的層次組織,每個層中含有一定量的質量信息,以提高圖像質量的基礎上,在前面層。因此,用戶可以控制傳輸的圖像根據自己的需求,實現令人滿意的圖像,停止傳輸,在一定程度上緩解目前有限的網路帶寬瓶頸所造成的大量的圖像數據。
3.3流組織
更好的應用程序的圖像交換JPEG2000壓縮流函數飛灰,JPEG2000提供的格式來存儲的壓縮位流和所需的解碼參數,壓縮單元,被組織以形成最終的數據流的數據流包。
JPEG2000關鍵技術
在本節中,說明JPEG2000中使用的關鍵技術。
4.1離散小波變換
JPEG2000傳統JPEG最大的不同是,他放棄了基於塊的離散餘弦變換(DCT)的JPEG編碼,而不是利用小波變換(DWT )為基礎的多解析度編碼。
餘弦變換的頻譜分析工具是經典之作,他考察整個時間域的時域特性,頻域特性或頻域的過程,平穩過程,他有很好的效果,但對非平穩過程中,有幾個缺點。在JPEG中,離散餘弦變換的圖像壓縮的8×8條,然後順序地放置在該文件中,該演算法由廢棄的頻率信息,來實現壓縮,從而圖像的壓縮率就越高,頻率信息將被丟棄。在極端的情況下,JPEG圖像,只保留了基本信息的反射圖像的外觀,精細的圖像細節丟失。小波變換的現代譜分析工具,他不僅考察當地的時域頻域特徵的過程,但還可以檢查地方特色的時域頻域的過程中,即使對於非平穩過程處理也很方便。圖像變換可以是一系列的小波系數,這些系數可以有效地壓縮和存儲,此外,小波的粗糙的邊緣可以是圖像的更好的性能,因為他消除DCT壓縮通常具有塊效應。
4.2碼率控制演算法
JPEG2000碼率控制方法來計算理想的截止點為流,以獲得最佳的重建圖像質量下給定的壓縮率。速率控制的盈科拓展的率失真優化演算法。的率失真優化,即給定的最大編碼速率為整個壓縮流,對每個碼塊的壓縮的比特流,以確定適當的截斷點,滿足的條件下,使具有最小失真的重建圖像。嵌入的代碼塊編碼具有以下特徵:以產生壓縮後的比特流中,根據需要,也可以設置成不同的長度的比特流的一個子集,被截斷;截斷舉辦所有碼塊的比特流,一定質量的圖像可以被重建。
4.3漸進傳輸特性
JPEG圖像上下載的網路傳輸「塊」,它只能漸進式顯示,和JPEG2000圖像格式的支持漸進傳輸。 2漸進傳輸的JPEG2000漸進式漸進傳輸,根據該決議的傳輸質量。與漸進傳輸的質量是根據傳輸的圖像數據的輪廓,然後逐漸傳輸的數據的細節,以不斷提高圖像的質量,根據該決議的漸進傳輸,低解析度的第一次傳輸圖像,圖像的基礎上提高其解析度後的第一個圖像。漸進傳輸的圖像,使用戶不必像以前那樣,圖片下載,然後才決定是否有必要,並幫助用戶快速瀏覽和選擇大量的圖片,以有效地解決了網路傳輸的瓶頸問題。
4.4地區的利益壓縮
JPEG2000的一個極其重要的優勢是ROI(感興趣的區域,一個地區的利益)。用戶可以指定任何區域?有興趣的畫面,然後指定在這些區域的壓縮質量的壓縮或解壓縮的規定在某些領域的復甦。這是因為子的地方,完全恢復到本地波在空間域和頻域的圖像,並不需要所有的編碼准確地保留,可以作為他的編碼的相應部分有沒有錯誤。在實際應用中,可以在使用低壓縮比,以便獲得更好的圖像的圖像中感興趣的部分,而其它部分,在??高壓縮比,以節省存儲空間。這將確保沒有任何重要的信息會丟失,同時有效地壓縮數據量,實現了真正的「互動」的壓縮。
5 JPEG2000標準的應用
隨著科學和技術的發展,網路已經滲透到每個人的生活。然而,有限的網路帶寬,高品質的圖像,因為大量的數據,和一個偉大的在??網路上的傳輸延遲。因此,請允許選擇合適的圖像解析度,需要用戶使用PC,筆記本電腦,掌上電腦或PDA通過數據機訪問圖像數據,互聯網接入,瀏覽和傳輸是必要的。
軍事偵察和氣象預報,衛星遙感圖像通過遠程無線的信道傳輸,傳輸中出現錯誤是不可避免的。由JPEG2000編碼器的輸出流的特定數據流的形式,有效地抑制該錯誤的能力。因此,通過無線的衛星通信信道的數據流回到地面接收站,在解碼過程中的地面接收站可以使用的JPEG2000流內部的組織形式以避免錯誤引起的,由於傳輸錯誤解碼。
另外,安全確認,驗證,和醫療領域,JPEG2000是具有廣泛的應用范圍。可以預見,在不久的將來,JPEG2000將被廣泛的應用在以下領域:互聯網,移動和攜帶型設備,列印,掃描(出版物的預覽),數碼相機,遙感,傳真(包括彩色傳真和互聯網傳真) ,醫療應用,數字圖書館和電子商務。
6結束語
JPEG2000的目的是創建一個新的圖像編碼系統的率失真和主觀圖像質量優於現有的JPEG標准壓縮編碼系統,可提供低比特率圖像壓縮,而壓縮碼流可以是靈活的手柄部分的漸進傳輸的壓縮數據流,圖像,諸如隨機存取,景點,以及壓縮的碼流較強的耐受性能的區域實現,這一標准將與當前的JPEG標准兼容。 JPEG2000圖像壓縮標准,其優異的性能,廣泛應用於數碼相機,遙感,傳真,醫療保健,以及電子商務等領域,將成為21世紀的主流靜止圖像壓縮標准。
參考文獻
[1] JPEG 2000圖像編碼ystem.JPEG 2000最終委員會草案1.0版,2000,16(3);
<BR / [2]陶布曼D.的高性能Scable,圖像壓縮與EBCOT.IEEE跨圖像處理,1994,3(9):572?578
[3]張小蒂等。新一代靜止圖像壓縮標准JPEG2000。電信科學,2001(5)
[4]:栗東糜。發展靜止圖像壓縮標准JPEG2000。電視技術,2001(6)
[D DWT]汪蕤軒面向JPEG2000積體電路設計與模擬,2002年
wisher_lxy |瀏覽119次0條評論|引用(0 )|娛樂中心
再別康橋最近發表
生命是最重要的積極!
靜音
XML的解析器和性能比較(轉載)
JPEG2000摘要[轉]
為什麼人總是那麼復雜嗎?
永遠不知道放棄是美麗的!
我要自由!
我要自由!
生命是如此之輕
最後回覆嘿,它的復雜性復雜
提供的「博客。 COM
㈡ 數據挖掘 | 數據理解和預處理
數據挖掘 | 數據理解和預處理
小編遇到過很多人(咳咳,請不要對號入座),拿到數據後不管三七二十一,先丟到模型中去跑,管它具體什麼樣呢,反正「大數據」嘛,總能整出點東西來。
但就像上次說過的,「大數據」很有可能帶來「大錯誤」!所以在數據挖掘工作開始前,認真的理解數據、檢查數據,對數據進行預處理是至關重要的。
很多人說,數據准備工作真是個「體力活」,耗時耗力不說,還異常的枯燥無味。這點小編承認,建模之前的數據處理確實是平淡的,它往往不需要多高的智商,多牛的編程技巧,多麼高大上的統計模型。
但是,它卻能時時觸發你的興奮點,因為它需要足夠的耐心和細心,稍不留神就前功盡棄。
在這次的內容里,小編首先會從「數據理解」、「變數類型」和「質量檢查」三個方面進行闡述,然後會以一個自己做過的實際數據為例進行展示。
一、數據理解
拿到數據後要做的第一步就是理解數據。
什麼是理解數據呢?不是簡單看下有多少Excel表,有多少行,多少列,而是要結合自己的分析目標,帶著具體的業務需求去看。
首先,我們需要明確數據記錄的詳細程度,比方說某個網站的訪問量數據是以每小時為單位還是每天為單位;一份銷售數據記錄的是每家門店的銷售額還是每個地區的總銷售額。
其次,我們需要確定研究群體。研究群體的確定一定和業務目標是密切相關的。
比方說,如果我們想研究用戶對產品的滿意度與哪些因素有關,就應該把購買該產品的所有客戶作為研究群體;如果我們想研究用戶的購買行為受哪些因素影響,就應該同時考察購買人群和非購買人群,在兩類人群的對比中尋找關鍵因素。
研究群體的確定有時也和數據的詳細程度有關。
比如我們想研究「觀眾影評」對「電影票房」的影響,我們既可以把「每部電影」看成一個個體,研究「影評總數」對「電影總票房」的影響,也可以把「每部電影每天的票房」看成一個個體,研究「每天的影評數」對「每天的電影票房」的影響。
具體選擇哪一種取決於我們手上有什麼樣的數據,如果只有總票房和總影評數的數據,那我們只能選擇第一種;如果有更詳細的數據,那就可以考慮第二種方案。
需要注意的是,這兩種方案還會影響我們對於模型的選擇。
例如,如果研究「每天的影評數」對「每天電影票房」的影響,那每部電影又被細分為很多天,同一部電影不同時間的票房會有較高的相似性,這就形成了一種層次結構,可以考慮使用層次模型(hierarchical model)進行分析。
最後,當我們確定了研究目標和研究群體後,我們需要逐一理解每個變數的含義。有些變數和業務目標明顯無關,可以直接從研究中剔除。
有些變數雖然有意義,但是在全部樣本上取值都一樣,這樣的變數就是冗餘變數,也需要從研究中剔除。
還有一些變數具有重復的含義,如「省份名稱」和「省份簡稱」,這時只需要保留一個就可以了。
二、變數類型
所有變數按其測量尺度可以分成兩大類,一類是「分類變數」,一類是「數值變數」。不同類型的變數在處理方法和後期的模型選擇上會有顯著差別。
【分類變數】
分類變數又稱屬性變數或離散變數,它的取值往往用有限的幾個類別名稱就可以表示了,例如「性別」,「教育程度」,「收入水平」,「星期幾」等。細分的話,分類變數又可分為兩類,一類是「名義變數」,即各個類別間沒有順序和程度的差別,就像「手機系統」中ios和安卓並沒有明顯的好壞差別,「電影類型」中「動作片」和「科幻片」也都是一樣的,說不上哪個更好或更差。
另外一類是定序變數,即不同類別之間存在有意義的排序,如「空氣污染程度」可以用「差、良、優」來表示、「教育程度」可以用「小學、初中、高中、大學」來表示。
當研究的因變數是分類變數時,往往對應特定的分析方法,我們在後面的章節會陸續講到,這里暫且不談。
當研究中的自變數是分類變數時,也會限制模型選擇的范圍。有些數據挖掘模型可以直接處理分類自變數,如決策樹模型;但很多數據挖掘模型不能直接處理分類自變數,如線性回歸、神經網路等,因此需要將分類變數轉換成數值變數。
對於定序自變數,最常用的轉換方法就是按照類別程度將其直接轉換成數值自變數,例如將空氣污染程度 「差、良、優」轉換為「1,2,3」。
對於名義自變數,最常用的轉換方法就是構造0-1型啞變數。例如,對於「性別」,可以定義「1=男,0=女」。
當某個名義變數有K個類別取值時,則需要構造K-1個啞變數。例如教育程度「小學,初中,高中,大學及以上」,可以構造三個啞變數分別為:x1:1=小學,0=其它;x2:1=初中,0=其它;x3:1=高中,0=其它。當x1,x2,x3三個啞變數取值都為0時,則對應著「大學及以上」。
需要注意的是,有時候名義變數的取值太多,會生成太多的啞變數,這很容易造成模型的過度擬合。
這時可以考慮只把觀測比較多的幾個類別單獨拿出來,而把剩下所有的類別都歸為「其它」。
例如,中國一共包含56個民族,如果每個民族都生成一個啞變數就會有55個,這時我們可以只考慮設置「是否為漢族」這一個0-1啞變數。
【數值變數】
我們再來看看數值變數。數值變數就是用數值描述,並且可以直接進行代數運算的變數,如「銷售收入」、「固定資本」、「評論總數」、「訪問量」、「學生成績」等等都是數值變數。
需要注意的是,用數值表示的變數不一定就是數值型變數,只有在代數運算下有意義的變數才是數值型變數。
例如財務報表的年份,上市時間等,雖然也是用數值表示的,但我們通常不將它們按照數值型變數來處理。
上面我們講到,分類變數通常要轉換成數值型變數,其實有些時候,數值型變數也需要轉換成分類變數,這就用到了「數據分箱」的方法。
為什麼要進行數據分箱呢?通常有以下幾個原因:
1. 數據的測量可能存在一定誤差,沒有那麼准確,因此按照取值范圍轉換成不同類別是一個有效的平滑方法;
2.有些演算法,如決策樹模型,雖然可以處理數值型變數,但是當該變數有大量不重復的取值時,使用大於、小於、等於這些運算符時會考慮很多的情況,因此效率會很低,數據分箱的方法能很好的提高演算法效率;
3.有些模型演算法只能處理分類型自變數(如關聯規則),因此也需要將數值變數進行分箱處理。
數據分箱後,可以使用每個分箱內的均值、中位數、臨界值等作為這個類別的代表值,也可以直接將不同取值范圍定義成不同的類別,如:將污染程度劃分後定義為「低、中、高」等。
那如何進行數據分箱呢?常用的數據分箱的方法有:等寬分箱(將變數的取值范圍劃分成等寬的幾個區間)、等頻分箱(按照變數取值的分位數進行劃分)、基於k均值聚類的分箱(將所有數據進行k均值聚類,所得的不同類別即為不同的分箱),還有一些有監督分箱方法,如:使分箱後的結果達到最小熵或最小描述長度等。這里不詳細介紹了,有興趣的童鞋可以自行網路。
三、質量檢查
對數據中的各個變數有了初步了解後,我們還需要對數據進行嚴格的質量檢查,如果數據質量不過關,還需要進行數據的清洗或修補工作。
一般來說,質量檢查包括檢查每個變數的缺失程度以及取值范圍的合理性。
【缺失檢查】
原始數據中經常會存在各種各樣的缺失現象。
有些指標的缺失是合理的,例如顧客只有使用過某個產品才能對這個產品的滿意度進行評價,一筆貸款的抵押物中只有存在房地產,才會記錄相應的房地產的價值情況等。
像這種允許缺失的變數是最難搞的,因為我們很難判斷它的缺失是合理的,還是由於漏報造成的。
但無論哪種情況,如果變數的缺失率過高,都會影響數據的整體質量,因為數據所反映的信息實在太少,很難從中挖掘到有用的東西。
對於不允許缺失的變數來說,如果存在缺失情況,就必須進行相應的處理。如果一個變數的缺失程度非常大,比方說達到了70%,那就考慮直接踢掉吧,估計沒救了。
如果缺失比例還可以接受的話,可以嘗試用缺失值插補的方法進行補救。
插補的目的是使插補值能最大可能的接近其真實的取值,所以如果可以從其他途徑得到變數的真實值,那一定優先選擇這種方法。
比如某個公司的財務信息中缺失了「最終控制人類型」和「是否國家控股」這兩個取值,這些可以通過網上的公開信息得到真實值;再比如缺失了「凈利潤率」這個指標的取值,但是卻有「凈利潤」和「總收入」的取值,那就可以通過變數間的關系得到相應的缺失值,即凈利潤率=凈利潤/總收入。
當然,更多的時候,我們無法得到缺失值的真實信息,這時就只能借用已有的數據來進行插補了。
對數值變數來說,可以用已觀測值的均值、中位數來插補缺失值;對分類型變數來說,可以用已觀測數據中出現比例最高的類別取值來進行插補。
這些方法操作起來非常簡單,但它們都是對所有缺失值賦予了相同的取值,所以當缺失比例較大時,可能會扭曲被插補變數與其餘變數的關系。
更復雜一點的,我們可以選擇模型插補方法,即針對被插補變數和其它自變數之間的關系建立統計模型(如回歸、決策樹等),將模型預測值作為插補值。
如何處理缺失值是一個很大的研究課題,我們這里只是介紹了最簡單可行的方法,有興趣的讀者可以參閱Little和Rubin 2002年的專著「Statistical Analysis with Missing Data」。
【變數取值合理性檢查】
除了缺失外,我們還要考察每個變數的取值合理性。每個變數都會有自己的取值范圍,比如「用戶訪問量」、「下載次數」一定是非負的,「投資收益率」一定在0~1之間。通過判斷變數的取值是否超出它應有的取值范圍,可以簡單的對異常值進行甄別。
除了根據變數的取值范圍來檢查變數質量外,還可以根據變數之間的相互關系進行判斷。例如一家公司的「凈利潤率」不應該大於「總利潤率」等。
只有通過了各個方面檢測的數據才是一份高質量的數據,才有可能帶來有價值的模型結果。
四、實例分析——電影票房分析
最後,我們給出一個實例分析。在這個例子中,我們的目標是研究電影哪些方面的特徵對電影票房有影響。
我們有兩方面的數據,一是描述電影特徵的數據,二是描述電影票房的數據。
由於我們關注的是北美的票房市場,所以描述電影特徵的數據可以從IMDB網站得到,它是一個關於演員、電影、電視節目、電視明星和電影製作的在線資料庫,裡面可以找到每部上映電影的眾多信息;電影每天的票房數據可以從美國權威的票房網站Box Office Mojo得到,上面記錄了每部電影上映期間內每天的票房數據。
我們將從IMDB得到的數據放到「movieinfor.csv」文件中,將從Box Office Mojo中得到的數據放到「boxoffice.csv」文件中。
這里,我們以2012年北美票房市場最高的前100部電影為例進行講解。下表給出了這兩個數據集中包含的所有變數以及相應的解釋。
在這兩個數據中,movieinfor.csv數據的記錄是精確到每部電影的,而boxoffice.csv數據精確到了每部電影中每天的票房數據,是精確到天的。上表中給出的變數中,除了電影名稱和ID外,「電影類型」「MPAA評級」(美國電影協會對電影的評級)和「星期幾」是分類型變數;「放映時長」、「製作預算」、「電影每天的票房」和「每天放映的影院數」是數值型變數。兩份數據都不存在缺失值。
我們首先對兩個數據集分別進行變數預處理,然後再根據電影ID將兩個數據整合到一起。下面給出了每個變數的處理方法:
【電影類型】
電影類型是一個分類變數。在這個變數中我們發現每部電影都不止一個類型,例如「The Dark Knight Rises」這部電影就有「Action」、「Crime」和「Thriller」三個類型,並且它們以「|」為分隔符寫在了一起。
同時,不同電影之間可能有相同的類型,也可能有不同的類型,例如票房排名第二的電影「Skyfall」,它的類型是「Action |Adventure |Thriller」。
因此,我們首先需要做的是把每部電影所屬的類型逐一取出來,然後將所有出現過的類型分別形成一個0-1啞變數,如果這部電影在某個類型上出現了,則相應變數的取值就是1,否則是0.
通過上面一步,我們知道這個數據集中出現過的所有電影類型一共有11個。
那是不是按照之前所講的,應該把它轉換為10個啞變數呢?這里需要注意的是,所有的電影類型之間並不是互斥的(即有了action,就不能有其他的類型),所以我們無需因為共線性的原因去掉其中一個。
也就是說,如果把每一個電影類型單獨作為一個獨立的變數,可以衍生出11個新的0-1變數,這完全沒有問題。但11個變數未免有點過多,所以我們根據不同電影類型的頻數分布情況,只把出現次數明顯較多的類型單獨拿出來,最終生成了6個0-1型變數,分別為Adventure,Fantasy,Comedy,Action,Animation,Others。
【MPAA評級】
對於這個分類型變數,我們首先可以看一下數據中它所包含的全部取值,發現一共有「PG」,「PG-13」和「R」三個。
和上面的電影類型(Genre)不同,對於一部電影而言,它只能有一個MPAA取值。因此,在MPAA變數中,我們需要選擇一個作為基準,將另外兩個構造成啞變數。
例如,我們以「PG」為基準,構造的兩個啞變數分別為PG13和R,如果這兩個啞變數的取值同時為0,那就相當於電影的MPAA評級是PG。
【放映當天是星期幾】
這個變數同MPAA評級一樣,每部電影只能有一個取值。
如果它在星期一到星期日上都有取值的話,我們可以衍生出6個0-1型啞變數。
因為這里我們更關注周末和非周末對電影票房的影響,而並不關注具體是哪一天,所以我們將其進一步概括成一個變數,即「是否是周末」。
【放映時長和製作預算】
放映時長和製作預算這兩個變數都是取值大於0的數值型變數,我們可以分別檢查它們的取值是否在合理的范圍內,然後直接保留它們的數值信息。
同時,對「製作預算」而言,假設我們這里關心的不是製作預算的具體數值,而是「小成本電影」和「大成本電影」的票房差異,那我們就可以將這個數值型變數進行分箱處理,轉換為一個0-1型的分類變數,即 「是否為小成本電影」。
在決定按照什麼標准來劃分是否為小成本電影時,我們根據之前文獻里的研究結果,將製作預算在100 million以下的電影看成是小成本電影。
上述所有變數的處理過程都可以使用R中最基本的語句(table,rep,which等)完成,由於篇幅限制,小編這里就不列出詳細的code了,大家感興趣的話,可以閱讀狗熊會的「R語千尋」系列(戳這里),相信會在R語言的學習上受到更多啟發。
最後,我們將所有新生成的變數按照電影ID整合到一起,就大功告成啦。
五、總結
最後總結一下,小編在這次內容中向大家介紹了拿到數據後的數據理解和預處理工作,內容雖然不難,但同樣需要我們認真對待。就好像生活一樣,只有踏踏實實走好前面的路,才有可能迎接後面的高潮迭起!
㈢ 如何將編寫好的C語言源程序變成可執行文件EXE
1、第一步,來打開C語言編譯軟體,自輸入你要執行的程序源代碼,如下圖所示。