從建立清晰的步驟開始——Machine Learning Project Checklist

這是我建立的第一個專欄,也是在知乎寫的第一篇文章,作為一個機器學習的初學者,我這次想換一種學習方式來學習這一知識,也算是對自己的學習方法進行一些新的嘗試吧,不同於以往只是看書,查資料和實踐,我希望多出一個步驟,就是把學到的東西寫成文章並分享出來,這可能不是一件容易的事,自己學會可能不是難事,但是能總結出精華,其內容對他人有所幫助就需要對知識理解得更加深刻了,我希望自己能往這方面努努力。所以我嘗試開了這個專欄來去記錄自己學習機器學習的一些「心路歷程」。

--------------------------------------------------------------------------------------------------------------------------

今天要分享的東西是利用機器學習做數據分析時,我們可能需要做的一些步驟。不管是做什麼任務,在開始之前有了清晰的框架和邏輯,往往做事效率會更高。一個機器學習的項目也是如此。

在學習機器學習之前我簡單的學習了Python,以前我做的更多的是嵌入式的編程,都是用C在寫。工欲善其事必先利其器,要學習機器學習,學習Python是有必要的。下面所提到的內容都是來自我最近在看的一本書《Hands On Machine Learning with Scikit-Learn and TensorFlow》,書的封面如下,有興趣的朋友可以看一看,我覺得寫的挺好的,比較適合初學者,雖然是英文,但讀起來一點不費力。

從總體上來說,一個Machine Learning Project Checklist可以分為下面8個大步驟(文末我給出了整個步驟的具體思維導圖):

1. Frame the problem and look at the big picture

2. Get the data.

3. Explore the data to gain insights

4. Prepare the data to better expose the underlying data patterns to Machine Learning algorithms

5. Explore many different models and short-list the best ones

6. Fine-tune your models and combine them into a great solution

7. Present your solution

8. Launch, monitor, and maintain your system

1. Frame the problem and look at the big picture

「定位」是一個很重要的事,只有明白了你需要解決的問題到底是怎麼回事,你才能處理起來有條不紊。在這個步驟中,你需要弄清楚,你現在解決的問題處在什麼位置,是整個工程的一部分,或者就是一個單獨的小工程,初學者可能在用機器學習去解決一個問題的時候,只是針對一件事情(目標很明確),不用考慮這個項目(代碼和結果)是否被當做零件用在一個更大的項目中,如果是這樣,你就需要上下溝通好再去著手你的項目。

接著,明確你的問題,是屬於監督學習還是非監督學習等等,最後結果的怎麼去測量,即測量指標是什麼。然後我們需要去查一些資料:著手的問題是否有可以參考的相似項目,如果是人工去解決這個問題會怎麼做等,這些都會對你產生一些啟發,對問題的高效解決大有裨益。

2. Get the data

俗話說,巧婦難為無米之炊,沒有數據怎麼去做數據分析,所以下一步自然是去獲取數據,獲取數據的方式就有很多了,比如現在火的不行的爬蟲不就是為了獲取數據嘛,當然網上也有很多現成的數據集供你使用,比如Kaggle上很多項目都有提供數據集,我們完全可以拿來做練習。當然,一些數據的獲取需要得到許可,這個就不在這裡多說。拿到數據以後,把數據轉換成我們方便操作的格式,比如.csv,.txt等。在使用時記得把涉及到隱私的東西刪除或者設置保護。

3. Explore the data to gain insights

第一件事就是把原始數據備份,copy一份數據出來做整理分析,這很重要。這裡就要使用到許多工具和庫,我一般會用Jupyter Notebook,利用Python的數據科學分析常用的庫Numpy, Pandas, Matplotlib等。在簡單熟悉了這些庫以後,就可以上手做了,這裡推薦一本書《Python for Data Analysis》,有中文版的,封面如下:

探索數據這一步在整個流程中相當重要,在熟悉了數據各個屬性的基礎上,我們才能更充分的利用他們。首先看看這一份數據有哪些屬性,以及每個屬性的特徵,比如它是類型的(數值型還是類別類型)、有沒有缺失的、對分析有沒有幫助(怎麼用)等。另外,還可以算一算不同屬性之間的相關性(相關係數),以此來分析是否有可能通過兩種或者更多數據的綜合分析得到一組更有用的屬性。接著就是將數據可視化,即通過作圖來分析數據,這樣可以更加直觀的去觀察數據。最後寫一個文檔將每個數據的分析結果整理好,方便後續使用。

4. Prepare the data to better expose the underlying data patterns to Machine Learning algorithms

現在我們在用機器學習這個工具去分析問題時,往往是調用庫函數去運算,所以我們在理解將要使用的演算法的基礎上,需要將數據進一步整理成可以給演算法跑的標準數據。首先需要進行數據清洗,把一些缺失的地方刪掉或者填充(比如0,平均數,中位數等等),把偏離很遠的點進行刪除或者修正。接著進行特徵選擇,將一些很明顯對分析沒有幫助的數據刪掉。然後就是極為重要的特徵工程,為了數據更好的被利用,或者讓演算法執行效率更高,我們常常需要對數據做很多分析和變換,在這裡我不能展開了說,一方面自己也只是一個初學者,很多不懂,還需要繼續學習,另一方面本文的目的是在介紹一個流程,細節地方就留個讀者自己探索了,以後沒準也寫個文章專門談談這個問題。

5. Explore many different models and short-list the best ones

這一步就是用不同的演算法(模型)去跑,然後對比其性能優劣,Scikit-Learn這個很成熟的庫,可以很方便的為我們完成這個一個步驟。

6. Fine-tune your models and combine them into a great solution

調節參數是一個技術活兒,在積累了大量經驗以後就能夠更加熟練去調節,使得模型更加優秀,我目前還沒有達到這個水平,基本演算法和模型還在一點一點去學,以後在實踐中積累了更多經驗再分享出來。

7. Present your solution

編寫文檔將整個工程進行總結和梳理,並用圖表的方式將結果加以展示,這個可以看看Kaggle上有很多優秀的開源分享,他們對項目的總結和結果的呈現都比較有參考價值,可以學習學慣用在自己的項目當中。

8. Launch, monitor, and maintain your system

---------------------------------------------------------------------------------------------------------------------------

下面貼上整個流程的思維導圖:

PDF下載地址:鏈接:pan.baidu.com/s/1bo20Jv 密碼:dd2p


推薦閱讀:

五道有意思的題目,看看你對Python了解多少!
【Python爬蟲實戰】為啥學Python,BOSS告訴你
Python數據分析之貼吧的問與答
用 Python 實現一個大數據搜索引擎
為什麼 Python 不用 C++ 實現?

TAG:機器學習 | Python | 數據分析 |