使用 Python 進行機器學(xué)習(xí):數(shù)據(jù)預(yù)處理技術(shù)
機器學(xué)習(xí)仍然是發(fā)展最快、需求量最大的技術(shù)領(lǐng)域之一。機器學(xué)習(xí)是人工智能的一個分支,它使計算機系統(tǒng)能夠?qū)W習(xí)和采用類似人類的特質(zhì),最終導(dǎo)致人工智能機器的發(fā)展。 下表列出了人工智能領(lǐng)域中,機器學(xué)習(xí)可以賦予計算機的八種關(guān)鍵類人特質(zhì)。
人力素質(zhì) |
人工智能學(xué)科(使用機器學(xué)習(xí)方法) |
視覺 |
計算機視覺 |
演講 |
自然語言處理 (NLP) |
運動 |
機器人 |
理解 |
知識表示與推理 |
觸碰 |
觸覺 |
情商 |
情感計算(又稱情感人工智能) |
創(chuàng)造力 |
生成對抗網(wǎng)絡(luò) (GAN) |
決策 |
強化學(xué)習(xí) |
然而,創(chuàng)建人工智能的過程需要大量數(shù)據(jù)。在機器學(xué)習(xí)中,我們擁有的數(shù)據(jù)越多,用于訓(xùn)練模型的數(shù)據(jù)越多,模型(AI 代理)在處理給定提示或輸入以及最終完成訓(xùn)練任務(wù)方面的表現(xiàn)就越好。
這些數(shù)據(jù)并非以原始形式輸入到機器學(xué)習(xí)算法中。在輸入到學(xué)習(xí)算法之前,它(數(shù)據(jù))必須先經(jīng)過各種檢查和數(shù)據(jù)清理和準備階段。我們將機器學(xué)習(xí)生命周期的這一階段稱為數(shù)據(jù)預(yù)處理階段。顧名思義,此階段包括將應(yīng)用于數(shù)據(jù)集(值的行/列)的所有操作和程序,以使其處于清潔狀態(tài),以便機器學(xué)習(xí)算法可以接受它并開始訓(xùn)練/學(xué)習(xí)過程。
本文將討論和研究機器學(xué)習(xí)中最流行的數(shù)據(jù)預(yù)處理技術(shù)。我們將探索各種方法來清理、轉(zhuǎn)換和擴展我們的數(shù)據(jù)。所有探索和實際示例都將使用 Python 代碼片段完成,以指導(dǎo)您親身體驗如何有效地將這些技術(shù)應(yīng)用于您的機器學(xué)習(xí)項目。
為什么要預(yù)處理數(shù)據(jù)?
預(yù)處理數(shù)據(jù)的字面整體原因是為了讓機器學(xué)習(xí)算法接受數(shù)據(jù),從而開始訓(xùn)練過程。但是,如果我們看看機器學(xué)習(xí)框架本身的內(nèi)在工作原理,就可以提供更多理由。下表討論了為后續(xù)機器學(xué)習(xí)任務(wù)預(yù)處理數(shù)據(jù)的 5 個關(guān)鍵原因(優(yōu)勢)。
原因 |
解釋 |
提高數(shù)據(jù)質(zhì)量 |
數(shù)據(jù)預(yù)處理可確保您的數(shù)據(jù)一致、準確且可靠。 |
提高模型性能 |
數(shù)據(jù)預(yù)處理允許您的 AI 模型在更深層次、更準確的層面上捕捉趨勢和模式。 |
提高準確性 |
數(shù)據(jù)預(yù)處理可以使模型評估指標更好,并反映 ML 模型更準確的概述。 |
減少訓(xùn)練時間 |
通過輸入已清理的算法數(shù)據(jù),您可以讓算法以最佳水平運行,從而減少計算時間并消除對計算資源不必要的壓力。 |
特征工程 |
通過預(yù)處理數(shù)據(jù),機器學(xué)習(xí)從業(yè)者可以衡量某些特征對模型的影響。這意味著機器學(xué)習(xí)從業(yè)者可以選擇與模型構(gòu)建最相關(guān)的特征。 |
我們將利用以下框架來處理數(shù)據(jù)預(yù)處理的實際示例:
NumPy
熊貓
科學(xué)學(xué)習(xí)
處理缺失值
處理缺失值最流行的技術(shù)是刪除和歸納。值得注意的是,無論您嘗試執(zhí)行什么操作,如果計算或過程中至少有一個空值(NaN),則整個操作將失敗并計算為 NaN(空/缺失/錯誤)值。
移動
刪除包含缺失值的行或列。這通常在缺失數(shù)據(jù)占整個數(shù)據(jù)集的比例相對較小時執(zhí)行。
例子
輸出
歸責
即我們用替代值替換數(shù)據(jù)中的缺失值。替代 值通常是該列數(shù)據(jù)的平均值、中位數(shù)或眾數(shù)。這個過程的術(shù)語是歸納。
例子
輸出
處理噪聲數(shù)據(jù)
當我們的數(shù)據(jù)中有異常值或不相關(guān)的數(shù)據(jù)點時,我們就說我們的數(shù)據(jù)是有噪聲的 。這種噪聲 會扭曲我們的模型,從而扭曲我們的分析。處理噪聲數(shù)據(jù)的常見預(yù)處理技術(shù)包括平滑和分箱。
平滑
這種數(shù)據(jù)預(yù)處理技術(shù)涉及采用移動平均等操作來減少噪音和識別趨勢。這樣就可以封裝數(shù)據(jù)的本質(zhì)。
例子
輸出
分箱
這是統(tǒng)計學(xué)中常見的過程,遵循機器學(xué)習(xí)數(shù)據(jù)預(yù)處理中的相同底層邏輯。它涉及將數(shù)據(jù)分組,以減少微小觀察誤差的影響。
例子
輸出
數(shù)據(jù)轉(zhuǎn)換
這種數(shù)據(jù)預(yù)處理技術(shù)在幫助塑造和指導(dǎo)需要數(shù)字特征作為輸入的算法以實現(xiàn)最佳訓(xùn)練方面起著至關(guān)重要的作用。這是因為數(shù)據(jù)轉(zhuǎn)換涉及將我們的原始數(shù)據(jù)轉(zhuǎn)換為適合我們的機器學(xué)習(xí)算法使用的格式或范圍。這是基于距離的機器學(xué)習(xí)算法的關(guān)鍵步驟。
關(guān)鍵的數(shù)據(jù)轉(zhuǎn)換技術(shù)是規(guī)范化和標準化。正如這些操作的名稱所暗示的那樣,它們用于將我們的特征內(nèi)的數(shù)據(jù)重新縮放到標準范圍或分布。
正?;?
這種數(shù)據(jù)預(yù)處理技術(shù)會將我們的數(shù)據(jù)縮放到 [0, 1](包含兩個數(shù)字)或 [-1, 1](包含兩個數(shù)字)的范圍。當我們的特征具有不同的范圍并且我們希望將它們帶到一個共同的范圍內(nèi)時,它很有用。
例子
輸出
標準化
標準化將把我們的數(shù)據(jù)縮放到平均值為 0、標準差為 1。當我們的特征中包含的數(shù)據(jù)具有不同的測量單位或分布時,它很有用。
例子
輸出
編碼分類數(shù)據(jù)
我們的機器學(xué)習(xí)算法通常要求特征矩陣(輸入數(shù)據(jù))采用數(shù)字形式,即數(shù)值/定量。但是,我們的數(shù)據(jù)集可能包含文本(分類)數(shù)據(jù)。因此,在將數(shù)據(jù)輸入機器學(xué)習(xí)算法之前,必須將所有分類(文本)數(shù)據(jù)轉(zhuǎn)換為數(shù)字格式。處理分類數(shù)據(jù)最常用的技術(shù)包括獨熱編碼( OHE )和標簽編碼。
獨熱編碼
這種數(shù)據(jù)預(yù)處理技術(shù)用于將分類值轉(zhuǎn)換為二進制向量。這意味著每個唯一類別都將成為數(shù)據(jù)框中的列,而包含該值的觀察值(行)的存在與否由新列中的二進制 1 或 0 表示。
例子
輸出
標簽編碼
這是將分類值轉(zhuǎn)換為整數(shù)標簽的時候。本質(zhì)上,每個唯一類別都被分配一個唯一的整數(shù)來表示。
例子
輸出
這告訴我們標簽編碼如下:
· ‘藍色’ -> 0
· ‘綠色’ -> 1
· ‘紅色’ -> 2
PS,數(shù)值分配是從零索引的(與 Python 中的所有集合類型一樣)
特征提取與選擇
正如這種數(shù)據(jù)預(yù)處理技術(shù)的名稱所暗示的,特征提取/選擇涉及機器學(xué)習(xí)從業(yè)者從數(shù)據(jù)中選擇最重要的特征,而特征提取則將數(shù)據(jù)轉(zhuǎn)換為一組簡化的特征。
特征選擇
這種數(shù)據(jù)預(yù)處理技術(shù)有助于我們從數(shù)據(jù)集中識別和選擇對模型影響最大的特征。最終,選擇最佳特征將提高我們模型的性能并減少過度擬合。
相關(guān)矩陣
這個矩陣可以幫助我們識別高度相關(guān)的特征,從而使我們能夠刪除冗余特征。“相關(guān)系數(shù)的范圍從 -1 到 1,其中越接近 -1 或 1 的值表示相關(guān)性越強,而越接近 0 的值表示相關(guān)性越弱或沒有相關(guān)性”。
例子
輸出 1
輸出 2
卡方統(tǒng)計量
卡方統(tǒng)計量是一種衡量兩個分類變量獨立性的檢驗方法。當我們對分類數(shù)據(jù)進行特征選擇時,它非常有用。它計算特征的 p 值,告訴我們特征對于當前任務(wù)有多大用處。
例子
輸出
卡方分數(shù)的輸出由兩個數(shù)組組成:
· 第一個數(shù)組包含每個特征的卡方統(tǒng)計值。
· 第二個數(shù)組包含與每個特征對應(yīng)的 p 值。
在我們的示例中:
· 對于第一個特征:
1. 卡方統(tǒng)計值為 0.0
2. p 值為 1.0
· 對于第二個特征:
1. 卡方統(tǒng)計值為 3.0
2. p 值約為 0.083
卡方統(tǒng)計量衡量特征與目標變量之間的關(guān)聯(lián)??ǚ街翟礁?,表示特征與目標之間的關(guān)聯(lián)越強。這告訴我們,所分析的特征對于引導(dǎo)模型達到所需的目標輸出非常有用。
p 值測量在特征和目標獨立的零假設(shè)下觀察到卡方統(tǒng)計量的概率。本質(zhì)上,較低的 p 值(通常 < 0.05)表示特征和目標之間的關(guān)聯(lián)具有統(tǒng)計意義。
對于我們的第一個特征,卡方值為 0.0,p 值為 1.0,從而表示與目標變量沒有關(guān)聯(lián)。
對于第二個特征,卡方值為 3.0,相應(yīng)的 p 值約為 0.083。這表明我們的第二個特征和目標變量之間可能存在某種關(guān)聯(lián)。請記住,我們處理的是虛擬數(shù)據(jù),而在現(xiàn)實世界中,數(shù)據(jù)會給你帶來更多的變化和分析點。
特征提取
這是一種數(shù)據(jù)預(yù)處理技術(shù),允許我們通過將數(shù)據(jù)轉(zhuǎn)換為一組新特征來降低數(shù)據(jù)的維度。從邏輯上講,通過采用特征選擇和提取技術(shù)可以大大提高模型性能。
主成分分析(PCA)
PCA 是一種數(shù)據(jù)預(yù)處理降維技術(shù),它將我們的數(shù)據(jù)轉(zhuǎn)換為一組直角(正交)分量,從而捕獲特征中存在的最大差異。
例子
輸出
由此,我們成功探索了 Python 機器學(xué)習(xí)任務(wù)中最常用的各種數(shù)據(jù)預(yù)處理技術(shù)。
結(jié)論
在本文中,我們探討了使用 Python 進行機器學(xué)習(xí)的流行數(shù)據(jù)預(yù)處理技術(shù)。我們首先了解了數(shù)據(jù)預(yù)處理的重要性,然后研究了與原始數(shù)據(jù)相關(guān)的常見挑戰(zhàn)。然后,我們通過 Python 中的實際示例深入研究了各種預(yù)處理技術(shù)。
最終,數(shù)據(jù)預(yù)處理是機器學(xué)習(xí)項目生命周期中不可跳過的一步。即使不需要對數(shù)據(jù)進行任何更改或轉(zhuǎn)換,也值得在適用的情況下將這些技術(shù)應(yīng)用于數(shù)據(jù)。因為這樣做可以確保數(shù)據(jù)得到清理和轉(zhuǎn)換,以適應(yīng)機器學(xué)習(xí)算法,從而提高后續(xù)機器學(xué)習(xí)模型開發(fā)因素(例如模型準確性、計算復(fù)雜性和可解釋性)的效率。
總之,數(shù)據(jù)預(yù)處理為成功的機器學(xué)習(xí)項目奠定了基礎(chǔ)。通過關(guān)注數(shù)據(jù)質(zhì)量并采用適當?shù)念A(yù)處理技術(shù),我們可以充分發(fā)揮數(shù)據(jù)的潛力,并構(gòu)建能夠提供有意義的見解和可操作結(jié)果的模型。