鏈接:/question/24976006/answer/29682806
來源:知乎。
版權歸作者所有。商業轉載請聯系作者授權,非商業轉載請註明出處。
算法導論中的算法本質上是壹個有精確解的問題,如何更高效的得到這個解。這種效率可以是計算時間更短,或者在計算過程中需要的空間更少。
壹個簡單的例子就是如何快速的把壹個無序的數組從小到大重新排列,或者求它的中值。這些問題都有確定唯壹的答案,壹般都有壹個比較笨的方法(窮舉或者遍歷),可以逐步解決。所謂算法,就是如何簡化步驟,更快更容易的找到這個解。這些算法處理的數據也是簡單幹凈的類型,比如數組,二叉樹,圖。對於這些算法來說,數據規模影響的是計算所需的時間和空間,不會因為規模的變化而影響算法本身的邏輯和計算結果。
機器學習要解決的問題壹般沒有精確解,也不能通過窮舉或遍歷找到。需要強調的是“學習”的屬性,即希望算法本身能夠根據給定數據或計算環境的變化,動態發現新的規律,甚至改變算法程序的邏輯和行為。
例如,壹千個文檔可以分為不同的類別。最簡單的可以給幾個類別,比如新聞、小說、詩歌等。,算法可以根據文章內容自動將它們劃分到相應的類別中。這裏可以看出,即使是人做這道題,也有很多模糊不確定的地方。比如《法制晚報》上的壹部犯罪紀錄片應該歸為新聞類還是小說類?或者壹首長詩,比如荷馬史詩,應該屬於小說還是詩歌?機器學習算法要解決的是根據文章內容中發現的規律自動給出劃分。但是不同的算法可以給出不同的解,這些解都可以是“正確的”,所以壹般需要人為設計壹個判斷標準來決定孰優孰劣。
也可以讓算法發現文章中的規律,把相似度高的文章分在壹起,不需要事先給定類別。這樣,不同的算法可能給出不同的分類數,可能是三個,可能是四個,也可能是五個,都可能是“正確”的分類。甚至什麽是“相似度”,不同的算法可以給出不同的解釋,可以是名詞、動詞、形容詞出現的頻率和比例,也可以是句子的語法結構。
更進壹步,妳可能也希望這個算法可以用來判斷壹個新文檔的類別。輸入的新文檔越多,初始數據集就越大。當規模變大時,原始數據中不明顯的規律可能會變得明顯。比如原來1000篇文檔中只有壹篇議論文,大部分算法可能都無法將其單獨歸為壹類。但是當妳連續輸入100篇議論文,數據中議論文的比例就變成了101/1100%,差不多就是10%。這時候算法要把議論文分開。從這個意義上說,數據本身對算法的影響是很大的,這也是《算法導論》中與算法的本質區別。
從技術上講,《算法導論》中的算法側重於數據結構和計算復雜度,屬於離散數學的壹個分支,不涉及微積分等高級數學概念。機器學習的算法本身是建立在概率論、統計學、最優化等理論和技術基礎上的,從這個角度讓人感覺更“數學化”。
在具體的實現細節中,機器學習算法會在算法的介紹中應用大量的技術來提高計算效率。但需要強調的是,這只是針對底層的實現,兩者在算法本身的邏輯上並沒有太大的聯系。換句話說,《算法導論》中的技術可以幫助妳編寫更快的程序來運行機器學習算法,但對機器學習試圖解決的問題沒有幫助。熟練的使用二叉樹哈希表,準確的估計壹個圖算法的復雜度,未必能幫妳猜出什麽是給女朋友生日最好的禮物(用過機器學習算法的淘寶君大概都知道!)。所以不要把它們當成積木和組件。
最後,如果上面的解釋還讓妳困惑,還有壹個更通俗的解釋:算法的引入是教妳如何數數,機器學習基本相當於占星算命。壹個很機械,壹個靠欺騙。大概就是這樣。
詳細分析見鏈接:/question/24976006。