熱線電話:13121318867

登錄
首頁精彩閱讀模式識別和機器學習、數據挖掘的區別與聯系
模式識別和機器學習、數據挖掘的區別與聯系
2017-05-05
收藏

模式識別和機器學習、數據挖掘的區別與聯系

(一)模式識別的誕生與人工智能

自動控制起始是從工業革命之后,人們就希望設計出減少人工干預,能自己進行調節(regulate)的機器,工程領域開始想出了根軌跡等等土招兒。等到40年代,伴隨二戰的需要,計算機的產生,維納(Wiener)——信息論和控制論(Cybernetics)的祖師爺正式開創了這“兩論”。
控制論這個詞是維納根據古希臘詞根發明出來的。用老爺子自己的話說就是“Cybernetics :or control and communication in the animal and the machine”。animal先不提,那是人家天才小時候就對生物學有興趣;在工程方面,控制論的control主要是圍著machine轉的。因為祖師開山的時候是二戰中,初衷就是要讓機器代替人進行防空武器的隨動瞄準。

維納是數學家,寫出來的理論和公式,讓當時的工程師們看著實在頭疼。但是維納不僅僅是數學家和“搞理論”的,實際工程問題,人家二戰中參與了,也想到了。最典型的就是對噪聲的處理。

典型的負反饋控制系統框圖里,從“傳感器”的到“給定輸入”之間,畫一根線就連過來了??墒菍嶋H中,傳感器有誤差,測量回路中有包含噪聲,需要的測量值甚至根本就是淹沒在一片嘈雜的信號里面(水聲信號)。這時候管識別“真實值”的問題叫濾波,通過設計各種濾波器來解決。

但是一學到現代信號處理這塊就會發現和傳統的信號處理不一樣了,不再是時域、頻域、Z域的濾波器變來變去了。從維納最佳濾波的算法和ARMA模型的原理就可以看出來,既然是用隨機過程和概率統計來看待和描述信號和噪聲,那么已經可以把這個濾波問題用“估計(Estimation)”、“預測(Prediction)”來描述了。此外,對系統的狀態方程確定參數的問題,好像是用的“辨識(Identification)”吧,都差不多。之所以羅嗦這些詞,是因為這些詞在模式識別的分支里出現的詞。

祖師爺提出、總結這些方法大概主要為了玩轉控制問題里的那些傳感器。但是,其他不需要machine、不需要控制的領域,但是也需要用傳感器去測量、去噪聲、估計、預測、辨識??!其實從需求角度,類似“怎么讓機器能像人一樣分辨人的語音”的研究,也是從40年代就開始了,一開始也是“語譜圖”之類的土招兒,好像是貝爾實驗室弄的吧。類似的問題“識別航拍照片”,“識別手寫文字”都是類似的工作。這些工作也都希望使用計算機代替人來做呢。

花開兩朵各表一枝,先放下各行各業的需求和土招兒暫且不說,再來看看計算機。與此同時,計算機產生之后也需要找到更多的應用領域。除了吸引人的計算速度之外,數學家開始琢磨讓計算機再干點別的。

于是,50年代開始出現“人工智能(artificial intelligence AI)”這個詞。注意是artificial不是simulation。也就是說,不是用計算機“模仿”人腦硬件結構和人的思維過程,而是研究怎么讓半導體造計算機用二進制數據結構+算法去達到肉長的人腦的智能“效果”。好比做題,只需要你能得到結果,不看步驟。數據結構和算法是計算機專業的核心之一,也是當年在“制造計算機”之外,研究怎么“使用計算機”的獨門課程。(咱們中國大學里的計算機系大概是60年代從電子系、自動化系里獨立出來的。)所以 “會編程、搞軟件的”IT民工里,科班生比半路出家的“藍領”強就強在,除了會if for這些語法之外,就是人家數據結構、算法、離散數學這些方面正經學過。那些“走迷宮”、“8皇后問題”,就是數學家抽象出來,丟給計算機去做的人的智力題。

AI又叫狹義的人工智能,基本可以等同于計算機算法了。當然也確實有研究人腦結構和思維過程,用計算機去simulation人腦的“廣義”人工智能,不過那更多是醫學、生理學的事情啦。也許有人說不對啊,神經網絡(Neural Networks NN)可是就是模擬人的神經元呀的算法啊,算狹義還是廣義?這個,統計學家們發來抗議電,說NN壓根就沒那么玄乎,不過就是類似“投影尋蹤回歸(Projection Pursuit Regression)”的算法。這個后面寫到模式識別具體算法時候會提到。

但是除了做智力題之外,人的能力里屬于智能的到底都有什么呢?經過總結,其中之一是識別能力,然后是決策能力。

這下好了,一邊是需求,一邊是計算機的計算能力。估計、預測、辨識、識別……是時候把這些類似的工作統籌解決了!

這樣在60年代,模式識別(Pattern Recognition PR)產生了

(二)模式識別的流程與機器學習

一個標準的模式識別流程是:

“客觀對象”—1—>“數值表示”—2—>“計算機算法”—3—>“識別結果”

但是這個流程只是計算機工作時的流程。而在能這樣工作之前還要干很多事。比如人臉識別,一個計算機算法又不是天生就認識很多人,算法要經過訓練和學習好了,才能照上面這個過程工作。

那么到底在訓練、學習些什么,又是在識別些呢?這個還是要回到定義?!澳J阶R別”這個詞不是太容易顧名思義的,我直到研究生入學以后很長時間還是不明白是什么意思,就知道是能分類。

還是說人臉識別吧。對人來說,看見來自于1個人的人臉圖像,即使是不同表情和姿勢的,我們也能認出這些圖像來自于同一個人。而你之所以能認出來,可能是觀察了臉型+發型,也可能是五官形狀的組合??墒堑降资菆D像上的什么決定了你的判斷呢?你有的能說出來,可是有的卻又說不清道不明的。于是,就用一個抽象的詞——“模式”來形容那些能夠讓你判斷出哪些樣本屬于同一類別、能夠和其他類別相區別的特征或者屬性。

我們下面設計計算機算法為每1個人的圖像建立唯一的1個“模式”或者說模型,不同的N個人對應于N個模型。很可能每個人的身份編號i對應一個參數模型Mi。這個建立或者說訓練(train)過程可能就是“統計”這些圖像,確定每個模型的參數。

而開發者為了評價算法性能,也要先預備一些已知類別的圖像,分成train set 和test set,這樣在訓練集上訓練好的算法,要測試集上測試一下。根據測試結果調整算法參數,或者實在太差的話要換一種算法了。不斷的調整參數、不斷改程序,不斷的train,不斷的test……所以這方面的論文通常要附上算法在各種數據集,各種情況下的結果。一個圖,一張表的背后,要寫好多程序,花好多時間在電腦上運行。

這樣訓練好后,就可以按上面那個流程工作了。如果一張屬于第i人的圖片來了,算法用保存的N個人的模型去分別計算相似度,判斷這張圖片來自于模型Mj的可能性最大,也就等于電腦可以通過看圖片識別出了這人的身份是j。如果j等于真實身份i,那就識別正確了,如果每次都識別對,那電腦就達到了人腦的能力了。

注意算法在輸出j的時候是不知道真實身份i的,那么這種工作,就可以看成是一種預測(Prediction)。如果需要輸出是離散變量,比如這里是類別,就稱為分類(Classification),而需要預測連續型變量的,比如股指,房價,就稱為回歸(Regression)。這里的回歸沒有針對“過去”的值的意思,就是說預測的目標輸出的是連續性的值。

好了,現在來說機器學習(Machine Learning ML)?;仡櫼幌履愕哪P蛷哪睦飦淼??雖然有些模型假設,但主要從輸入的已知身份的數據中來的。而算法的“訓練-考試”過程,又很像人的學習過程,于是把這一類計算機算法叫做Machine Learning。其實是Machine Learning from data了??雌饋硎荕achine在不斷自己 Learning,其實是人寫的算法讓它一直learning。如果算法是純用統計學,也可以叫統計學習(Statistical Learning)。

所以在我看來,ML可能是最類似AI的范疇了,都是計算機算法嘛。區別是AI是具備類人能力就行,不管算法怎么來的,一個拍腦袋定義的出來的公式也算。而ML要窄一些,是特指經過Learning from data 過程而獲得的“智能”。用統計學的里的概念來說,ML是一種數據驅動的,非參數(Nonparametric)或者半參數(Semiparametric)算法。再來比較PR和ML??梢哉f,PR里面的算法部分基本上一定是屬于ML。區別在于,PR里的ML算法主要就是在做預測。而整個ML就要廣多了,如果你的算法輸入是棋譜,那么訓練好的算法就可以下棋打牌。但是UCI上面供機器學習算法之間進行能力比較的標準數據集基本都是分類和回歸問題。這么看ML和PR實在是太相似了。

說到了這里,PR里面的ML算法,主要都是在用統計學(少部分有圖論),問題也就出來了。提出算法的主要是人家數學家、統計學家、或者計算機專業的干的,已經屬于science了??墒窃趺茨J阶R別的事凈是自動化、電子信息、通信這些專業的搞呢?雖然你們攢一起改叫Electronics Engineering了,可那也是Engineering啊,本科頂多學點高數,線代,復變,信號系統,古典概型和簡單數理統計,再學編碼啥的,到碩士嘛頂多學點矩陣論,隨機過程頂天了。就這點數學底子,提不出啥牛X算法,憑啥模式識別專業還是你們這些工科生霸著???丟給數學系、統計系,或者計算機系得了,人家CS好歹也是S啊。

嗯,我也疑惑了很久,明明都是在折騰數學,怎么還是賴在工科里呢?

(三)模式識別中的工程、技術

為什么要說說PR沒被數學、統計和計算機專業搶去的問題,實際是想分析一下PR里的科學與技術,理論與工程的問題。

如果去學PR,看任何一種這方面的經典教材來看,基本上全是在講各種理論、各種分類回歸算法、和算法的思路。(關于這方面的經典教材,其實特別想單獨來說的。如果是第一本,挑一本對自己胃口的書很重要。原因是經典基本都是700頁起的,而且基本滿眼望去都是公式。理科生不論,對于看理論經常感覺力不從心,或者沒什么耐心的工科生,如果找了一本不對自己胃口的書可能就很難看下去,Amazon上的書評里每本經典都有一堆5星,但是也頗有些1 2星的。)

雖然可以說“學PR 就等于學各種分類算法”,但是不等于說PR 就等于分類算法。最起碼炮制這方面的論文就不等于炮制分類算法F,想想也是,不然工科生還有的混嗎!作為說PR的最后一節,這次工科生要來吹吹牛,看看PR除了統計理論和算法,有什么離不了工程、技術的地方。還是先把流程圖再畫一遍:

“客觀對象”—1—>“數值表示”—2—>“計算機算法”—3—>“識別結果”

上一篇主要說的是 “計算機算法”—3—>“識別結果”這塊,確實最重要,是核心?!皵抵当硎尽薄?—>“計算機算法”比較簡單:算法要求輸入的數據通常都是個很規整的矩陣,比如N個訓練樣本,每個樣本p個特征(feature),輸入就是一個N*p的矩陣。 此外,有的算法需要對列進行標準化,有的不接受連續型變量和離散值變量的混合,有的干脆不接受連續型變量,要量化變成啞變量。所以根據算法的不同,對數據的形式也要稍微做點加工。這也沒啥特別的。

關鍵就在于前面,“客觀對象”—1—>“數值表示”。還是繼續以人臉識別為例吧。研究了一個算法,都要在網上的幾個標準人臉庫中的圖像上實驗自己的算法。通常庫里每個人的照片包括各種姿態(比如稍微左右側一些,抬頭低頭),表情變化,各種光照陰影,有的還有飾物比如眼睛,帽子,發型變化。圖像尺寸都是統一的,的比如256*256,灰度也是8bit這樣。

好了,你的算法在幾個人臉庫上跑得不錯,實驗數據有了,論文有譜了,你很開心。老板也很開心,于是老板接了個小項目,讓你參與做個人臉識別的門禁系統。這時候你就會發現,想按照那個完整流程來工作,1這一步的問題一點也不少。

首先就是傳感器的問題。傳感器直接決定了圖像有沒有形變,顏色和灰度有沒有改變,是不是清楚,分辨率有多高。通常的問題不是“有還是沒有”,而是“有。怎么辦?”所以從硬件選型到板卡布置這塊首先少不了“專門經驗”,然后還有成像這塊和圖像處理的知識。得到內外參數,怎么把畸變調整一下,然后降降噪聲,直方圖均衡調整一下對比度,尺寸也調整一下。這些圖像處理課里的內容,雖然也都是簡單的數學公式,但是,場合不同,想要的圖像效果不同,參數上也總要微調的——讓我想起了PID參數的整定。嗯,很工科。

插一句,我所理解的工程學就是對實際問題的專門經驗的積累。公式理論簡單,而經驗的獲得,只需要多花時間和實際問題打交道,自然熟能生巧。這么看工科很easy,經驗也沒什么神秘的。但是每個人的時間總是有限的,如果專門在一個領域花了比別人多的時間,那么他的經驗就變得寶貴起來了。此外“接觸實際”四個字也不是人人都喜歡的。實際中沒有書本上的“理想條件”,只有各種層出不窮的想不到的問題。挑戰性一點不比在理論上探索低。工科的思維就是事前對可能遇到的實際問題的復雜性的敏感和估計,事中遇到問題時的能想法子解決??梢詫π阅芡讌f、將就;可以對參數近似、也可以試驗出來;可以把原本充滿創新的玩意改得樸實無華或者面目全非——一切只為了這玩意最后能工作起來、能動換(然后再慢慢往好看、好用上改)。

嗯,跑題了,繼續?,F在圖像清楚得已經堪比人臉庫了,識別效果還不錯。找客戶來驗收吧!可是給客戶演示完,人家突然問系統能不能集成到一起,做到DSP和嵌入式系統上;還要這樣,還要那樣……嗯?等等,你忽然想到好像程序是在雙核PC上跑的,好像用了好些個MATLAB導出的函數,有個算法還是R里面的……

你嘴上說是,臉上沒反應,但心里浮現的卻是《潛伏》里陸橋山審馬奎時從牙縫里擠出來的臺詞:我真想撕爛你的嘴!你當初不是說……
可老板下了死命令,大家只好大干快上干起來!作為開發算法的你,責無旁貸??!

軟件徹底用C和C++重寫!不能用好使的MATLAB了,API真矬,簡單的矩陣運算要費勞資這么大勁。不知不覺1禮拜過去了,終于寫好了。

趕緊到下載到那邊已經是改到第N版剛拿回來,還熱乎乎的板卡:

咦,沒反應?軟件還是硬件問題?那邊查電路,這邊改程序試試?

呼,有影了,可是噪聲咋這么嚴重,鼻子不是鼻子臉不是臉的?攝像頭還是板子上有干擾?軟件上能再改改參數?終于運行起來了,怎么好像卡死了?哦,原來是太慢了。硬件條件比PC機差了好幾個檔次了,怎么辦啊,換個簡單一點的算法?那性能咋辦?那之前那個算法好不容易得到實驗結果不是都白做了么?

滿頭黑線了吧?

這個人臉識別的例子有點夸張了,但不是完全虛構出來的。通過這個例子想說的是,數據來源,軟硬件的布置,性能的取舍,參數的實驗調整都是論文上看不到也寫不出來的實際工程問題。通常需要各種不同的傳感器和硬件打交道,也需要各行各業的專業背景知識。涉及圖像的少不了攝像頭、照相機和圖像處理的知識;做水聲信號和語音識別,少不了拾音器陣列,頻域方面的信號處理知識。這也就是為啥自動化,電子,通信、甚至生物醫學專業能摻和其中的原因。

最后總結一下我對PR的認識:PR是因為各個領域有“電腦代替人腦”的實際需求才產生的,所以是一定面向應用的。PR不是在標準數據集上驗證分類算法的性能就完了,這個是ML的事情。PR是要把ML算法在實際問題中用起來。是理論加實際,科學和技術(雖然理論是核心)。
前三節主要是圍繞PR來說,就說到這吧。下面打算試著說說我認識的機器學習算法概貌和一直沒露面的數據挖掘。

(四)可解釋性和數據挖掘

從這節開始,打算把ML算法的概貌描繪一下。ML領域發展特別快,幾乎所有的論文都聲稱自己弄出一種新算法??凑撐亩嗔酥笪业捏w會是,如果心里沒有幾條線索,就分辨不出這一堆算法的區別與聯系,最后的結果是學會一堆“支離”的算法,學習了蘋果只知道這是蘋果,給個鴨梨就不認識了,給個蘋果梨就更不明白是什么東西了。至于應用時,更不知道哪種算法更適合自己的問題。一般都是把ML算法分成兩大類:有監督學習(Supervised Learning)和無監督學習(Unsupervised Learning)。我覺得這其實是從輸入數據的形式上分的,說這個離不了公式和圖表了,不想先說這個。從ML的目的和用途來分,可以分成預測(Prediction)和數據挖掘(Data Mining)。我覺得對應用來說,這么分更有意義些。這兩大類算法的核心區別就是:預測問題更重視算法的預測能力(Predictive Power),數據挖掘問題更重視算法的可解釋性(Interpretability)。預測之前說過了,針對的目標變量如果是離散的類別標記,比如醫學上的某種病的陰性陽性,或者人的身份編號,就叫分類(Classification);如果針對的連續的變量,比如股價,房價,就叫回歸(Regression)。

預測能力很容易理解,我們只關心train set上訓練好的算法在test set上面誤差、誤分類率要盡可能低。也就是說,模型給出的預測要盡可能地接近實際結果。

可解釋性就要好好說說了。簡單說就是,我們更關心輸入的p維變量之間的聯系,或者算法產生的預測是哪幾個變量起了主要作用,也就是說,算法給出預測結果的根據是什么。

比如商業智能(BI)上常見的購物籃分析(Market Basket Analysis)就是個典型的看中可解釋性的數據挖掘問題。因為直接有“錢景”,所以幾乎每個講統計的,講數據挖掘、機器學習的,甚至講數據庫應用的書,都要提到這個事,現在各個購物購書網站也都在做這個事。

零售商從積攢的海量顧客賬單中可以“挖掘”出什么呢?首先,分析哪幾種商品容易同時出現在顧客的購物籃里,商場就可以把這些看起來風馬牛不相及的東西放在一起,方便顧客購買;另一方面,分析客戶辦會員卡時留下的個人信息,可以分析出經常光顧本商場的是那些特征的人,這樣對外投放使廣告便更加有的放矢,可望吸引更多這些類型的人來。

流行的做法是每張賬單作為1個p維向量,對應所有p種商品。買了置1,沒買置0。N張賬單就組成了一張N*p的值為0-1的表格。用流行的Apriori算法從數據中“挖掘”購物模式。比如一個support = 0.03,confidence = 0.87的Rule:{花生醬,黃油,果醬}=>{面包}這就說明,如果一個顧客同時買了前三種東西,那么他同時買面包的可能性是87%。而這種同時買4種東西的顧客,在總顧客中占3%。

這個模式看起來平淡無奇,可是有時有很奇怪的模式被挖掘出來,忘了從哪里看到的一個例子:

{尿布,奶粉}=>{啤酒,刮胡刀}把這4個放一起確實提高了銷量,原因后面再說。

而對客戶身份信息的挖掘結果比如說是:support = 0.13,confidence = 0.8{在家講英語,有住房,職業是professional}=>收入大于$40000。

那就趕緊針對這些人,在他們經常出沒的地方做廣告吧!注意看這些“模式”,前面的括號里只有2 3個“變量”,遠遠小于總共p個變量。也就是說,我們做出的預測,只依賴于所有p個變量中特定幾個變量。

如果我說這就是可解釋性??峙麓蠹疫€是不明白。嗯,佛教上闡釋概念,有“表詮”和“遮詮”的說法。為了說明一個概念,表詮就是說“它是什么”;遮詮卻不說“它是什么”,而是說“它不是什么,不是什么……”。嗯,下面再和不具備可解釋性的算法比一下就知道了。

比如還是N*p的矩陣,如果我想分析什么東西導致了買面包,我把其他p-1種東西 +1個截距項一共N*p做為X,面包N*1作為Y,做個最小二乘

Beta = (X’*X)-1*X’*y這個結果Beta意味著什么呢?有了這個Beta,給我任何一個1*(p-1)的賬單x,都能給出買面包與否的預測值y_est = x* Beta。

但是,看著這個回歸出來的p維的Beta,我不能像之前那樣,簡單說出對買面包來說是哪幾種別的商品起了更重要的作用,也就沒法想出提高銷量的方法了。

這就是預測能力和可解釋性的區別。

預測能力就是輸出結果的準確度,而可解釋性是可以用來幫助人們理解模式背后的原因。比如從前面那個{尿布,奶粉}=>{啤酒,刮胡刀}的購物模式,再配合顧客的年齡和性別,就最后推斷出,可能是妻子在坐月子時,年輕父親們被打發出來購物的。進而可以重新設計實驗或者進行改進:不但把這已發現的4種商品擺一起,而且把其他年輕父親可能會買的東西也擺過來試試。

醫學上也是這樣。不是特別關注用已有的p項的因素(行為習慣、實驗條件、檢查化驗結果)去準確預測疾病,而更關注如何從p個因素中發現是哪幾種因素組合更容易導致疾病,進而可以改進實驗設計,改進檢查,乃至改進預防和治療的方案。傳統上統計學里作為因素分析(Factor Analysis)問題來研究,而數據挖掘使用的方法就更多,涉及的更廣。而且數據挖掘也不僅僅是用來進行變量選擇和重要性分析,可以用樹、圖、層次聚類之類直觀的結構,描述變量之間的復雜依賴關系。

前一段有個書叫《小趨勢》(microtrends)的,里面舉了美國社會統計學家統計出來的許多看起來奇妙的小眾人群,用來描述當今的美國社會。甚至進而有針對性地設計競選宣傳策略,左右選舉結果。這都屬于看中可解釋性的數據挖掘了。
總結一下預測和數據挖掘的區別:預測是偏重得到決策結果,數據挖掘是偏重分析決策原因和過程。

預測問題主要是在生物特征鑒別(人臉,語音,指紋,虹膜)、機器視覺、目標跟蹤這些領域,直接代替人進行決策。在商業數據,醫學數據里,需要解決數據挖掘問題,給人提供參考。

之所以要費勁區分預測和數據挖掘,因為天下沒有免費的午餐,一種算法預測精度高了通常很難具備太好的可解釋性。要針對具體的應用問題選擇合適的算法,就要明白自己更需要的哪種能力。很多算法同時具備一定的預測準確度和可解釋性,僅從算法形式上很難分清,還是應該從應用背景上來分析。


數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢