清除遺漏的資料
重要
Machine Learning 工作室 (傳統) 的支援將於 2024 年 8 月 31 日結束。 建議您在該日期之前轉換成 Azure Machine Learning。
自 2021 年 12 月 1 日起,您將無法建立新的 Machine Learning 工作室 (傳統) 資源。 在 2024 年 8 月 31 日之前,您可以繼續使用現有的 Machine Learning 工作室 (傳統) 資源。
ML 工作室 (傳統) 文件即將淘汰,未來將不再更新。
指定如何處理資料集遺漏的值
類別: 資料轉換/操作
模組概觀
本文說明如何使用機器學習 Studio (傳統) 中的 [清除遺漏的資料] 模組,來移除、取代或推斷遺漏值。
資料科學家通常會檢查資料的遺漏值,然後執行各種作業來修正資料或插入新值。 這類清除作業的目標是要防止在定型模型時,資料遺失將會造成的問題。
此模組支援多個類型的「清除」遺漏值的作業,包括:
- 以預留位置、平均數或其他值取代遺漏值
- 完全移除有遺漏值的資料列和資料行
- 根據統計方法推斷值
提示
機器學習服務的新手嗎? 本文將詳細說明如何使用各種不同的方法來取代遺漏值: 處理遺漏值的方法
使用此模組並不會變更您的源資料集。 相對地,此元件會在您的工作區中建立新的資料集,可用於後續的工作流程。 您也可以儲存已清除的新資料集以供重複使用。
此模組也會輸出用來清除遺漏值的轉換定義。 您可以使用「套用 轉換 」模組,在具有相同架構的其他資料集上重複使用這個轉換。
如何使用清除遺漏的資料
此課程模組可讓您定義清除作業。 您也可以儲存清除作業,以便之後套用至新的資料。 如需如何建立和儲存清理程式的說明,請參閱下列連結:
重要
處理遺漏值所使用的清除方法可能會大幅影響您的結果。 建議您實驗不同的方法。 請同時考慮使用特定方法的理由以及結果的品質。
取代遺漏值
每次您將 [ 清除遺漏的資料 ] 模組套用至一組資料時,就會對您選取的所有資料行套用相同的清除作業。 因此,如果您需要使用不同的方法來清除不同的資料行,請使用不同的模組實例。
將 [ 清除遺漏的資料 ] 模組新增至您的實驗,並連接具有遺漏值的資料集。
針對要清除的資料行,選取包含要變更遺漏值的資料行。 您可以選擇多個資料行,但所有選取的資料行都必須使用相同的取代方法。 因此,字串資料行和數值資料行通常需要分開清除。
例如,若要檢查所有數值資料行中的遺漏值:
開啟 [資料行選取器],然後選取 [ 使用規則]。
在 [開始于] 中,選取 [沒有資料行]。
您也可以從所有資料行開始,然後排除資料行。 一開始,如果您第一次按一下 [ 所有資料行],就不會顯示規則,但是您可以按一下 [ 無資料行 ],然後再按一下 [所有資料 行 ] 以開始使用所有資料行,然後根據名稱、資料類型或資料行索引,篩選出 (排除) 資料行。
針對 [ 包含],從下拉式清單中選取 [資料 行類型 ],然後選取 [ 數值] 或更特定的數數值型別。
您選擇的任何清除或取代方法必須適用於選取的所有資料行。 如果任何資料行中的資料與指定的作業不相容,模組會傳回錯誤並停止實驗。
針對最小遺漏值比率,指定要執行作業所需的遺漏值最小數目。
您可以使用此選項搭配最大遺漏值比率,定義在資料集上執行清除作業的條件。 如果遺漏值的資料列太多或太少,便無法執行此作業。
您輸入的數目為遺漏值在資料行所有值中所佔的比率。 依預設,最小遺漏值比率屬性會設為 0。 這表示即使只有一個遺漏值,系統也會清除遺漏值。 如需如何使用這個選項的範例,請參閱 設定清除作業的臨界值。
警告
每個資料行都必須符合此條件,才能套用指定的作業。 例如,假設您選取三個資料行,然後將遺漏值的最小比率設為 .2 (20%),但實際上只有一個資料行有 20% 的遺漏值。 在此情況下,清除作業只會套用至遺漏值超過 20% 的資料行。 因此,其他資料行將不會變更。
如果您對遺漏值是否已變更有所疑慮,請選取 [產生遺漏值指標資料行] 選項。 資料集會附加資料行,以指出每個資料行是否符合最小和最大範圍的指定條件。
針對最大遺漏值比率,指定要執行作業所需的遺漏值最大數目。
例如,您可能只希望資料列所包含的遺漏值在 30% 以下時,才執行遺漏值替代,但如果資料列的遺漏值超過 30%,則將這些值保留原狀。
您可以定義數目為遺漏值,以資料行中的所有值的比例。 依預設,最大遺漏值比率會設為 1。 這表示即使資料行遺漏的值為 100%,系統也會清除遺漏值。
注意
當您使用 [ 最小遺漏值 ] 或 [ 最大遺漏值比率] 選項設定臨界值時,如果其中一個選取的資料行不符合準則,則無法執行清理作業。
針對清除模式,請選取下列其中一個選項以替代或移除遺漏值:
以滑鼠取代:針對每個遺漏值,此選項會指派新的值,其計算方式是使用統計文獻中所述的方法,做為「使用連鎖方程式多變數插補」或「由連鎖方程式進行多重插補」。 使用 多個插補方法時,會使用資料中的其他變數來有條件地將遺漏資料的每個變數模型化,然後再填滿遺漏值。 相反地,在 單一的插補方法 中 (例如,將遺漏值取代為數據行表示) 單一行程會透過資料進行,以判斷填滿值。
所有插補方法都會引進一些錯誤或偏差,但多個插補更能模擬產生資料的進程,以及資料的機率分佈。
如需處理遺漏值之方法的一般簡介,請參閱 遺失資料:藝術的狀態。Schafer 和 Graham,2002。
警告
此選項無法套用至完全空白的資料行。 這類資料行必須移除,或傳遞至輸出。
自訂的替代值:使用此選項來指定預留位置值 (例如 0 或 NA),以套用至所有遺漏值。 您指定的取代值必須與資料行的資料類型相容。
以平均值取代:計算資料行的平均值,並使用平均值做為資料行中每個遺漏值的取代值。
只適用於具有整數、 Double、 資料行或 Boolean 資料型別。 如需詳細資訊,請參閱 技術 提示一節。
以中位數取代:計算資料行的中位數,並使用中位數做為資料行中任何遺漏值的取代值。
只適用於具有整數、 Double、 資料行或 Boolean 資料型別。 如需詳細資訊,請參閱 技術 提示一節。
以眾數取代:計算資料行的眾數,並將眾數做為資料行中每個遺漏值的取代值。
適用於 Integer、 Double、 布林值或 Categorical 資料類型的資料行。 如需詳細資訊,請參閱 技術 提示一節。
移除整個資料列:完全移除資料集裡有一個或多個遺漏值的任何資料列。 如果遺漏值可視為隨機遺漏,此方法非常有用。
移除整個資料列:完全移除資料集裡有一個或多個遺漏值的任何資料行。
使用概率 PCA 取代:使用線性模型來取代遺漏值,此模型會分析資料行之間的關聯性,並估計資料的低維近似值,以從中重建完整資料。 基礎維度減少為機率的表單的主要元件分析 (PCA),以及它會實作模型提議皇家統計協會系列 B 21(3),611 – 622 Tipping 和銘日誌中的 variant。
相較於其他選項,例如「使用鏈結方程式的多重插補 (MICE)」,這個選項的優點是不需要對每個資料行應用預測值: 相反地,只會約略估計完整資料集的共變數。 因此,針對在許多資料行中有遺漏值的資料集,它可能會提供更好的效能。
這個方法的主要限制是它可展開成數值指標了類別資料行和計算密集的共變數矩陣產生的資料。 它也不適合疏鬆的表示法。 基於這些理由,不支援具有大量資料行和/或大量類別定義域 (數以萬計) 的資料集,因為佔用空間太大。
若您已選取自訂的取代值選項,則可以使用取代值選項。 請輸入新的值,做為資料行中所有遺漏值的取代值。
請注意,您只能在具有整數、雙精確度、布林值或日期資料類型的資料行中使用此選項。 對於日期資料行,也可以輸入自 1/1/0001 12:00 AM 起的 100 奈秒數做為取代值。
產生遺漏值指標資料行:如果您想要輸出資料行中的值是否符合遺漏值清除條件的一些指標,請選取此選項。 當您要設定新的清除作業,並想要確保其按照計劃順利運作時,此選項特別有用。
執行實驗,或選取 [ 清除遺漏的資料 ] 模組,然後按一下 [ 執行選取]。
結果
模組會傳回兩個輸出:
已清除的資料集:包含所選資料行的資料集,這些資料行包含已根據指定方式處理的遺漏值,以及指標資料行 (如果選取了該選項)。
未選取要清除的資料行也會「傳遞」。
清除轉換:用於清除的資料轉換,可儲存在您的工作區中,之後再套用至新資料。
將已儲存的清理作業套用至新的資料
如果您需要經常重複清除作業,建議您將資料清理的配方儲存為轉換,以重複使用相同的資料集。 如果您必須經常重新匯入,然後清除具有相同架構的資料,則儲存清除轉換非常實用。
將 [套用 轉換 ] 模組新增至您的實驗。
新增您想要清除的資料集,並將資料集連接至右側的輸入連接埠。
在 [Studio (傳統) ] 的左窗格中,展開 [ 轉換 ] 群組。 找出已儲存的轉換,然後將它拖曳到實驗中。
將已儲存的轉換連接至套用轉換的左側輸入連接埠。
在套用儲存的轉換時,您無法選取要套用轉換的資料行。 這是因為轉換已經過定義,並且會自動套用至原始作業中指定的資料類型。
不過,假如您在數值資料行的子集上建立了轉換。 您可以將此轉換套用至混合資料行類型的資料集,而不會引發錯誤,因為系統只會變更相符數值資料行中的遺漏值。
執行實驗。
範例
請參閱 Azure AI 資源庫中如何使用此模組的範例:
學生效能的預測:在此範例中,會為遺漏值插入零。
二元分類器的交叉驗證範例:零用來填入遺漏值,並建立指標資料行來追蹤變更。 不允許完全為遺漏值的資料行。
資料集處理和分析:在此範例中,實驗的不同分支使用不同的方法來取代遺漏值,然後使用 摘要資料 和 計算線性相互關聯來評估資料集。
飛行延遲預測範例:完全移除空白資料列。
技術說明
本節包含執行詳細資料,以及已知問題和常見問題。
選取任何字串資料行時,如果使用平均數或中位數選項,則會發生錯誤。 如果您需要處理不同資料類型的資料行,請建立兩個 [清除遺漏資料] 執行個體。
以布林值、整數、日期時間或 TimeSpan 資料類型的資料行中的 mean 值取代遺漏值時,會先將資料行轉換成浮點數、計算平均值,然後將結果四捨五入至原始資料類型的最接近值。
當您輸入取代值時,該值必須與所選資料行中的資料類型相容。
NaN
針對資料類型為 Double 的資料行,允許、Inf
和–Inf
的值。使用 MICE 方法時,會使用定型的 MICE 模型來預測取代值。
使用「 清除遺漏的資料 」可以將其他資料行類型重設為「 功能」。 如果您的資料包含其他類型的資料行(例如標籤),請使用 [ 編輯中繼資料 ] 來更正資料行類型。
使用清除轉換的限制
當您使用儲存的轉換 (根據新資料) 的 清除遺漏資料 時,適用下列限制:
即使在原始清除作業中使用此選項,儲存的轉換也無法產生指標值。 測試新轉換時,請將指標值視為最有用。
轉換不會根據新的資料集來計算新值。 換句話說,如果您在資料集 A 上使用 清除遺漏資料 ,並產生 mean 值0.5,則不論資料集 b 中的實際值為何,相同的值也會套用為取代資料集 b 中遺漏值的平均值。
新資料集中資料行的資料類型必須符合最初建立轉換之資料行的資料類型。 如果在隱含變更資料類型的資料行上執行任何作業,就會引發錯誤。
例如,假設您為整數資料行 [Col1] 建立平均值,然後儲存轉換。 現在您想要將清除轉換套用至已使用公式調整的 [Col1] 複本,例如 ( [Col1]/1.5) 。 為了確保結果為整數,您可以進位結果,但當您套用轉換時,仍會收到錯誤。 但是,如果您使用公式(例如 ( [Col 1] * 10) 來調整值),則不會引發任何錯誤!
若要避免這類問題,請使用 [ 編輯中繼資料 ] 將資料類型明確重設為整數。 一般而言,[套用 數學運算 ] 模組中的作業會將數值資料行隱含地變更為
double
。
設定和解讀臨界值
當您使用 [ 最小遺漏值 ] 或 [ 最大遺漏值] 值的選項來指定清除作業的臨界值時,結果可能是非預期或令人困惑。 為了說明最大和最小遺漏值的選項如何運作,我們提供了 汽車價格 範例資料集的一些範例,其中有許多資料行有遺漏值。
下表顯示該資料集中數個數據行的遺漏值計數,以及在資料集上計算之遺漏值的比率。 在最右邊的資料行中,遺漏值的比率 () 是針對指定的臨界值評估資料集時所用的值。
假設您將 最小遺漏值比例 設定為0.019,並將 遺漏值的最大值比例 設定為0.020。 假設有下列的值資料表,某些資料行符合臨界值準則,而某些則沒有:
- 資料行
bore
並stroke
符合臨界值準則。 - 資料行
normalized-losses
和compression-ratio
不符合臨界值準則。
資料行名稱 | 遺漏值的計數 | 遺漏值的比率 |
---|---|---|
正常化損失 | 41 | 0.2 |
內徑 | 4 | 0.019512195 |
筆勢 | 4 | 0.019512195 |
壓縮比例 | 0 | 0 |
因為選取範圍中的 某些 資料行不符合指定的準則,所以不會對任何資料行執行任何清除作業。 為了協助您找出發生什麼事,模組會傳回兩個指標資料行中的 FALSE 值, bore_IsMissing
以及 stroke_IsMissing
。
但是,如果您將閾值變更回預設值0,以取得 最小遺漏值比率 ,1表示 最大遺漏值比率,則會針對所有選取的資料行傳回指標資料行,並執行指定的作業。
提示
如果您不確定遺漏值清除是否如預期般運作,請選取 [ 產生遺漏值指標資料行 ] 選項。
已知問題
如果您使用滑鼠方法來清除資料,然後處理包含遺漏值的資料集,您可能會收到下列錯誤:「AFx 程式庫程式庫例外狀況:模型未定型。 ( 錯誤 1000 ) 」
只有在選取滑鼠方法時,以及訓練資料集不包含遺漏值,但測試資料集執行時,才會發生此錯誤。
預期的輸入
名稱 | 類型 | 說明 |
---|---|---|
資料集 | 資料表 | 要清除的資料集 |
模組參數
名稱 | 範圍 | 類型 | 預設 | 描述 |
---|---|---|---|---|
要清除的資料行 | 任意 | ColumnSelection | 全部 | 選取的資料行遺漏值的清除作業。 |
最小遺漏值比率 | [0.0;1.0] | Float | 0.0 | 從所有選取的資料行集合中,只清除遺漏值比率超過指定值的資料行。 |
最大遺漏值比率 | [0.0;1.0] | Float | 1.0 | 從選取的所有資料行所組成的集合中,只清除遺漏值比率低於指定值的資料行 |
清除模式 | List | 處理原則 | 自訂的替代值 | 選擇清除遺漏值時要使用的演算法。 |
取代值 | 任意 | String | "0" | 輸入的值來取代遺漏值。 這是選擇性的值。 |
完全為遺漏值的資料行 | 任意 | ColumnsWithAllValuesMissing | 移除 | 指出是否應該在輸出中保留完全為遺漏值的資料行 |
產生遺漏值指標資料行 | 任意 | 布林值 | false | 產生可指出哪些資料列已清除的資料行 |
反覆運算次數 | [1;10] | 整數 | 5 | 指定使用 MICE 時的反覆運算次數 |
PCA 預測的反覆運算次數 | [1; 50] | 整數 | 10 | 指定使用 PCA 預測時的反覆運算次數 |
輸出
名稱 | 類型 | 說明 |
---|---|---|
已清除的資料集 | 資料表 | 已清除的資料集 |
清除轉換 | ITransform 介面 | 傳遞至套用轉換模組以清除新資料的轉換 |
例外狀況
例外狀況 | 描述 |
---|---|
錯誤 0002 | 如果有一或多個參數無法剖析或從指定的類型轉換成目標方法所需的類型,就會發生例外狀況。 |
錯誤 0003 | 如果將一個或多個輸入資料集為 null 或空白,會發生例外狀況。 |
錯誤 0008 | 如果參數不在範圍內,就會發生例外狀況。 |
錯誤 0013 | 如果精簡傳遞給模組有無效的型別時,發生例外狀況。 |
錯誤 0018 | 如果無效的輸入資料集,就會發生例外狀況。 |
錯誤 0039 | 如果作業失敗,就會發生例外狀況。 |
如需 Studio (傳統) 模組特定的錯誤清單,請參閱機器學習錯誤碼。
如需 API 例外狀況的清單,請參閱機器學習 REST API 錯誤碼。