純幹貨分享:人工智能與大數據開發的12個註意點,經驗之談
人工智能領域的算法大師、華盛頓大學教授Pedro Domingos對此進行了深入思考。
在我們新近翻譯的《智能Web算法》(第2版)中,對Pedro Domingos教授的觀點進行了高度的概括,提煉出12個註意點,為行業開發實踐提供了重要參考:
註意點1:你的數據未必可靠
對大數據的概念都是模糊不清的,大數據是什麽,能做什麽,學的時候,該按照什麽線路去學習,學完往哪方面發展,想深入了解
想學習的同學歡迎加入大數據學習qq群:458345782,有大量幹貨(零基礎以及進階的經典實戰)分享給大家
並且有清華大學畢業的資深大數據講師給大家免費授課,給大家分享目前國內最完整的大數據高端實戰實用學習流程體系 。
在實際應用中,有很多各種各樣的原因會導致你的數據是不可靠的。因此,當你將數據用於解決問題前,必須經常留心來檢查數據是否值得信賴。如果基於糟糕的數據來挖掘,無論多麽聰明的人也永遠只會獲得糟糕的結果。下面列舉了一些常見的可導致數據可靠性問題的因素:
? 用於開發的數據,往往和實際情況下的數據分布不同。例如也許你想把用戶按照身高劃分為“高”、“中等”、“矮”三檔,但如果系統開發時使用的數據集裏最低用戶的身高是6英尺(184cm),那麽很有可能你開發出來的系統裏會把一個“僅有6英尺”的用戶稱為“矮”用戶
? 你的數據集中存在很多缺失數據。事實上,除非是人為構造的數據集合,否則很難避免缺失數據問題的發生,如何處理數據缺失的問題是很有技巧的事情。實踐中我們要麽是幹脆丟棄一部分殘缺的數據,要麽就是想辦法計算一些數值去填補這些缺失值。無論哪種方法都可能導致應用結果的不穩定
? 你的數據可能隨時在變化。數據庫的表結構可能會變,數據定義也可能會變
? 你的數據可能沒有被歸一化。假設你可能在觀察一組用戶的體重,為了能夠獲得有效的結論,首先需要對每個體重的衡量單位進行歸一化,是英鎊還是公斤,不能混淆著用
? 你的數據可能並不適用於相應的算法。數據存在著各種各樣的形式和規範,或者叫數據類型(data types),有些是數值化的數據,有些則不是。有些數據集合能被有序排列,有些則做不到。有些是離散化的數據(例如房間裏的人數),另一些則是連續化的(例如氣溫或者氣壓等數據)
註意點2:計算難以瞬間完成
完成任何一個人工智能解決方案的計算,都需要一定的時間,方案的響應速度,對商業應用的成功與否起到十分關鍵的作用。不能總是盲目假設任何算法在所有數據集上都一定能在規定時間內完成,你需要測試下算法的性能是否在可接受的應用範圍內。
以搜索引擎為例,用戶對結果返回的時長是有忍耐的限度的。如果用戶等待的時間超過10秒,50%的用戶會流失,如果等待時間超過1分鐘,90%以上的用戶會流失。在開發智能應用系統時,不能為了達到更好的算法精度而忽略系統運算和等待的時間,否則會導致整個產品的失敗。
註意點3: 數據的規模非常重要
當我們考慮智能應用時,數據規模是很重要的因素。數據規模的影響可以分為兩點來考察:第一點是規模會影響應用系統的響應速度,上一節我們剛提過;第二點是在很大的數據集上的挖掘出有價值結果的能力會受到考驗。例如為100個用戶開發的電影或音樂推薦系統可能效果很好,但是同樣的算法移植到有著100000個用戶的環境裏,效果可能就不盡如人意了。
其次,使用更多的數據來訓練的簡單算法,比受制於維度詛咒(Dimension Curse)的復雜算法往往有好得多的效果。類似Google這樣擁有海量數據的大型企業,優秀的應用效果不僅來自於精妙復雜的算法,也來自於其對海量訓練數據的大規模分析挖掘。
註意點4: 不同的算法具有不同的擴展能力
我們不能假設智能應用系統都可以通過簡單增加服務器的方法來擴展性能。有些算法是有擴展性的,而另一些則不行。
例如如果我們要從數億的文章標題裏,找出標題相似的各個組的文章,註意並不是所有的聚類算法此時都能並行化運行的,你應該在設計系統的同時就考慮可擴展性。有些情況下你需要將數據切分成較小的集合,並能夠讓智能算法在各個集合上並行運行。設計系統時所選擇的算法,往往需要有並行化的版本,而在一開始就需要將其納入考慮,因為通常圍繞著算法還會有很多相關聯的商業邏輯和體系結構需要一並考慮。
註意點5:並不存在萬能的方法
你可能聽說過一句諺語“當你有了把榔頭的時候,看什麽東西都像釘子”,這裏想表達的意思是:並不存在能夠解決所有智能應用問題的萬能算法。
智能應用軟件和其他所有軟件類似——具有其特定的應用領域和局限性。當面對新的應用領域時,一定要充分的驗證原有方法的可行性,而且你最好能嘗試用全新的視角來考察問題,因為不同的算法在解決特定的問題時才會更有效和得當。
註意點6:數據並不是萬能的
根本上看,機器學習算法並不是魔法,它需要從訓練數據開始,逐步延伸到未知數據中去。
例如假設你已經對數據的分布規律有所了解,那麽通過圖模型來表達這些先驗的知識會非常有效。除了數據以外,你還需要仔細的考慮,該領域有哪些先驗知識可以應用,這對開發一個更有效的分類器會很有幫助。數據和行業經驗結合往往能事半功倍。
註意點7:模型訓練的時間差異很大
在特定應用中,可能某些參數的微小變化就會讓模型的訓練時間出現很大的差異。例如在深度神經網絡訓練時就會有各種各樣的參數調節的情況發生。
人們往往會直觀地覺得調整參數時,訓練時間是基本穩定不變的。例如假設有個系統是計算地球平面上任意兩點之間的距離的,那麽任意給出兩個點的坐標時,計算時間差不多都是相同的。但在另一些系統裏卻並非如此,有時細微的調整會帶來很明顯的時間差異,有時差異甚至可以大到數小時,而不是數秒。
註意點8:泛化能力是目標
機器學習實踐中最普遍存在的一個誤區是陷入處理細節中而忘了最初的目標——通過調查來獲得處理問題的普適的方法。
測試階段是驗證某個方法是否具備泛化能力(generalization ability)的關鍵環節(通過交叉驗證、外部數據驗證等方法),但是尋找合適的驗證數據集不容易。如果在一個只有幾百個樣本的集合上去訓練有數百萬維特征的模型,試圖想獲得優秀的精度是很荒唐的。
註意點9:人類的直覺未必準確
在特征空間膨脹的時候,輸入信息間形成的組合關系會快速增加,這讓人很難像對中等數據集合那樣能夠對其中一部分數據進行抽樣觀察。更麻煩的是,特征數量增加時人類對數據的直覺會迅速降低。
例如在高維空間裏,多元高斯分布並不是沿著均值分布,而是像一個扇貝形狀圍繞在均值附近,這和人們的主觀感受完全不同。在低維空間中建立一個分類器並不難,但是當維度增加時,人類就很難直觀的理解了。
註意點10:要考慮融入更多新特征
你很可能聽說過諺語“進來的是垃圾,出去的也是垃圾”(garbage in, garbage out),在建立機器學習應用中這一點尤其重要。為了避免挖掘的效果失控,關鍵是要充分掌握問題所在的領域,通過調查數據來生成各種各樣的特征,這樣的做法會對提升分類的準確率和泛化能力有很大的幫助。僅靠把數據扔進分類器就想獲得優秀結果的幻想是不可能實現的。
註意點11:要學習各種不同的模型
模型的組合(Ensemble)技術正變得越來越流行了,因為組合方法,僅需要付出少許偏見(bias)的代價,就能大大的減少算法的不確定性。在著名的Netflix算法競賽中,冠軍隊以及成績優異隊伍們全都使用了組合模型方法,把超過100個模型合並在一起(在模型上疊加高層的模型形成組合)以提升效果。在人工智能用於實際應用時,從業者普遍都認為,未來的算法一定時會通過模型組合的方法來獲得更好精度,但是這也會擡高非專業人員理解系統機制的門檻。
註意點12:相關關系不等同於因果關系
這一點值得反復強調,我們可以通過一句調侃的話來解釋:“地球變暖、地震、龍卷風,以及其他自然災害,都和18世紀以來全球海盜數量的減少有直接關系”。這兩個變量的變化有相關性,但是並不能說存在因果關系,因為往往存在第三類(甚至第4、5類)未被觀察到的變量在起作用。相關關系應該看作是潛在的因果關系的一定程度的體現,但需要進一步研究。
在開發人工智能與大數據應用系統時,把握好以上十二個註意點,能夠有效避免實戰中的各種“坑”,幫助技術在走出實驗室,走向落地應用時,能發揮更加健壯、強大的作用。
對大數據的概念都是模糊不清的,大數據是什麽,能做什麽,學的時候,該按照什麽線路去學習,學完往哪方面發展,想深入了解
想學習的同學歡迎加入大數據學習qq群:458345782,有大量幹貨(零基礎以及進階的經典實戰)分享給大家
並且有清華大學畢業的資深大數據講師給大家免費授課,給大家分享目前國內最完整的大數據高端實戰實用學習流程體系 。
純幹貨分享:人工智能與大數據開發的12個註意點,經驗之談