智慧應用中八個常見的誤區

broadviewbj發表於2011-08-22

智慧應用中八個常見的誤區

17

到此,我們已經介紹了與智慧應用相關的基礎知識,現在你應該已經對什麼是智慧應用,以及應該如何使用智慧應用有了一個整體的瞭解。你很有可能迫不及待地想要開始寫程式碼,我們不會讓你失望的。除了本章之外,每一章都會給你介紹新的有價值的程式碼。

但在開始進入激動人心且充滿經濟利益的智慧應用世界之前,先來看一些帶有智慧功能的專案中常見的錯誤,或者說是誤區。你可能熟悉分散式計算的八大誤區(如果沒有看過,可以參考Van den Hoogen的業界評論),其中列舉了第一次開發分散式應用的程式設計師對分散式應用的常見誤區。同樣,根據這個傳統,我們在這裡也會介紹八個智慧應用開發中常見的誤區。

:資料是可靠的

很多因素會導致你獲取的資料不可靠。在考慮具體的智慧演算法解決方案之前,首先就要判斷資料是否可信。如果資料有問題,就算是最聰明的人,通常也會得出錯誤的結論。

可能導致資料出錯的原因有很多,在此不可能一一列舉,下面列出了部分有代表性的可能導致資料出錯的因素:

·    在開發過程中所使用的資料不能代表產品環境中的資料。例如,對某個社交網路中的使用者按身高分類“高”、“一般”和“矮”。如果開發階段所使用的資料中最矮的使用者的身高是184,那就有可能會得出“你太矮了,才184的可笑結論。

·    資料中可能含有缺失值。實際上,除非資料是人造的,否則資料就肯定會含有缺失值。缺失值的處理非常需要技巧,通常,既可以保持缺失值狀態不變,也可以用某種預設值或是計算得到的值來填充。兩種情況都可能導致不穩定的實現。

·    資料可能會改變。資料庫策略可能會變,或者資料庫中資料的語義也有可能發生變化。

·    資料沒有規範化。假如我們關注的是每個人的體重。為了能根據體重得到有意義的結論,所有的單位應該是統一的:磅或是公斤,兩者只能取其一,而不能是兩者的混合。

·    所想的演算法可能不適合資料。資料有不同的形式,也就是資料型別。有些資料集是數值型別的,有些則不是;有些資料集可以排序,有些則不能;有些數值的資料集是離散的(例如,房間中的人數),有些則是連續的(例如氣溫)。

18

誤區2:計算能馬上完成

任何解決方案的計算都需要時間,應用的反饋速度對於業務在經濟方面的成功是至關重要的。不能盲目地假設應用能在限定的反饋時間內在所有的資料集上完成所有的計算,需要仔細測試演算法在各種操作中的效能。

:不用考慮資料規模

當我們討論智慧應用時,規模是很重要的。資料的規模會給整個應用帶來兩方面的影響。其一,是在誤區2中提及的反饋速度問題。其二,則是如何從海量資料中獲得有意義的結果。如果只有100個使用者,系統可能給使用者推薦非常靠譜的電影或音樂。但同樣的演算法在面對100000個使用者時,就有可能變得非常糟糕。

反之,在某些情況下,資料越多,應用就會變得越智慧。所以,資料規模帶來的影響是多方面的,你應該經常問自己:我有足夠的資料嗎?如果資料增加10倍,會給我的智慧應用帶來什麼影響?

:不考慮解決方案的可擴充套件性

另一個與誤區23有關,但又有區別的誤區是認為只需要增加計算機的數量就能不斷地擴充套件智慧應用解決方案。不要輕易地認為任何一個解決方案都是可擴充套件的,有些演算法是可擴充套件的,有些則不行。例如,我們要把數十億條新聞新標題按相似性分成若干組,並不是所有的聚類演算法(見第4章)都可以並行。因此,在應用的設計階段就應該考慮到可擴充套件性。在某些情況下,可以分割資料,然後將演算法應用到分割後的較小的資料上,從而實現並行。運氣好的話,在設計中所選擇的演算法可能是有並行版本的,但因為演算法在智慧應用中的重要性,以至於很多基礎設施和業務邏輯都是圍繞演算法展開的,所以在設計的開始階段就要關注所選擇的演算法的可擴充套件性。

:隨處使用同樣的方法

如果能反覆用同樣的成熟技術解決與應用中的智慧行為有關的各種問題,這無疑充滿了誘惑。要盡力拒絕這種誘惑!我曾經見過有人試圖用Lucene搜尋引擎解決世界上所有的問題。如果你也在做同樣的事情,請記住這個經驗:如果你手上握著錘子,所有的東西在你眼裡都像是一顆釘子。

19

智慧應用軟體跟其他的軟體類似—都有一定的應用領域,也有一定的侷限性。在將你所喜愛的解決方案應用到新領域之前,要徹底地進行測試。此外,對於每一個問題都應該從新的角度去觀察。不同的演算法或許能更加高效地解決新問題。

:總是能知道計算時間

此類誤區的典型例子是涉及最佳化的問題。在某些應用中,引數的細微變化都會帶來計算時間的大幅變動。人們總是希望在改變問題的引數後依然能夠在限定的反饋時間內解決問題。如果只是計算地球上兩個地理位置間的距離,計算時間當然與具體的地理位置沒有關係,但這並不適用於所有的問題。在某些情況下,資料的細微變化就會造成計算時間劇烈變化,有時候甚至是幾秒鐘與幾個小時的差別。

:複雜的模型更好

任何事情都是過猶不及的。我們首先應該從最簡單的模型開始。然後在解決方案中透過逐步新增其他智慧元素改進效果。KISSKeep It Simple, Stupid)原則永遠都是軟體工程師的好夥伴。

:存在無偏見的模型

如果有人說過這樣的話,原因只有兩個:無知或偏見!在選擇所需的模型和選擇用於訓練演算法的資料時,就已經引入了偏見。在這裡,我們無法從科學的角度深入地討論學習系統中的偏見,但我們應該注意解決方案中的偏見總是傾向於我們模型的描述和我們的資料。換句話說,偏見使我們的方案受到已知的事實或是我們獲得這些事實的方法的限制,而泛化則是試圖從已知的事實中推斷出未知的事情。

 智慧應用中八個常見的誤區

本文節選自《智慧WEB演算法》一書。

圖書詳細資訊:http://space.itpub.net/?uid-13164110-action-viewspace-itemid-705377

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-705566/,如需轉載,請註明出處,否則將追究法律責任。

相關文章