乙個完整的機器學習專案在Python中的演練(二)

2022-06-14 22:30:16 字數 2999 閱讀 7870

資料清洗與格式處理

探索性資料分析

特徵工程和特徵選取

機器學習模型效能指標評估

微調最佳模型(超引數)

在測試集上評估最佳模型

解釋模型結果

總結分析

通過完成所有流程,我們將看到每個步驟之間是怎麼聯絡起來的,以及如何在python中專門實現每個部分。該專案可在github上可以找到,附實現過程。第二篇文章將詳細介紹第三個步驟,其餘的內容將在後面的文章中介紹。特徵工程和特徵選擇雖然是完成機器學習專案中很小的乙個環節,但它模型最終的表現至關重要。在特徵工程與特徵選擇階段做的工作都會準時在模型的表現上得以體現。首先,讓我們來了解一下這兩項任務是什麼:

因為機器學習模型只能從我們提供的資料中學習特徵,所以確保資料報含我們任務的所有相關資訊至關重要。如果我們沒有給模型提供正確的資料,那麼機器學習模型將不會達到我們所期望的表現。

在本專案中,我們將按照以下步驟完成特徵工程

獨熱(one-hot)編碼對於在模型訓練中包含分類變數是必要的。例如:機器學習演算法無法理解「辦公室」這種建築型別,因此如果建築物是辦公室,則必須對其進行將其記錄為1,否則將其記錄為0。

新增轉換的特徵可以使我們的模型學習到資料中的非線性關係。取平方根、取自然對數或各種各樣的數值轉換是資料科學中特徵轉換的常見做法,並通過領域知識或在多次實踐中發現最有效的方法。這裡我們將對所有數值特徵取自然對數並新增到原始資料中。

下面的**實現了數值特徵選擇並對這些特徵進行了取對數操作,選擇兩個分類變數並對這些特徵進行獨熱(one-hot)編碼、然後將兩列特徵連線在一起。這一系列操作可以通過pandas庫很快捷的實現。

完成上述操作之後,我們有110列(features)、總共超過11,000個物件(buildings)。但是,這些特徵並非所有都能夠對**能源之星得分(energy star score)有用,所以接下來我們將通過特徵選擇去除一些變數。

特徵選擇

在上面做特徵工程的過程之後得到的資料中的110列特徵,許多都是多餘或重複的,因為它們彼此高度相關。

例如,下圖是site eui與weather norm eui相關係數為0.997的情況。

那些相互之間有很強關聯性的特徵被稱為共線(collinear)

,而且消除這些「特徵對」中的乙個變數通常可以使機器學習模型更魯棒並且具有更強的可解釋性。(需要注意的一點是,現在是在討論特徵與其他特徵的相關性,而不是與目標的相關性。)

有許多方法可以計算特徵之間的共線性(collinearity),其中最常見的是方差膨脹因子(vif)。在本專案中,我們將使用相關係數來識別和刪除共線特徵。如果它們之間的相關係數大於0.6,我們將放棄一對特徵中的乙個。

也許你會認為這個值(0.6)是隨便定義的,其實並不是,而是通過多次嘗試不同的閾值比較後得到的。使用0.6這個值可以產生了最好的模型。機器學習是乙個經驗性領域,通常是通過試驗發現效能最好引數組合。選擇特徵後,我們剩下64列特徵和1列目標特徵(能源之星得分)。

我們現在已經完成了資料清洗,探索性資料分析和特徵工程,開始建立模型之前還需要做最後一步:建立乙個初步的基線(baseline)。這實際上是設定一項可以用來核對我們最終模型的實際表現的預估表現。我們可以通過拿最終模型表現與預估模型表現做比較反過來評測此次專案的整體思路。如果機器學習模型的最終表現沒有超越我們的預估表現,那麼我們可能不得不得出如下結論:

對於回歸問題,乙個合理的基線是通過預估測試集中所有示例的執行結果為訓練集中目標結果的中值。這種方式建立的基線為對比模型表現結果設定了乙個相對較低的門檻。

我們將使用的度量標準是平均絕對誤差(mae)–計算出**的平均絕對誤差。其實存在很多種回歸問題的度量指標,但我喜歡andrew ng的建議去選擇乙個指標然後一直在以後模型評估中使用它。平均絕對誤差(mae)是乙個不錯的選擇,它不僅容易計算並且可解釋性強。

在計算基線之前,我們需要將我們的資料分成乙個訓練集和乙個測試集:

訓練集的作用就是通過給模型提供有標籤的資料來訓練模型能力,換句話說就是訓練集既能「提供問題」又能「提供答案」。旨在讓模型學習特徵與目標之間的對映。

測試集的作用是用來評估訓練好模型。評估過程中不允許模型檢視測試集的標籤,只能使用特徵進行**。我們可以通過對比測試集的**值與標籤真實值來評估模型的表現。換句話說就是測試集只「提供問題」給模型不「提供答案」。

我們將使用70%的資料進行訓練,30%用於測試:

計算基線並得出預估表現值(mae):

通過計算得出預估模型表現為66,在測試集中的誤差約為25左右(分值:1-100)。這是乙個很容易達到的效能。

在前兩篇的分析中,我們走過了乙個完整機器學習專案的前三個步驟。在明確定義問題之後,我們:

清洗並格式化了原始資料

執行探索性資料分析以了解資料集

轉換出了一系列我們將用於模型的特徵

建立了可以判斷整個機器學習演算法的基線。

接下來將展示如何使用scikit-learn評估機器學習模型,選擇最佳模型和微調超引數來優化模型。

乙個完整機器學習專案流程總結

現在機器學習應用越來越流行,了解機器學習專案的流程,能幫助我們更好的使用機器學習工具來處理實際問題。1理解實際問題,抽象為機器學習能處理的數學問題 理解實際業務場景問題是機器學習的第一步。機器學習的特徵工程和模型訓練通常都是一件非常耗時的過程,胡亂嘗試時間成本是非常高的。深入理解要處理的問題,能避免...

乙個完整的機器學習目錄

召回率f1值 p r曲線 roc曲線 auc對數損失 多分類錯誤率 平均絕對百分誤差mapr 均分根誤差rmse 清洗爬蟲資料 過濾無效 樣本 取樣方法 下取樣整體取樣 分層取樣 根據選擇樣本的策略進行分類 根據選擇的樣本進行分類 分層k折交叉驗證 stratified k fold 資料和特徵決定...

Python機器學習 第乙個機器學習專案

資料集 1.導入庫 import pandas as pd import numpy as np import matplotlib as plt from sklearn.model selection import train test split from sklearn.model sele...