⑴ 給師弟師妹們學習數據挖掘的一些建議
給師弟師妹們學習數據挖掘的一些建議
看著剛進實驗室的師弟師妹們的迷茫,雖然也與他們進行過一些零散的交談,但是都不夠系統。因此,根據自己的經歷給出學習數據挖掘的一些建議,大家可以根據自身的情況,具體問題具體分析,作為參考。希望在上一屆的基礎上,走的更深,走的更遠。
一. 讀研與數據挖掘基礎
首先介紹一下大家都比較關心的幾個問題,包括我們組的研究方向是什麼,論文相關問題,大數據與工作相關問題,上海戶口問題幾個方面。
1. 我們組的研究方向是什麼
我們組大的研究方向是數據挖掘,論文的研究方向是推薦演算法。要注意大的研究方向,論文的研究方向與工作方向的區別和聯系。
2. 論文相關問題
讀研究生免不了會思考一個問題,讀研的意義是什麼?我自己認為讀研的最大意義是訓練自己系統化的嚴謹的分析思維能力。在導師給定論文研究方向後,如何確立更細的研究方向,如何檢索資料,如何閱讀英文論文,如何提出自己的創新點,如何做實驗,如何寫論文,如何修改論文,如何投稿,如何退修,如果是國際會議,還要去做英文口頭報告,與同行交流等,這些問題都是需要自己去思考的。
3. 大數據與工作相關問題
數據挖掘屬於大數據專業嗎?當然屬於。現在大數據找工作相對還是比較理想的。關鍵是要學習哪些課程呢?以前給大家推薦了很多的書籍,但是效果卻恰恰相反,因為實在太多了根本看不完,更不知閱讀書籍的順序,淺嘗輒止,最後一本書也沒有看完,研究生就結束了。
(1)最低保障書籍
無論將來做什麼,熟練掌握一門編程語言,一個資料庫,數據結構,演算法都是必備的。
《高性能MySQL》
《數據結構與演算法分析:java語言描述》
《演算法》:http://book.douban.com/subject/19952400/
(2)Python與機器學習
《集體智慧編程》
《社交網站的數據挖掘與分析》
《數據挖掘:概念與技術》
Python官方文檔:https://www.python.org/
Scikit-Learn官方文檔:http://scikit-learn.org/stable/
(3)Java相關書籍
《Java開發實戰經典》
《Java Web開發實戰經典》
《Java虛擬機規范》
Java SE:http://docs.oracle.com/javase/8/docs/api/
Java EE:http://docs.oracle.com/javaee/6/api/
(4)Hadoop與Spark書籍
《大數據日知錄:架構與演算法》
《Hadoop權威指南》
《大數據Spark企業級實戰》
《Scala編程》
Hadoop官方網站:http://spark.apache.org/
Spark官方網站:http://spark.apache.org/
Scala官方網站:http://www.scala-lang.org/
說明:認准目標,耐住性子,一步一步往前走。要把上面推薦的書籍硬著頭皮讀完,數據挖掘基本也就算是入門了。
4. 上海戶口問題
上海戶口屬於積分制,如果想要在校期間就拿到,那麼唯一的方式就是參數每年的研究生數據建模比賽,並且獲獎。獲獎比例還是很高的。其實,好好學習Python,買本數學建模的書籍看完,看幾篇近些年來的獲獎論文,比賽時硬著頭皮鑽研一道題目並且寫好論文,基本上都可以獲獎。
二. 數據挖掘進階
數據挖掘涉及多個方向,但是通常從數學統計,資料庫和數據倉庫,機器學習三個方向來進行研究。當我想學習一個方向的時候,最希望做的事情就是讓別人給我列出一個書單。因為我也會給你們列出一個書單,讓你們慢慢研究吧。
1. 數學統計
(1)理論數學:復變函數,實變函數,泛函分析,拓撲學,積分變換,微分流形,常微分方程,偏微分方程等。
(2)應用數學:離散數學(集合,邏輯,組合,代數,圖論,數論),具體數學,張量分析,數值計算,矩陣論,逼近論,運籌學,凸優化,小波變換,時間序列分析等。
(3)概率:概率論,測度論,隨機過程等。
(4)統計:統計學,多元統計,貝葉斯統計,統計模擬,非參數統計,參數統計等。
2. 資料庫和數據倉庫
《資料庫系統概念》
《資料庫系統實現》
《數據倉庫》
《分布式系統:概念與設計》
3. 機器學習
通信原理;數據挖掘;機器學習;統計學習;自然語言處理;信息檢索;模式識別;人工智慧;圖形圖像;機器視覺;語音識別;機器人學等。(這方面的經典書籍都可以看看,後面慢慢補充)
4. 其它書籍
(1)Linux
(2)網路原理,編譯原理,組成原理,
(3)JVM
(4)UML
(5)軟體工程
(6)設計模式
(7)雲計算與Docker
(8)並行計算
(9)需求分析
三. 學習與方法
作為一名軟體工程師,需要熟練掌握的工具,如下所示:
(1)博客
除了學習之外,更要思考和總結,把還沒有忘卻的記憶緩存序列化成為文字,記錄在博客中。
(2)語言
大數據常用的語言包括Java,Scala,Python。如果一定要選擇精通一門語言,自己選擇Scala,同時深度學習JVM。(3)開發工具
自己選擇IntelliJ IDEA用於Java和Scala的開發,Eclipse用於Python的開發。
(4)GitHub
每天都要堅持編程,主動參與開源項目。
(5)Linux
工作常用的是Ubuntu 12.04 LTS。
由於時間原因,上面總結的還比較粗糙,算是第一個版本吧,後面還會繼續深度總結和完善。
⑵ 數據挖掘方向,Python中還需要學習哪些內容
就題論題,還包括:
1. Python 資料庫連接庫,例如MySQL 連接庫的應用,這決定你的數據從哪裡來。這裡面涉及到sql語法和資料庫基本知識,是你在學習的時候必須一起學會的。
2. Python 做基本數據計算和預處理的庫,包括numpy ,scipy,pandas 這三個用得最多。
3. 數據分析和挖掘庫,主要是sklearn,Statsmodels。前者是最廣泛的機器學習庫,後者是側重於統計分析的庫。(要知道統計分析大多時候和數據挖掘都錯不能分開使用)
4. 圖形展示庫。matpotlib,這是用的最多的了。
說完題主本身 要求,樓上幾位說的對,你還需要一些關於數據挖掘演算法的基本知識和認知,否則即使你調用相關庫得到結果,很可能你都不知道怎麼解讀,如何優化,甚至在什麼場景下還如何選擇演算法等。因此基本知識你得了解。主要包括:
1.統計學相關,看看深入淺出數據分析和漫畫統計學吧,雖然是入門的書籍,但很容易懂。
2.數據挖掘相關,看看數據挖掘導論吧,這是講演算法本身得書。
剩下的就是去實踐了。有項目就多參與下項目,看看真正的數據挖掘項目是怎麼開展的,流程怎樣等。沒有項目可以去參加一些數據挖掘或機器學習方面的大賽,也是增加經驗得好方法。
⑶ 二維小波變換怎樣用矩陣來實現
先對來行進行一維的變換,自得到高頻H,低頻L兩部分,然後再對高頻H部分做兩次濾波,有得到另一組高低頻(h1,l1),再對L部分與濾波器卷積,得到一組高低頻(h2,l2),這樣,二維矩陣就被分解為四個部分了。。。
⑷ java 實現人臉的動漫化 照片用數組存還是image對象提取人臉的什麼特徵人臉處理常用哪些特徵
YOGUAI為保險櫃,自動門,考勤等行業提供人臉識別方案。
隨著計算機網路和通信技術的發展,信息安全、知識產權保護和身份認證等問題成了一個重要而緊迫的研究課題。身份認證是保證系統安全的必要前提,在多種不同的安全領域都需要准確的身份認證。傳統的身份證、智能卡、密碼等身份認證方法存在攜帶不便、容易遺失、不可讀或密碼易被破解等諸多問題。基於人臉識別技術的身份認證方法與傳統的方法相比,具有更好的安全性、可靠性和有效性,因此正越來越受到人們的重視,並逐漸進入社會生活的各個領域。
人臉識別技術具有廣泛的應用前景,可以應用到多種不同的安全領域,因其識別特徵的獨特性、惟一性和相對穩定性,逐漸成為一非常熱門的研究課題。許多典型的人臉識別演算法和應用系統都是針對標准或特定的人臉資料庫,利用庫內人臉進行訓練,並在相同的庫中實現人臉識別。但在軟體保護、計算機安全等特殊應用中,身份認證僅針對單個對象進行人臉識別,現有的人臉識別方法並不能勝任這樣的識別任務。為此,本文針對單對象人臉識別的特點,討論了單對象人臉檢測和識別的關鍵技術,在此基礎上提出了一種單對象人臉識別演算法,實驗結果證明了該方法的有效性。
2單對象人臉識別的特點
與典型的人臉識別相比,單對象人臉識別有以下4個方面的特點:
應用領域人臉識別的應用領域很廣,如刑偵破案、證件核對、保安監控等,而單對象人臉識別主要應用在軟體保護、計算機安全鎖、特定對象追蹤等領域。
識別系統的目標單對象人臉識別的最終目標是系統必須具有高度的安全性和可靠性,即識別錯誤率趨於0。雖然降低識別錯誤率的同時識別率也會降低,但可以通過提示用戶調整姿態(如注視攝像頭等)加以改善。
膚色模型由於單對象人臉識別僅針對特定的對象,所以人臉檢測的膚色模型可採用自適應的方法調整膚色范圍。
分類方法單對象人臉識別不存在人臉資料庫,常用的最小距離分類法不能夠正確識別特定的對象,只能用閾值作為判據。因此,閾值的選取十分重要,閾值過大則容易出現錯判,存在安全隱患;而閾值過小又會影響識別效率。
3人臉的檢測和歸一化
人臉檢測是人臉識別的前提。對於給定的圖像,人臉檢測的目的在於判斷圖像中是否存在人臉,如果存在,則返回其位置和空間分布。利用人臉膚色和面部特徵,將人臉檢測分為兩個階段:外臉檢測和內臉定位。外臉檢測主要利用人臉膚色進行初步的臉區檢測,分割出膚色區域;內臉檢測是在外臉區域中利用面部幾何特徵進行驗證和定位。
3.1外臉檢測
外臉檢測的任務是將待檢圖像中可能的人臉區域找出來並加以標記,其步驟如下:
(1)根據人類膚色在色彩空間中存在區域性的特點,將可能為人臉的像素檢測出來。為更好地利用膚色特徵,同時選用HSI和YcbCr兩種色彩空間對圖像進行二值化處理,膚色范圍限定在H∈[0,46],S∈[0.10,0.72],Cb∈[98,130],Cr∈[128,170]內。將滿足條件的像素標記為膚色像素,其餘的均為非膚色像素。
(2)去噪處理。在以每一個膚色點為中心的5×5鄰域內統計膚色像素的個數,超過半數時中心點保留為膚色,否則認為是非膚色。
(3)將二值圖像中的膚色塊作區域歸並,並對目標區域進行比例、結構分析,過濾掉不可能的人臉區域。目標區域的高度/寬度比例限定在0.8~2.0。
3.2內臉檢測和定位
將包含眼、眉、鼻和嘴的區域稱為內臉區域。內臉區域能夠很好地表達人臉特徵,且不易受背景、頭發等因素的干擾,因此內臉區域的檢測和定位對後續的特徵提取和識別至關重要。
在外臉區域的上半部,對二值圖像進行水平方向和垂直方向的投影,確定兩個包含黑點的矩形區域作為雙眼的大致區域。在確定的兩個區域中,對黑點進行區域膨脹,可以得到眼睛的基本輪廓和左石眼角,黑點坐標的平均值作為瞳孔的位置。
設左右瞳孔的坐標分別為(Lx,Ly)和(Rx,Ry),兩個瞳孔之間的距離為d,根據人臉的幾何特徵,我們將內臉區域定義為:寬度=-d×1.6,高度=-d×1.8,左上角坐標為(Lx-d×0.3,(Ly Ry)/2-(-d)×0.3)。實驗表明,該區域能夠很好地表達人臉特徵。
3.3內臉區域的歸一化
由於各待測圖像中的人臉大小具有很大的隨機性,因此,有必要對內臉區域進行歸一化操作。人臉歸一化是指對內臉區域的圖像進行縮放變換,得到統一大小的標准圖像,實驗中,我們規定標准圖像的大小為128×128。歸一化處理,保證了人臉大小的一致性,體現了人臉在圖像平面內的尺寸不變性。
對歸一化的人臉圖像,採用小波變換與DCT相結合的方法提取人臉特徵。首先對人臉圖像進行3層小波分解,取低頻子圖像LL3作為人臉特徵提取的對象,從而獲得每幅訓練樣本或測試樣本的低頻子圖像;然後對低頻子圖像進行離散餘弦變換(DCT),DCT系數個數與子圖像的大小相等(即256),由於圖像DCT變換,能量集中在低頻部分,因此只取其中的136個低頻系數作為特徵向量。
5人臉的識別
完成訓練過程並獲得待測樣本的特徵後,即可進行人臉識別,本文採用歐氏距離進行分類。
5.1計算樣本與平均臉的歐氏距離
用m和x表示平均臉和樣本的特徵向量,則樣本與平均臉的歐氏距離為:
其中mk表示平均臉的第k個特徵向量,xk表示待測樣本的第k個特徵向量。身份認證時,計算待測樣本與平均臉的歐氏距離,並與特定對象的自適應閾值進行比較,將小於閾值的樣本判為該對象的人臉,即認證通過。
5.2自適應閾值的選取
與典型的人臉識別方法不同,單對象人臉認識沒有人臉資料庫,不能用距離最小作為判據,只能用閾值作為判別依據。閾值的選取應兼顧識別率和識別的准確性,實驗中我們取訓練樣本與平均臉的歐氏距離平均值作為分類閾值,即:
其中,N為訓練樣本數,此值不宜太小;di為第i個樣本與平均臉之間的歐氏距離。
莫士特科技有限公司提供模式識別主板及解決方案。
希望採納
⑸ 數據流詳細資料大全
數據流(data stream)是一組有序,有起點和終點的位元組的數據序列。包括輸入流和輸出流。
數據流最初是通信領域使用的概念,代表傳輸中所使用的信息的數字編碼信號序列。這個概念最初在1998年由Henzinger在文獻87中提出,他將數據流定義為「只能以事先規定好的順序被讀取一次的數據的一個序列」。
基本介紹
- 中文名 :數據流
- 外文名 :data stream
- 概念提出人 :Henzinger
- 提出時間 :1998年
- 釋義 :以規定順序被讀取一次的數據序列
- 發展原因 :2個
- 數據模式 :4個
- 計算類型 :可分為兩類:基本計算和復雜計算
產生背景,細節數據,復雜分析,區別特徵,分類,輸入流與輸出流,緩沖流,模型描述,形式化,數據集合,數據屬性,計算類型,相關思路,簡介,隨機采樣,構造略圖,直方圖,小波變換,新動向,小說流派,
產生背景
數據流套用的產生的發展是以下兩個因素的結果:
細節數據
已經能夠持續自動產生大量的細節數據。這類數據最早出現於傳統的銀行和股票交易領域,後來則也出現為地質測量、氣象首悉尺、天文觀測等方面。尤其是網際網路(網路流量監控,點擊流)和無線通信網(通話記錄)的出現,產生了大量的數據流類型的數據。我們注意到這類數據大都與地理信息有一定關聯,這主要是因為地理信息的維度較大,容易產生這類大量的細節數據。
復雜分析
需要以近實時的方式對更新流進行復雜分析。對以上領域的數據進行復雜分析(如趨勢分析,預測)以前往往是(在數據倉庫中)離線進行的,然而一些新的套用(尤其是在網路安全和國家安全領域)對時間都非常敏感,如檢測網際網路上的極端事件、欺詐、入侵、異常,復雜人群監控,趨勢監控(track trend),探查性分析(exploratory *** yses),和諧度分析(harmonic *** ysis)等,都需要進行在線上的分析。 在此之後,學術界基本認可了這個定義,有的文章也在此基礎上對定義稍微進行了修改。例如,S. Guha等[88]認為,數據流是「只能被讀取一次或少數幾次的點的有序序列」,這里放寬了前述定義中的「一遍」限制。 為什麼在數據流的處理中,強調對數據讀取次數的限制呢?S. Muthukrishnan[89]指出數據流是指「以非常高的速者高度到來的輸入數據」,因此對數據流數據的傳輸、計算和存儲都將變得很困難。在這種情況下,只有在數據最初到達時有機會對其進行一次處理,其他時候很難再存取到這些數據(因為沒有也無法保存這些數據)。
區別特徵
與傳統的關系數據模式區別 B.Babcock等[90]認為數據流模式在以下幾個方面不同於傳統的關系數據模式: 1. 數據在線上到達; 2. 處理系統無法控制所處理的數據的到達順序; 3. 數據可能是無限多的; 4. 由於數據量的龐大,數據流中的元素被處理後將被拋棄或存檔(archive)。以後再想獲取這些數據將會很困難,除非將數據存儲在記憶體中,但由於記憶體大小通常遠遠小於數據流數據的數量,因此實際上通常只能在數據第一次到達時獲取數據。
三個 特點 我們認為,當前所研究的數據流計算之所以不同於傳統的計算模式,關鍵在於這些數據流數據本身具有如下三個陸襲特點:
數據的到達—快速 這意味著短時間內可能會有大量的輸入數據需要處理。這對處理器和輸入輸出設備來說都是一個較大的負擔,因此對數據流的處理應盡可能簡單。
酷睿2處理器 數據的范圍—廣域 這是指數據屬性(維)的取值范圍非常大,可能取的值非常多,如地域、手機號碼、人、網路節點等。這才是導致數據流無法在記憶體或硬碟中存儲的主要原因。如果維度小,即使到來的數據量很大,也可以在較小的存儲器中保存這些數據。例如,對於無線通信網來說,同樣的100萬條通話記錄,如果只有1000個用戶,那麼使用1000個存儲單位就可以保存足夠多和足夠精確的數據來回答「某一用戶的累計通話時間有多長」的問題;而如果共有100000個用戶,要保存這些信息,就需要100000個存儲單位。數據流數據的屬性大多與地理信息、IP位址、手機號碼等有關,而且往往與時間聯系在一起。這時,數據的維度遠遠超過了記憶體和硬碟容量,這意味著系統無法完整保存這些信息,通常只能在數據到達的時候存取數據一次。
數據到達的時間—持續 數據的持續到達意味著數據量可能是無限的。而且,對數據進行處理的結果不會是最終的結果,因為數據還會不斷地到達。因此,對數據流的查詢的結果往往不是一次性而是持續的,即隨著底層數據的到達而不斷返回最新的結果。 以上數據流的特點決定了數據流處理的特點一次存取,持續處理,有限存儲, 近似結果,快速回響。 近似結果是在前三個條件限制下產生的必然結果。由於只能存取數據一次,而且只有相對較小的有限空間存儲數據,因此產生精確的計算結果通常是不可能的。而將對結果的要求從過去的「精確」改為「近似」後,實現數據流查詢的快速回響也就成為了可能。
分類
數據的性質、格式不同,則對流的處理方法也不同,因此,在Java的輸入/輸出類庫中,有不同的流類來對應不同性質的輸入/輸出流。在java.io包中,基本輸入/輸出流類可按其讀寫數據的類型之不同分為兩種:位元組流和字元流。
輸入流與輸出流
數據流分為輸入流(InputStream)和輸出流(OutputStream)兩類。輸入流只能讀不能寫,而輸出流只能寫不能讀。通常程式中使用輸入流讀出數據,輸出流寫入數據,就好像數據流入到程式並從程式中流出。採用數據流使程式的輸入輸出操作獨立與相關設備。 輸入流可從鍵盤或檔案中獲得數據,輸出流可向顯示器、印表機或檔案中傳輸數據。
緩沖流
為了提高數據的傳輸效率,通常使用緩沖流(Buffered Stream),即為一個流配有一個緩沖區(buffer),一個緩沖區就是專門用於傳輸數據的記憶體塊。當向一個緩沖流寫入數據時,系統不直接傳送到外部設備,而是將數據傳送到緩沖區。緩沖區自動記錄數據,當緩沖區滿時,系統將數據全部傳送到相應的設備。 當從一個緩沖流中讀取數據時,系統實際是從緩沖區中讀取數據。當緩沖區空時,系統就會從相關設備自動讀取數據,並讀取盡可能多的數據充滿緩沖區。
模型描述
我們試圖從數據集合、數據屬性和計算類型三個不同方面對數據流的模型進行歸納和描述。實際上,很多文章提出了各種各樣的數據流模型,我們並沒有包括所有這些模型,只是將其中比較重要的和常見的進行了歸納和分類。
形式化
以下是對數據流的一個形式化描述。 考慮向量α,其屬性的域為[1..n](秩為n),而且向量α在時間t的狀態 α(t)=<α1(t), ...αi(t), ...αn(t) > 在時刻s,α是0向量,即對於所有i,αi(s)=0。對向量的各個分量的更新是以二元組流的形式出現的。即,第t個更新為(i, ct),意味著αi(t)= αi(t . 1) + ct,且對於i. =.i,αi. (t)= αi. (t . 1)。在時刻t發生的查詢是針對α(t)的。
數據集合
我們首先考慮在進行數據流計算時,有哪些數據被包含在計算范圍之內。關於這個問題,主要有三種不同的模型:分別是數據流模型(data stream model)、滑動視窗模型(sliding window model)和n-of-N模型。 數據流模型(data stream model)在數據流模型中,從某個特定時間開始的所有數據都要被納入計算范圍。此時,s=0,即在時刻0,α是0向量。即這是數據流最初和最普遍的模型。 滑動視窗模型(sliding window model ,計算最近的N個數據)滑動視窗模型是指,從計算時算起,向前追溯的N個數據要被納入計算范圍。此時,s = t . N,即在時刻t . N,α是0向量。換句話說,要計算最近的N個數據。由於數據流的數據是不斷涌現的,所以直觀的看,這種模式就像用一個不變的視窗,數據隨時間的推移經過視窗,出現視窗內的數據就是被計算的數據集合。M. Datar等[91]首先提出這一模式,隨後得到了廣泛回響[92]。 n-of-N模型(計算最近的n個數據,其中0 <n ≤ N) 文獻[93] 提出的這種模型建立在滑動視窗模型的基礎之上,比滑動視窗模型更為靈活:被納入計算范圍的是從計算時算起,向前追溯的n個數據。此時,s = t . n,即在時刻t . n,α是0向量。注意,其中n ≤ N,而且是可以隨查詢要求變化的。而在滑動視窗模型中,n = N而且是固定不變的。對於數據流處理系統來說,要能夠回答所有長度小於等於N的滑動視窗問題。
數據屬性
數據本身的特徵: 時間序列(time series model) 數據按照其屬性(實際上就是時間)的順序前來。在這種情況下,i = t,即一個t時刻的更新為(t, ct)。此時對α的更新操作為αt(t)= ct, 且對於i. =.t,αi. (t)= αi. (t . 1)。這種模型適用於時序數據,如某特定IP的傳出的數據,或股票的定期更新數據等。 收款機模型(cash register model) 同一屬性的數據相加,數據為正。在這種模型中,ct >=0。這意味著對於所有的i和t來說,αi(t)總是不小於零,而且是遞增的。實際上,這種模型被認為是最常用的,例如可以用於對收款機(收款機模型由此得名),各個IP的網路傳輸量,手機用戶的通話時長的監控等等。 十字轉門模型(turnstile model) 同一屬性的數據相加,數據為正或負。在這種模型中,ct可以大於0也可以小於0。這是最通用的模型。S. Muthukrishnan[89]稱其為十字轉門模型起因於這種模型的功能就象捷運站的十字轉門,可以用來計算有多少人到達和離開,從而得出捷運中的人數。
計算類型
對數據流數據的計算可以分為兩類:基本計算和復雜計算。基本計算主要包括對點查詢、范圍查詢和內積查詢這三種查詢的計算。復雜計算包括對分位數的計算、頻繁項的計算以及數據挖掘等。 點查詢(Point query) 返回αi(t)的值。 范圍查詢(Range query) 對於范圍查詢Q(f, t),返回 t . αi(t) i=f 內積(Inner proct) 對於向量β,α與β的內積 α . β =Σni=1αi(t)βi 分位數(Quantile) 給定一個序號r,返回值v,並確保v在α中的真實排序r.符合以下要求: r . εN ≤ r. ≤ r + εN 其中,ε是精度,N =Σni=1αi(t)。 G. S. Manku等[94]提供了對分位數進行一遍掃描進行近似估計的框架結構,將數據集合看成樹的節點,這些節點擁有不同的權重(如節點中包含的數據個數)。認為所有的分位數的估計演算法都可以被認為由三個對節點的操作組成產生新節點(NEW) 、合並(COLLAPSE)和輸出(OUTPUT)。不同的策略構成了不同類型的樹。這個框架結構成為後來很多分位數估計演算法的基礎。 頻繁項(Frequent items)有時也稱Heavy hitters,即找出在數據流中頻繁出現的項。在這種計算中,實際上令ct =1。這樣,αi(t)中保存了截至t時刻,維值等於i的數據到達的頻率。對這些數據的查詢又可分為兩種: 找出頭k個最頻繁出現的項 找出所有出現頻率大於1/k的項 對頻率項的研究主要集中在後一種計算[95]。 挖掘對數據流數據進行挖掘涉及更復雜的計算。對這方面的研究包括:多維分析[96],分類分析[97, 98],聚類分析[99–102],以及其他one-pass演算法[103]。
相關思路
簡介
數據流處理過程中的主要難點在於如何將存儲數據所花費的空間控制在一定范圍之內。查詢回響時間問題雖然也很重要,但相對容易解決。作為研究領域的一個熱點,數據流處理問題得到了廣泛的研究,出現了很多演算法。 解決數據流龐大的數據量與有限的存儲空間之間的矛盾的一個思路是使用采樣,另一個思路是,構造一個小的、能提供近似結果的數據結構存放壓縮的數據流數據,這個結構能存放在存儲器中。略圖(Sketch)、直方圖(histogram)和小波(wavelet)實際上就都是這樣的數據結構中最重要的三種。 以上方法實際上大都已用於傳統資料庫領域,問題在於如何將它們套用於數據流的特殊環境。
隨機采樣
隨機采樣(Random sampling)可以通過抽取少量樣本來捕捉數據集合的基本特性。一個很常見的簡單方法就是一致性采樣(uniform sample)。作為一個備選的采樣方法分層采樣(strati.ed sampling)可以減少數據的不均勻分布所帶來的誤差。不過,對於復雜的分析,普通的采樣演算法還是需要太大的空間。 對於數據流的一些特殊計算,已經出現了一些有趣的采樣演算法。粘采樣(Sticky sampling)[95]用於頻繁項(frequent items)的計算。粘采樣使用的方法是,在記憶體中存放二元組(i,f)所構成的集合S,對於每到來的一個數據,如果其鍵i已經存在於S,則對應的f加1;否則,以1 r 的機率進行采樣,如果該項被選中,在S中增加一組(i,1);每過一段時間,對S中的組進行一遍掃描,對其中的值進行更新。然後增加r的值;結束(或用戶要求結果)時,輸出所有f.(s-e)N的組。 P. Gibbons提出的distinct sampling[104]用於distinct counting ,即找出數據流中不同值的個數。它使用哈希(hash )函式對每一個到來的不同值以2.(i+1)的機率映射到級別i上;如果i ≥記憶體級別L(L的初始值為0),將其加入記憶體,否則拋棄;記憶體滿時,將記憶體中級別為L的值刪除,並將L加1;最終對distinct count的估計為記憶體中不同的值乘以2L。distinct counting是資料庫處理中的一個老問題,這種演算法的優點是,通過設定合適的參數,可套用於帶謂詞的查詢(即對數據流的一個子集進行distinct counting)。 采樣演算法的缺點是:它們對異常數據不夠敏感。而且,即使它們可以很好的套用於普通的數據流模型,但如果要用於滑動視窗模型(sliding window model)[91] 或n-of-N模型[93],還需要進行較大的修改。
構造略圖
構造略圖(sketching)是指使用隨機映射(Random projections)將數據流投射在一個小的存儲空間內作為整個數據流的概要,這個小空間存儲的概要數據稱為略圖,可用於近似回答特定的查詢。不同的略圖可用於對數據流的不同Lp范數的估算,進而這些Lp范數可用於回答其它類型的查詢。如L0范數可用於估算數據流的不同值(distinct count);L1范數可用於計算分位數(quantile)和頻繁項(frequent items);L2范數可用於估算自連線的長度等等。 略圖的概念最早由N. Alon在[105]中提出,從此不斷涌現出各種略圖及其構造演算法。 N. Alon 在[105]中提出的隨機略圖構造(randomized steching)可以用於對不同Lp范數的估算,最多需要O(n 1. lg n)的空間。該文更重要的貢獻在於,它還可以以O(log n + log t)的空間需求估算L2。它的主要思路是,使用哈希函式,將數據屬性的域D中的每一個元素一致地隨機映射到zi ∈ {.1+ 1}上,令隨機變數X = .i αizi,X2就可作為對L2范數的估計。 p1 S. Guha 等[88]提出的分位數略圖(quantile sketch) 保持一組形如(vi,gi, Δi)的數據結構,rmax(vi) 和rmin(vi)分別是vi可能的排位的最大和最小值。對於i>j 滿足: vi >vj gi = rmin(vi) . rmin(vi . 1) Δi = rmax(vi) . rmin(vi) 隨著數據的到來,對此略圖進行相應的更新操作,使估算保持在一定的精度之內。X. Lin等[93]對於這個問題做出了更形式化的描述。 若令AS為一個從[1..n]中提取的隨機集合,每一個元素被提取的機率為1/2。A. Gilbert 等[106]構造若干個AS,將每個集合中元素值的和稱為隨機和(random sum)。多個隨機和構成一個略圖。對αi的估算為 2E(||AS|| |αi ∈ AS) . ||A||, 其中||A||為數據流中所有數的和。因此,這種略圖可用於估算點查詢的結果。使用多個這樣的略圖,可用於估算范圍查詢、分位數查詢等。略圖技術實際上是空間和精度相權衡的結果。為保證點查詢結果的誤差小於εN, 上述略圖需要的空間通常是以ε.2作為系數的。與此相比較,G. Cormode 等提出的計數-最小略圖(Count-Min Sketch )[19]只需要ε.1系數的空間。其思路也比較簡單,使用若干個哈希函式將分別數據流投射到多個小的略圖上,回答點查詢時,每個略圖分別作答,並選擇值最小的作為答案。以點查詢為基礎,計數-最小略圖可以用於其它各種查詢和復雜計算。計數-最小略圖並不計算Lp范數,而是直接計算出點查詢的結果,這是它的時空效率比其它略圖高的原因之一。
直方圖
直方圖(histogram)有兩個含義:一個是普通意義上的直方圖,是一種用於顯示近似統計的視覺手段;另外,它還是一種捕捉數據的近似分布的數據結構/方法。作為後者出現時時,直方圖是這樣構造的:將數據按其屬性分到多個不相交的子集(稱為桶)並用某種統一的方式近似表示桶中的值[107]。
直方圖 直方圖方法主要用於信號處理、統計、圖像處理、計算機視覺和資料庫。在資料庫領域,直方圖原先主要用於選擇性估計(selectivity estimation),用於選擇查詢最佳化和近似查詢處理。直方圖是一種最簡單、最靈活的近似處理方法,同時也是最有效的一種。只要解決好數據更新問題,就可以將原有的直方圖運用到數據流處理中。這類根據新的數據自動調節的直方圖被稱為動態(或自適應/自調節)直方圖。 L. Fu等[108]提出的直方圖主要用於中值函式(Median )和其他分位數函式的計算,可用於近似計算,也可用於精確查詢。它通過確定性分桶(Deterministic Bucketing )和隨機分桶(Randomized Bucketing )技術,構造多個不同精度的桶(buckets),然後將輸入數據逐級分到這些桶中,從而完成了動態直方圖的構造。 由於將靜態直方圖直接套用到數據流處理比較困難。S. Guha等[88]雖然可以動態地構造近最優的V-optimal 直方圖,但只能套用於時間序列模型(time series model) 下的數據流。 一個常採用的方法是將整個演算法分為兩步:首先構造一個數據流數據的略圖;然後從這個略圖中構造合適的直方圖。這種方法可以利用略圖數據易於更新的特點,又能實現直方圖的動態化。N. Thaper等[109]首先是構造一個近似反映數據流數據的略圖,利用略圖的優良的更新性能來實現數據的更新,然後從這個略圖中導出一個直方圖來實現對數據流數據的近似。由於從略圖中導出最佳的直方圖是一個NP-hard問題,作者提供了一個啟發式演算法(貪婪演算法)來搜尋一個較佳的直方圖。 A. Gilbert等[110]構造了一個概要的數據結構,該結構使用一組與文獻[106]中類似的隨機和結構來保存不同粒度級別的dyadic interval的值。隨後,將不同粒度級別的dyadic interval([111])從大到小地加入所要構造的直方圖中,這樣就將近似誤差降到最低(求精)。 A. Gilbert等在文獻[112]中主要考慮的是如何降低對數據流中每個輸入數據的處理復雜度。他們先將輸入數據轉化為小波系數(利用小波系數是信號與基向量的內積),然後採用了與文獻[110]類似的dyadic interval處理方法。略圖與直方圖有很密切的聯系,從某種方面來說,可以認為直方圖是略圖的一種特殊情況。
小波變換
小波變換(wavelet transformation)常用於生成數據的概要信息。這是因為通常小波系數只有很少一部分是重要的,大部分系數或者值很小,或者本身不重要。所以,如果忽略數據經過小波變換後生成的不重要系數,就可以使用很少的空間完成對原數據的近似。 Y. Matias等首先針對數據流數據構造一個直方圖,使用小波對其進行模擬。隨後保留若干最重要的小波系數實現對直方圖的模擬。當新的數據出現時,通過對這些小波系數進行更新以實現直方圖的更新。 文獻提出的實際上是一種直方圖方法,只不過使用了小波變換。A. Gilbert等指出小波變換可以認為是信號與一組正交的長度為N的向量集合所作的內積,因此構造一組數據流數據的略圖,由於略圖可以相當容易和准確地計算信號與一組向量的內積,則可以從略圖計算出小波系數,從而用於點查詢和范圍查詢的估計。
新動向
研究人員對數據流處理的研究不斷深入,我們認為出現了以下新的動向:
未來略圖 引入更多多的的統計 計技技術來構造略圖 G. Cormode等主要處理對頻繁項的計算。它以前人的主項(majority item ) 演算法([116, 117])為基礎,使用了error-correcting codes來處理問題。如數據的每一位設立一個計數器,再根據這些計數器的計數結果來推斷頻繁項集合。 Y. Tao等[118]實質上是對Probabilistic counting (已經廣泛地用於資料庫領域的distinct counting)在數據流處理的一種套用。
擴展略圖 對略圖進行擴展,以處理更更復復雜的查詢詢需需求 Lin等在文獻[93]中構造了一個復雜的略圖體系,可用於滑動視窗模型(sliding window model )和n-of-N模型的分位數估計,這是簡單略圖難以做到的。 在滑動視窗模型下,文獻[93]將數據按時間順序分為多個桶,在每個桶中建立略圖(精度比要求的高),然後查詢時再將這些略圖合並(merge),其中對最後一個桶可能需要進行提升(lift )操作。維護時只刪除過期的桶,增加新的桶。 在n-of-N model中,文獻[93]將數據按EH Partitioning技術分為多個大小不同的桶,在每個桶中建立略圖(精度比要求的高),然後查詢時再將其中一部分略圖合並,可以保證要求的精度,其中對最後一個同可能需要進行提升。
結合時空數據 與時空數據處理的進一步結合: J. Sun等在文獻[120]中雖然主要針對時空數據的歷史查詢和預測處理。然而,文章卻強調時空數據是以數據流的形式出現的,處理中也更著重於時空數據的更新性能。 Y. Tao等[118]使用數據流的方法處理時空數據,通過對動態的時空數據構造略圖,用於分辨物體是否在多個區域間運動或靜止的狀態,並估算其數量。而這種問題在原先的時空處理中是很難解決的。
小說流派
網路小說數據流是新興流派,意思是小說主角實力數據化,和網游屬性欄一樣的數據顯示。