編程演算法和數據挖掘涉及的演算法有什麼區別和聯繫嗎?


這個問題問的好。

簡單來講,前者不依賴於數據,能精確的解決問題;後者依賴於數據,目的是找到一個可接受的解。

經典排序或者搜索演算法中的快排、堆排、二叉、B樹等等,它們的存在價值不依賴於輸入數據——有固定的步驟和解法,對於不同的輸入數據都能正常運行(可能對特殊的數據有時候性能會差一些);但是機器學習演算法不同,你使用一個演算法,做了一個模型,只是為了解決某個特定數據集下的某個需求;換一個數據和場合,這一套東西很可能就沒有存在的意義了。

舉個例子,對於尋路演算法,如果你要找到最優解,那本質上就只有完全遍歷所有路徑。這是一個可計算,但是np的問題。而大多數情況下,我們需要在一個可接受的時間內獲得一個比較優秀的解,那我們就可以嘗試蟻群演算法、模擬退火演算法等等。如果應用場景更具體化,我們能做的花樣就更多了。比如如果是在微博用戶中進行「尋路」(比如通過幾個人把你們聯繫起來),這樣我們會優先搜索你好友中關注關係多的用戶(因為他們更可能是所謂的「節點」用戶);而在實現上,可以把最常使用的節點用戶cache起來,進一步提升實際搜索的效率。——這還真就是演算法。

另一方面,有些問題壓根就沒法取得所謂的「精確解」。比如拼寫糾錯。

有個很有名的例子:有段時間內,在百度搜索輸入「淳安」(chun an),會出現「處男」(chu nan)的搜索結果——百度因此被某些人無腦噴。究竟為什麼會出現這麼看似搞笑的現象呢?因為在百度演算法後台,實際上計算的是兩個條件概率的大小:1.想輸入「chu nan」而輸入「chun an」 2.想輸入「chun an」而輸入「chun an」。概率1實際上近似等於「想要輸入處男的概率×輸入錯誤的概率」,2等於「想要輸入淳安的概率×輸入正確的概率」。而經過大量歷史數據統計訓練的結果,概率1大於概率2(比如可能雖然輸入正確的概率比輸入錯誤的概率大20倍,但是輸入處男的概率比輸入淳安的概率可能要大幾千倍),所以百度的拼寫糾錯系統會將chun an糾錯成chu nan。——所以,你可以噴百度的用戶層次太低,「處男」這麼low的詞出現概率太高,但是不能黑百度沒技術。

類似像上面的拼寫糾錯的例子,你怎麼能保證猜中在每一次輸入中究竟用戶想要的究竟是處男還是淳安呢?你只能通過機器學習得到一個概率,盡量的在大多數類似場景中取得較優的結果。

以上。


兩者之間的關係就是離散數學和統計學之間的關係。


就我的理解而言 目前通常所說的演算法一般分為兩類,一類是傳統演算法,就是演算法導論一類的書裡面介紹的演算法,而另一種應該稱作模型 比如神經網路,svm,kmeans等等,前面所說的演算法通常不是很複雜,大家主要關注的是此類演算法運算的速度,後者通常只是一個大概的模型,需要依據具體的數據進行優化,大家關注的是在此演算法下定義指標的效果,比如分類準確度等等


學好計算機演算法有利於model的實現和效率,否則……model可能不能達到實用化程度。


推薦閱讀:

如何能有效地學習 VBA?
WIFI萬能鑰匙用戶量在烏雲曝光會有什麼影響?
在c中當定義一個變數並對其取地址的時候電腦發生了什麼?
調試程序有哪些技巧?
未來會不會出現這樣的編程語言?

TAG:演算法 | 數據挖掘 | 編程 | 大數據 |