爲何我基於開源包建的模型效果很差?

機器學習發展到今天已經有衆多優秀前輩給咱們貢獻了各類各類現成的開源包程序員

以最流行的 Scikit-learn 爲例,提供了包括迴歸 (Regression)、降維(Dimensionality Reduction)、分類(Classfication)、聚類(Clustering) 等方法的開源包,使用者能夠靈活的實現各類建模操做。可是也有人發現了,一樣的開源包不一樣的人建出的模型效果是不同的,甚至截然不同。爲何大牛就能建出高質量模型,而我基於開源包建的模型效果老是不盡人意呢?主要緣由有如下三點:算法

首先是數據自己質量差。數據挖掘就像挖金礦,含金量高,那麼挖掘難度就小,出金率就高,反之含金量低,那麼就會難度大效果差。數據問題大概能夠從 2 個方面來考慮,首先要檢查數據量是否充足,大部分的機器學習算法都須要必定量的數據才能正常工做,太少的數據量會致使建模失敗或模型效果很差,尤爲要注意不平衡樣本中陽性樣本的數量;其次要分析參與建模的數據樣本和特徵分別是否具備表明性,例如要經過民調來預測美國總統大選,那麼民調的樣本要具備全面的表明性,不能只抽查偏向某一方的人羣或地區,除了樣本要有表明性數據特徵也要有充足的相關性才容易建出好的模型。數據庫

可是,我和大牛使用的是一樣數據,建出的模型依然很差,又是怎麼回事?安全

第二個緣由是預處理沒作好。原始數據每每是不能拿來直接建模,還須要作預處理,預處理作的是否合適會對模型結果產生很大影響。但同時預處理也是一件十分頭大的工做,由於它沒有固定的方法可言,數據特色和分佈不一樣預處理的方法也就不一樣,須要不斷地去嘗試,這也正是爲何咱們使用開源包複製了別人的流程,也依然效果很差的。以簡單的缺失值處理爲例,好比在年齡的變量中,5% 的顧客沒有指定年齡,那麼你必須決定是總體的忽略這些特徵,仍是忽略這部分有缺失的實例,又或者是將缺失值補充完整(好比,填寫年齡值的中位數仍是平均數或是更復雜的方式填充),或者是訓練一個帶這個特徵的模型,再訓練一個不帶這個特徵的模型,等等,以及,當缺失率達到 90% 時是否還能採用相同的處理方法。再例如原始數據可能會存在錯誤、異常值和噪聲,算法也是很難檢測到數據規律的,還有高基數變量,非正態分佈,時間特徵等等都是須要處理的。機器學習

花時間來預處理數據是很是值得的投入,事實上,大多數數據科學家也都會花費至關多的時間來作這項工做。而要作好預處理是須要深厚的統計學基礎和豐富的數據處理經驗,而且通過屢次嘗試才能作好的。機械的使用開源包複製別人的預處理流程甚至幾乎不作什麼預處理直接就開始建模,模型效果固然就只能看運氣了。ide

除了預處理外,還有算法參數選擇不當的問題。數據挖掘算法和數據庫運算中用到的排序、分組算法有很大不一樣,後者是肯定的算法,一樣的數據進來就會出一樣的結果,也沒多少參數可調。而數據挖掘算法有許多經驗因素,一樣的數據進去,設置不一樣的參數來訓練模型,結果極可能是不同,甚至可能差異很大。以經常使用的 GBDT 算法爲例,須要的參數有十幾個,以下圖所示,這些參數表示什麼含義,如何去設置,如何能快速找到最佳值,當模型效果很差時如何去調參, 這都須要建模師對算法原理和應用場景有深入的理解才能順利進行。何況算法也不是隻有這一種,在建模時用哪一種算法,是用一種仍是多種組合用,都是建模師要須要考慮的。模塊化

1595323364613100.png

開源包的特色是靈活,幾乎能夠實現任何操做,但缺點是模型效果取決於使用者的水平,雖然都能建出模型,可是若是沒有背後的統計學、微積分、機率論等數學理論支持,不懂得如何合理的處理數據,選模型,選參數,作評估等等,也很難建出好模型。打個形象點的比喻,開源包裏的算法和函數就好像是一堆模塊化的建築材料,而要蓋一座大樓僅僅有這些原料是遠遠不夠的,還要懂得建築結構,材料,機械,流體力學,暖通工程等理論才能建出適合住戶需求且安全的大樓;不然只能叫搭房子,至於搭出來的房子能不能住人、會不會倒,常常是看運氣。函數

那麼,對於咱們普通的初學者或者程序員是否是就很難作數據挖掘了?也不是,近年來興起的自動建模技術就能夠幫到咱們。自動建模技術是將統計學家和數學家的數據處理經驗和理論融入到軟件中,使得軟件可以智能的去完成數據預處理,建模型,選參數,作評估等一系列的工做。對於使用者來說只須要將數據丟進自動建模工具,而且配置好目標,工具就可以自動建出優質模型。所以不管是業務人員仍是普通的 IT 程序員均可以經過自動建模技術來作數據挖掘業務,連簡單的 Python 都不用再學就能夠享受 AI 技術帶來的福利。工具

對進一步數據挖掘和 AI 技術感興趣的同窗還能夠搜索「乾學院」,上面有面向小白的零基礎「數據挖掘」免費課程。學習

相關文章
相關標籤/搜索