一個框架解決幾乎所有機器學習問題

2021-01-11 雷鋒網

雷鋒網按:本文作者楊熹,原文載於作者個人博客,雷鋒網已獲授權。

上周一個叫 Abhishek Thakur 的數據科學家,在他的 Linkedin 發表了一篇文章 Approaching (Almost) Any Machine Learning Problem,介紹他建立的一個自動的機器學習框架,幾乎可以解決任何機器學習問題,項目很快也會發布出來。這篇文章迅速火遍 Kaggle,他參加過100多個數據科學相關的競賽,積累了很多寶貴的經驗,看他很幽默地說「寫這樣的框架需要很多豐富的經驗,不是每個人都有這樣的經歷,而很多人有寶貴的經驗,但是他們不願意分享,我呢恰好是又有一些經驗,又願意分享的人」。當然這篇文章也是受到爭議的,很多人覺得並不全面。

我最近也在準備參加 Kaggle,之前看過幾個例子,自己也總結了一個分析的流程,今天看了這篇文章,裡面提到了一些高效的方法,最乾貨的是,他做了一個表格,列出了各個算法通常需要訓練的參數。

這個問題很重要,因為大部分時間都是通過調節參數,訓練模型來提高精度。作為一個初學者,第一階段,最想知道的問題,就是如何調節參數。因為分析的套路很簡單,就那麼幾步,常用的算法也就那麼幾個,以為把算法調用一下就可以了麼,那是肯定不行的。實際過程中,調用完算法後,結果一般都不怎麼好,這個時候還需要進一步分析,哪些參數可以調優,哪些數據需要進一步處理,還有什麼更合適的算法等等問題。

接下來一起來看一下他的框架。

據說數據科學家 60-70% 的時間都花在數據清洗和應用模型算法上面,這個框架主要針對算法的應用部分。


  什麼是 Kaggle? 

Kaggle是一個數據科學競賽的平臺,很多公司會發布一些接近真實業務的問題,吸引愛好數據科學的人來一起解決,可以通過這些數據積累經驗,提高機器學習的水平。

應用算法解決 Kaggle 問題,一般有以下幾個步驟:

第一步:識別問題

第二步:分離數據

第三步:構造提取特徵

第四步:組合數據

第五步:分解

第六步:選擇特徵

第七步:選擇算法進行訓練

當然,工欲善其事,必先利其器,要先把工具和包都安好。 
最方便的就是安裝 Anaconda,這裡面包含大部分數據科學所需要的包,直接引入就可以了,常用的包有: 

- pandas:常用來將數據轉化成 dataframe 形式進行操作 
- scikit-learn:裡面有要用到的機器學習算法模型 
- matplotlib:用來畫圖 
- 以及 xgboost,keras,tqdm 等。

  第一步:識別問題

在這一步先明確這個問題是分類還是回歸。通過問題和數據就可以判斷出來,數據由 X 和 label 列構成,label 可以一列也可以多列,可以是二進位也可以是實數,當它為二進位時,問題屬於分類,當它為實數時,問題屬於回歸。

  第二步:分離數據

為什麼需要將數據分成兩部分? 

用 Training Data 來訓練模型,用 Validation Data 來檢驗這個模型的表現,不然的話,通過各種調節參數,模型可以在訓練數據集上面表現的非常出色,但是這可能會是過擬合,過擬合就是太依賴現有的數據了,擬合的效果特別好,但是只適用於訓練集,以致於來一個新的數據,就不知道該預測成什麼了。所以需要有 Validation 來驗證一下,看這個模型是在那裡自娛自樂呢,還是真的表現出色。

在 scikit learn 包裡就有工具可以幫你做到這些: 

分類問題用 StrtifiedKFold

from sklearn.cross_validation import StratifiedKFold

回歸問題用 KFold

from sklearn.cross_validation import KFold

  第三步:構造特徵

這個時候,需要將數據轉化成模型需要的形式。數據有三種類型:數字,類別,文字。當數據是類別的形式時,需要將它的每一類提取出來作為單獨一列,然後用二進位表示每條記錄相應的值。例如:

record 1: 性別 女 
record 2:性別 女 
record 3:性別 男

轉化之後就是:

      女 男 
record 1: 1 0 
record 2:1 0 
record 3:0 1

這個過程 sklearn 也可以幫你做到:

from sklearn.preprocessing import LabelEncoder

或者

from sklearn.preprocessing import OneHotEncoder

  第四步:組合數據

處理完 Feature 之後,就將它們組合到一起。 
如果數據是稠密的,就可以用 numpy 的 hstack:

import numpy as np
X = np.hstack((x1, x2, ...))

如果是稀疏的,就用 sparse 的 hstack:

from scipy import sparse
X = sparse.hstack((x1, x2, ...))

組合之後,就可以應用以下算法模型: 

- RandomForestClassifier 
- RandomForestRegressor 
- ExtraTreesClassifier 
- ExtraTreesRegressor 
- XGBClassifier 
- XGBRegressor

但是不能應用線性模型,線性模型之前需要對數據進行正則化而不是上述預處理。

  第五步:分解

這一步是為了進一步優化模型,可以用以下方法:

PCA:Principal components analysis,主成分分析,是一種分析、簡化數據集的技術。用於減少數據集的維數,同時保持數據集中的對方差貢獻最大的特徵。

from sklearn.decomposition import PCA

對於文字數據,在轉化成稀疏矩陣之後,可以用 SVD

from sklearn.decomposition import TruncatedSVD

SVD:Singular Value Decomposition,奇異值分解,是線性代數中一種重要的矩陣分解,它總能找到標準化正交基後方差最大的維度,因此用它進行降維去噪。

  第六步:選擇特徵

當特徵個數越多時,分析特徵、訓練模型所需的時間就越長,容易引起「維度災難」,模型也會越複雜,推廣能力也會下降,所以需要剔除不相關或亢餘的特徵。

常用的算法有完全搜索,啟發式搜索,和隨機算法。

例如,Random Forest:

from sklearn.ensemble import RandomForestClassifier

或者 xgboost:

import xgboost as xgb

對於稀疏的數據,一個比較有名的方法是 chi-2:

from sklearn.feature_selection import SelectKBest

from sklearn.feature_selection import chi2

  第七步:選擇算法進行訓練

選擇完最相關的參數之後,接下來就可以應用算法,常用的算法有:

Classification: 
Random Forest 
GBM 
Logistic Regression 
Naive Bayes 
Support Vector Machines 
k-Nearest Neighbors


Regression 
Random Forest 
GBM 
Linear Regression 
Ridge 
Lasso 
SVR

在 scikit-learn 裡可以看到分類和回歸的可用的算法一覽,包括它們的原理和例子代碼。

在應用各算法之前先要明確這個方法到底是否合適。 

為什麼那麼多算法裡,只提出這幾個算法呢,這就需要對比不同算法的性能了。 

這篇神文 Do we Need Hundreds of Classifiers to Solve Real World Classification Problems 測試了179種分類模型在UCI所有的121個數據上的性能,發現Random Forests 和 SVM 性能最好。 

我們可以學習一下裡面的調研思路,看看是怎麼樣得到比較結果的,在我們的實踐中也有一定的指導作用。

但是直接應用算法後,一般精度都不是很理想,這個時候需要調節參數,最乾貨的問題來了,什麼模型需要調節什麼參數呢?

雖然在sklearn的文檔裡,會列出所有算法所帶有的參數,但是裡面並不會說調節哪個會有效。在一些mooc課程裡,有一些項目的代碼,裡面可以看到一些算法應用時,他們重點調節的參數,但是有的也不會說清楚為什麼不調節別的。這裡作者根據他100多次比賽的經驗,列出了這個表,我覺得可以借鑑一下,當然,如果有時間的話,去對照文檔裡的參數列表,再查一下算法的原理,通過理論也是可以判斷出來哪個參數影響比較大的。

調參之後,也並不就是大功告成,這個時候還是需要去思考,是什麼原因造成精度低的,是哪些數據的深意還沒有被挖掘到,這個時候需要用統計和可視化去再一次探索數據,之後就再走一遍上面的過程。

我覺得這裡還提到了很有用的一條經驗是,把所有的 transformer 都保存起來,方便在 validation 數據集上面應用:

文章裡介紹了分析問題的思路,還提到了幾條很實用的經驗,不過經驗終究是別人的經驗,只能借鑑,要想提高自己的水平,還是要看到作者背後的事情,就是參加了100多次實戰,接下來就去行動吧,享受用算法和代碼與數據玩耍的興奮吧。

  TensorFlow & 神經網絡算法高級應用班」 要開課啦!

從初級到高級,理論 + 實戰,一站式深度了解 TensorFlow!

本課程面向深度學習開發者,講授如何利用 TensorFlow 解決圖像識別、文本分析等具體問題。課程跨度為 10 周,將從 TensorFlow 的原理與基礎實戰技巧開始,一步步教授學員如何在 TensorFlow 上搭建 CNN、自編碼、RNN、GAN 等模型,並最終掌握一整套基於 TensorFlow 做深度學習開發的專業技能。

兩名授課老師佟達、白髮川身為 ThoughtWorks 的資深技術專家,具有豐富的大數據平臺搭建、深度學習系統開發項目經驗。

時間:每周二、四晚 20:00-21:00

開課時長:總學時 20 小時,分 10 周完成,每周 2 次,每次 1 小時

線上授課地址:http://www.mooc.ai/

雷鋒網(公眾號:雷鋒網)相關閱讀:

一個實例告訴你:Kaggle 數據競賽都有哪些套路

從 Kaggle 困局,看國內數據競賽平臺如何突圍

雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 谷歌推出TFQ,一個可訓練量子模型的機器學習框架
    ),一個可快速建立量子機器學習模型原型的開源庫。TFQ提供了必要的工具,將量子計算和機器學習技術結合起來,以控制並建模自然或人工的量子計算系統。該框架可構建量子數據集、混合量子模型和經典機器學習模型原型、支持量子電路模擬器,以及訓練判別和生成量子模型。隨著近些年量子計算技術的發展,量子機器學習模型的研發可能會在醫學、材料、傳感和通信領域取得突破,甚至產生深遠影響。不過迄今為止,業界缺乏發現量子機器學習模型的研究工具。該模型可以處理量子數據並在可用的量子計算機上執行。
  • 機器學習或將能夠解決時空問題
    打開APP 機器學習或將能夠解決時空問題 佚名 發表於 2020-03-27 15:42:52 物理學家發現這種聯繫極為有用,因為他們可以用另一種(雙重)系統的潛在「更簡單的語言」解決與一個系統有關的難題。儘管規範重力對偶性是一個推測,但它已經顯示出可以在特殊情況下使用「易」和「難」兩種方式計算相同屬性的情況[ 3 ]。 表層重力對偶性如何使我們更接近了解量子尺度的時空?答案是,對偶性使我們能夠根據量子對象的集體行為來描述黑洞的幾何形狀(其時空形狀)。
  • PyTorch橫掃各大頂會:機器學習框架,一年間局勢突變
    一個瘋狂強調「易用性」,一個整出了移動端部署。老將和新秀都卯足了勁。畢竟,機器學習框架的世界,局勢變化過於迅猛,稍不注意就會被搶了地盤。一年前,TensorFlow還是各大頂會論文選擇的主流框架,如今頂會幾乎成了PyTorch的天下。
  • 一種理論上的粒子幾乎可以回答關於宇宙的所有問題
    幾乎所有對亞原子宇宙的觀測都可以用粒子物理的標準模型來解釋——這是一個充滿可驗證的預測的強大理論框架。但由於這些未解的謎題,數學是尷尬的,不完整的,充滿了限制。再多幾個粒子就能解決幾乎所有這些難題。超對稱性(簡稱SUSY)是一個巨大的模型,它將新的粒子引入標準模型的方程中。它完成了數學運算,解決了一些零散的問題。
  • 最好的Python機器學習庫
    引言毫無疑問,神經網絡和機器學習在過去幾年一直是高科技領域最熱門的話題之一。這一點很容易看出,因為它們解決了很多真正有趣的用例,如語音識別、圖像識別、甚至是樂曲譜寫。因此,在這篇文章,我決定編制一份囊括一些很好的Python機器學習庫的清單,並將其張貼在下面。
  • 機器學習在領英的規模化應用
    ,近年來湧現出越來越多本科生或者非人工智慧專業出身的工程師,他們努力學習和使用技術來改進產品,幾乎每天都有新的機器學習技術和框架發布。本質上來說,機器學習模型就是有向無環圖(DAG),它定義了輸入特徵和在這些特徵上的轉換。Quasar DSL是領英用來定義模型的語言,它為建模者提供了幾乎所有常見的特徵轉換函數。因此AI工程師們可以專注於新特徵或者特徵組合實驗,而不需要書寫大量重複代碼來做特徵轉換。Quasar的另一個優勢是離線訓練出來的模型可以直接部署到線上,大大簡化了模型從離線到在線的過渡。
  • 金字塔原理之解決問題的邏輯,如何使用框架分析
    如果在你的工作和學習中有寫研究報告的任務時,需要先界定和分析問題,再將解決方案寫出來與人交流,你會發現本篇值得一讀。本篇介紹了如何在解決問題過程的不同階段,使用多種框架組織分析過程,使你的思路實際上進行了預先組織,從而可以更方便地應用金字塔原理。這類文章通常需要回答以下3個最常見問題之一。
  • 機器學習在搜索中的應用:個性化排序
    AI、機器學習,是現在媒體的高頻曝光詞,市面上的很多應用都逐漸接入了AI的能力;搜索這樣的『古董』級產品,其實也是應用機器學習技術的先驅。本次從搜索的一個場景——搜索結果排序,來聊聊機器學習在搜索產品中的應用。
  • 想快速部署機器學習項目?來看看幾大主流機器學習服務平臺對比吧
    Amazon SageMaker 以及基於框架的服務SageMaker 是一個機器學習環境,通過提供快速建模和部署工具來簡化數據科學家的工作。例如,它提供 Jupyter 來簡化數據瀏覽和分析。Amazon 也提供了內置的算法,針對分布式系統中的大型數據集和計算進行了優化。
  • 史上最全實戰資源,機器學習框架、高分練手項目及數據集匯總
    機器學習領域,最常討論到的一個話題就是機器學習項目。本篇目錄:1、20個機器學習庫和框架2、機器學習項目:語言相關計算機視覺圖像處理自然語言處理預測圖像處理風格轉移圖像分類人臉識別物體檢測自動駕駛遊戲AI
  • 科學家使用機器學習模型加速理論物理研究
    「我們知道原則上如何解決很多有趣的問題,但我們就是沒有足夠的計算能力,儘管我們使用的是世界上最大的超級計算機。」為了突破這些限制,Shanahan領導了一個將理論物理學與機器學習模型結合起來的小組。「這項特殊的工作表明,我們可以利用內置的粒子和核物理標準模型的對稱性來構建機器學習架構,並將我們的目標採樣問題加速幾個數量級。」這個月的論文是一系列旨在使目前難以計算的理論物理研究成為可能的論文中的一篇。「我們的目標是為理論物理學中數值計算的一個關鍵組成部分開發新的算法,」Kanwar說。
  • 劉鐵巖談機器學習:隨波逐流的太多,我們需要反思
    其基本思想是用一個機器學習算法去自動地指導另一個機器學習算法的訓練過程。但是我們必須要承認,元學習其實並沒有走出機器學習的基本框架。更有趣的問題是,如何能夠讓一個機器學習算法去幫助另一個算法突破機器學習的現有邊界,讓機器學習的效果更好呢?這都是我們需要去回答的問題。沿著這些挑戰,在過去的這幾年裡,微軟亞洲研究院做了一些非常有探索性的學術研究。
  • 部署效率提高17倍,開源Metaflow,真正以人為本的數據科學框架
    Netflix的數據科學家喜歡公司的文化,因為這種文化使他們能夠自主工作並獨立地判斷和解決問題。公司希望數據科學家常懷好奇心,並選擇性地承擔潛在高商業價值的風險。大約兩年前,新成立的機器學習基礎設施團隊向數據科學家提出了一個問題:「作為Netflix的數據科學家,你最大的難題是什麼?」團隊期待聽到與大規模數據和模型相關的答案,也許還會聽到與現代GPU相關的問題。
  • 【深度】機器學習進化史:從線性模型到神經網絡
    在離散數學課程裡,我是完全從理論角度來教算法的,這意味著我所教授的算法完全不依賴於任何程式語言或框架,我們會直接把許多理論和證明寫在白板上。但是如果想要更實際些的話,那就得來我的分布式算法課了,我們會在Spark編程環境下工作,而我幾乎會花一半時間在Spark上面。在這個平臺上,我所教授的,設計分布式算法和機器學習的理論都可以執行,而且非常具體。
  • 【BDTC先睹為快】百度沈國龍:BML百度大規模機器學習雲平臺實踐
    在推薦系統論壇,本次大會邀請到了百度基礎架構部高級架構師沈國龍擔任演講嘉賓,進行題為「 BML百度大規模機器學習雲平臺實踐」的主題演講,分享百度機器學習平臺BML的底層框架實現,包括框架演進、算法研究過程等,以及在不同的業務場景下是如何應用這些算法。沈國龍在接受CSDN的會前採訪中表示,大數據其實是一個綜合學科,開發者需要具備多方面的知識儲備才能勝任。
  • Python粉都應該知道的開源機器學習框架:Scikit-learn入門指南
    而在這些分支版本中,最有名,也是專門面向機器學習的一個就是Scikit-learn。Scikit-learn項目最早由數據科學家 David Cournapeau 在 2007 年發起,需要NumPy和SciPy等其他包的支持,是Python語言中專門針對機器學習應用而發展起來的一款開源框架。
  • 機器學習在生命科學中的應用
    機器學習可以應用於drug-develop的所有階段,包括靶標驗證,預後生物標記物的鑑定和試驗中數字pathology數據的分析。目前許多公司已經將投資目標轉向機器學習領域,通過支持機器學習方法的開發,促進drug-develop研發。
  • 使用Kafka本機模型伺服器進行流式機器學習
    Kafka和機器學習架構模型部署通常與模型訓練完全分開(從過程和技術角度而言)。通常在彈性雲基礎架構或數據湖(例如Hadoop或Spark)中執行模型訓練。模型評分(即進行預測)通常是具有不同正常運行時間SLA和延遲要求的關鍵任務工作負載。
  • 量子化學機器學習模擬:提供了誘人的化學前景
    該波函數是薛丁格方程的數學解決方案,該方程描述了在分子周圍可以找到電子的位置的概率。它提供了完全「解決化學問題」的誘人希望,可以完全準確地模擬反應。通常,該目標將需要不切實際的大量計算能力。現在,新的研究以更為合理的處理能力提供了相對較高精度的方案。
  • 機器學習和深度學習最佳作品
    來源:CPDA數據分析師網 機器學習算法的超參數優化:理論與實踐 機器學習算法已廣泛應用於各種應用程式和領域,為了使機器學習模型適應不同的問題,必須調整其超參數,為機器學習模型選擇最佳的超參數配置會直接影響模型的性能,它通常需要對機器學習算法和適當的超參數優化技術有深入的了解