如何跑通你的第一個機器學習程式

一、前言

如今滿大街都能聽到資料探勘、機器學習、深度學習、人工智慧等熱門詞彙的你,有沒有想過可以自己嘗試編寫一個簡單的機器學習程式?其實機器學習或者資料探勘分析並沒有我們想象得那麼高深莫測,它從本質上來說就是一種工具,一種我們可以應用在自己日常工作、生活和科研中的高效數學方法。我們甚至可以把機器學習的過程理解成用程式語言讓計算器完成數學上或統計學上的公式計算而已,只是這個公式相對複雜,引數眾多而已。

完成一個入門級的機器學習程式並不難,只需要瞭解機器學習的基礎概念就可以。如果使用Python進行編寫,甚至不需要太多的程式設計基礎,scikit-learn提供了非常便捷的演算法分裝介面,你只需要照貓畫虎,安心地做一個“調包俠”就可以了。也許,等你能夠跑通你的第一個機器學習程式後,你會發現,我完全可以把這個方法應用到我現在自己工作或科研中的資料處理和分析工作哦。當然,如果真要成為一個機器學習演算法工程師或者從事相關的專業性工作,還是需要一定的統計學、線性代數和計算機方面的知識。

本文僅針對於對機器學習感興趣的入門級小白選手,對於資深機器學習工程師或專家來說,本文內容實在過於膚淺,我就不在各位演算法大佬面前班門弄斧,貽笑大方了。

本文主要介紹程式實現,不過多介紹機器學習的基本概念,為了不影響閱讀,請自行百度瞭解以下概念(包括但不限於):機器學習、分類、迴歸、聚類、訓練集、測試集、驗證集、特徵、標記……

二、環境準備

推薦使用Anaconda,可直接百度下載。

Anaconda是一個開源的Python發行版本,包括了numpy, pandas, scikit-learn等180多個科學包及其依賴項。翻譯成人話就是,裝了Anaconda,你就直接可以用了,需要的東西它都幫你搞定了。

Anaconda安裝完成,啟動後主介面如下:

如何跑通你的第一個機器學習程式

點選launch,啟動Jupyter notebook

如何跑通你的第一個機器學習程式

Jupyter notebook是一個互動式筆記本,其本質是一個web應用程式,支援Python核心。翻譯成人話解釋就是,你可以直接使用它在瀏覽器上進行Python程式碼編寫進行資料探勘和分析,簡單易用。

啟動Jupter notebook後,介面如下:

如何跑通你的第一個機器學習程式

你會發現程式使用系統預設瀏覽器打開了一個本地主機網頁,可以直接在網頁上進行操作和程式碼編寫,對於小白非常友好。

目前為止,前期準備工作已經全部完成,你會發現其實環境準備並不複雜,從頭到尾我們只是下載了個安裝包,安裝了一個軟體而已。現在,我們可以嘗試進行機器學習程式的編寫了。

三、程式編寫

3。1 資料準備

機器學習離不開一定數量的訓練資料,我們可以使用自身工作和科研當中的實際業務資料,也可以使用網路上的公開資料。目前網際網路上有很多公開資料集,包括各種結構化和非結構化資料,國外的有data。gov(美國政府公開資料),Amazon Web Services(AWS)datasets,UCI Machine Learning Repository,The MNIST Database(影象分類資料集),Spam–Non Spam(文字分類資料集)和MovieLens(推薦引擎的資料集)等。國內的有dataju。cn和國家統計局、工信部、中國人民銀行等政府網站的公開資料,以及各級政府的資料開放平臺。當然,我們也可以透過資料探勘競賽平臺獲得部分資料,如Kaggle和DataCastle等。

本文使用網路上獲取的紅酒資料進行紅酒質量等級的預測。

3。2 新建Python檔案

進入Jupyter notebook後,點選右上角的“New”按鈕,選擇“Python 3”進行點選。

如何跑通你的第一個機器學習程式

建立的新Python檔案如下圖所示:

如何跑通你的第一個機器學習程式

程式碼編寫將在下圖所示的對話方塊內進行:

如何跑通你的第一個機器學習程式

檔名稱可以修改,點選頁面最上方的Untitled進行重新命名

如何跑通你的第一個機器學習程式

點選後,出現如下對話方塊進行檔名重新命名:

如何跑通你的第一個機器學習程式

3。3 程式碼實現

3。3。1 定義問題

機器學習是一種工具,我們在使用這個工具時更重要的是確定我們需要解決的問題是什麼。以這次需要使用的紅酒質量評價資料為例,我們要解決的問題就是透過fixed acidity,volatile acidity和citric acid等11個維度的資料(特徵),來判斷紅酒的質量等級quality,quality的取值是離散的整數,所以這是一個多分類問題。

如何跑通你的第一個機器學習程式

(從CSV檔案中發現數據都儲存在第一列中,可以使用Excel自帶的分列功能把資料拆分成一個特徵一列資料,也可以在程式讀取資料時進行分列處理)

3。3。2 資料讀取、檢視和預處理

使用pandas包中的read_csv函式將資料讀入red_wine_data中,“sep=‘;’”確保以“;”為分隔符對資料進行分列。如果資料中存在多種語言(如中英文混雜),建議增加encoding引數,引數值為“utf-8”或“gbk”。

如何跑通你的第一個機器學習程式

輸入red_wine_data。head()檢視前五行資料確認資料讀取是否正確。

如何跑通你的第一個機器學習程式

輸入red_wine_data。isnull()。any()檢視每列資料是否有空值。

如何跑通你的第一個機器學習程式

透過結果我們可以發現訓練資料中並沒有空值。如果資料中存在空值,需要根據實際情況,考慮對空值進行填充或刪除。

輸入red_wine_data[‘quality’]。value_counts()檢視Quality的取值和每種取值的數量。

如何跑通你的第一個機器學習程式

透過結果,我們可以發現,quality的取值主要集中在“5”,“6”,“7”三個等級,其他幾個等級的資料較少。在實際問題解決過程中,由於現有的訓練資料中quality的取值資料並不均勻,某些類別的訓練資料較少,可能需要考慮採用過取樣等方法提高分類模型的準確性,但本文主要描述入門級機器學習程式的實現,這部分內容不再贅述。

3。3。3 訓練模型

將quality值作為結果集y,剩餘11列的值作為特徵集X。

如何跑通你的第一個機器學習程式

使用scikit-learn包裡的train_test_split函式隨機劃分訓練集和測試集,其中test_size為測試集佔比,random_state為隨機數種子。

如何跑通你的第一個機器學習程式

使用隨機森林分類器(使用預設引數對分類器進行初始化)來擬合訓練資料,使用fit命令來利用隨機劃分的訓練集進行模型訓練。

如何跑通你的第一個機器學習程式

模型訓練完成後,結果會給出分類器的各個引數。

使用predict命令預測訓練集X_test對應的結果集

如何跑通你的第一個機器學習程式

使用classification_report函式檢驗分類結果的準確率和回收率(比較X_test的實際結果集y_test和預測結果集y_predict)

如何跑通你的第一個機器學習程式

我們發現模型的效果並不是很好,平均準確率和回收率只有0。6左右,這可能跟資料本身的質量和數量,模型的選擇及引數的設定等都有關係,後續就需要根據具體情況和經驗對模型進行最佳化,但最基礎的模型訓練過程已經完成。

3。3。4 使用模型

我們現在使用訓練好的隨機森林分類器對另一批紅酒資料進行質量等級的預測,即透過已有的11維特徵資料,預測每個樣品的質量等級quality,實現模型的價值。

如何跑通你的第一個機器學習程式

使用同樣的方法讀取資料並檢視資料是否有空值。

如何跑通你的第一個機器學習程式

如何跑通你的第一個機器學習程式

使用訓練好的隨機森林分類器rf預測每個樣品的質量等級quality, 結果為wine_predict。

如何跑通你的第一個機器學習程式

wine_predict格式為array,轉成DataFrame格式並加列名quality,儲存成CSV檔案。

如何跑通你的第一個機器學習程式

開啟CSV檔案,結果如下圖所示:

如何跑通你的第一個機器學習程式

這樣就透過二十幾行程式碼實現了最基本的機器學習過程,可以用來預測紅酒的質量等級。

以上只是針對分類問題的最簡單的實現機器學習的過程,如果待預測結果是連續值,那就是迴歸問題,需要使用迴歸模型,比如農產品價格預測等。

四、結語

非計算機或演算法科班出身的人員想要在自己的領域中運用資料分析和機器學習工具,像pandas,scikit-lear和Jupyter Notebook等第三方庫及工具提供了非常友好的支援。我們只需要花費較少的學習成本就可以入門,並初步運用於我們日常工作或科研中需要進行資料分析的場合。儘管我們可能無法利用機器學習或深度學習步入語音識別,自然語言理解或自動駕駛等領域(當然不排除有些同學能夠透過刻苦學習和實踐成功轉行),但至少我們可以利用這些工具更好地利用實際資料,擁抱這個人工智慧的時代。