瞭解如何使用 AutoML 來準備數據以進行分類。
本文說明 AutoML 如何準備數據以進行分類定型,並描述可設定的數據設定。 您可以在 AutoML UI 中的實驗設定期間調整這些選項。
如需使用 AutoML API 設定這些設定,請參閱 AutoML Python API 參照。
支援的資料特徵類型
僅支援下面所列的功能類型。 例如,不支援映像。
支援以下特徵類型:
- 數值 (
ByteType、ShortType、IntegerType、LongType、FloatType和DoubleType) - 布林值
- 字串(分類或英文文字)
- 時間戳記 (
TimestampType、DateType) - ArrayType[Numeric] (Databricks Runtime 10.4 LTS ML 和更新版本)
- DecimalType (Databricks Runtime 11.3 LTS ML 和更新版本)
插補遺漏值
在 Databricks Runtime 10.4 LTS ML 及更高版本中,您可以指定空值插補的方式。 在 UI 中,於資料表架構中,從 Impute with 欄位的下拉選單中選擇方法。 在 API 中,使用 imputers 參數。 如需詳細資訊,請參閱 AutoML Python API 參考。
根據預設,AutoML 會根據數據行類型和內容選取插補方法。
注意
如果您指定非預設插補方法,AutoML 不會執行語意類型偵測。
分類問題的不平衡資料集支援
在 Databricks Runtime 11.3 LTS ML 和更新版本中,如果 AutoML 偵測到資料集不平衡,它會嘗試透過縮小主要類別的取樣及新增類別權數,來減少訓練資料集的不平衡。 AutoML 僅會平衡訓練資料集,而不會平衡測試和驗證資料集。 這麼做可確保模型效能一律會在具有真實輸入類別分佈的非擴充資料集上進行評估。
若要平衡不平衡的訓練資料集,AutoML 會使用與給定類別縮小取樣程度反向關聯的類別權數。 例如,如果具有 100 個樣本的訓練資料集有 95 個樣本屬於類別 A 和 5 個樣本屬於類別 B,AutoML 會將類別 A 的樣本量縮小至 70 個,也就是類別 A 的樣本縮小率為 70/95 (0.736),同時類別 B 的樣本數目保持在 5,以減少這種不平衡。 為了確保最終模型已正確校正,而且模型輸出的機率分佈與輸入的機率分佈相同,AutoML 會按 1/0.736 (1.358) 的比率擴大 A 類別的類別權數,同時將 B 類別的權數維持為 1。 AutoML 接著會在模型訓練中使用這些類別權數作為參數,以確保在訓練模型時,每個類別的樣本都會適當加權。
欄選擇
在 Databricks Runtime 10.3 ML 及更高版本中,您可以指定 AutoML 應用於訓練的欄位。 若要排除 UI 中的欄位,請在 包含 欄中取消勾選。 在 API 中,使用 exclude_cols 參數。 如需詳細資訊,請參閱 AutoML Python API 參考。
您無法刪除選取為預測目標的欄,或刪除用作分割數據的 時間欄。
預設情況下,會包含所有列。
將資料集分割成訓練、驗證和測試集
AutoML 會將資料分割成三個分割區,分別用於訓練、驗證和測試。 根據 ML 問題的類型,您有不同的分割資料選項。
使用下列方法將資料分割成定型、驗證和測試集:
(預設值) 隨機分割:如果未指定數據分割策略,數據集會隨機分割成 60% 定型分割、20% 驗證分割,以及 20% 測試分割。 針對分類,分層隨機分割可確保每個類別都已充分呈現在訓練、驗證和測試集中。
時間分割:在 Databricks Runtime 10.4 LTS ML 和更新版本中,您可以選取時間數據行來建立時間序列定型、驗證和測試分割。 按時間順序的分割會使用最早的資料點進行訓練、次早資料點進行驗證,以及最新的資料點進行測試。 時間數據行可以是時間戳、整數或字串數據行。
手動分割:在 Databricks Runtime 15.3 ML 和更新版本中,您可以使用 API 來設定手動分割。 指定分割數據行,並使用 train、validate或 test 的值來識別您想要用於定型、驗證和測試數據集的數據列。 任何具有分割列值的數據行,若值不是 train, test或 validate,將會被忽略,並引發對應的警示。
取樣大型資料集
雖然 AutoML 會將超參數微調試用分散到叢集的背景工作角色節點,但每個模型都會在單一背景工作角色節點上進行訓練。
AutoML 會自動估計載入和訓練資料集所需的記憶體,並視需要取樣資料集。
| Databricks 執行時版本 | 取樣行為 |
|---|---|
| 9.1 LTS ML - 10.4 LTS ML | 取樣分數是常數, 不 取決於叢集的節點類型或每個節點的記憶體。 |
| 11.x 毫升 | 當每個核心的記憶體較多時,工作節點的取樣分數會增加。 若要增加樣本大小:
範例:在具有 4 個核心和 64GB RAM 的電腦上:
|
| 11.3 LTS ML 和更新版本 | 如果 AutoML 取樣數據集,則取樣分數會顯示在 UI 的 [概觀] 索引標籤中。 |
| 12.2 LTS ML 和更新版本 | AutoML 可以藉由為每個定型工作配置更多 CPU 核心來處理較大的數據集。 選取具有更多總記憶體的實例,以增加樣本大小。 |
針對分類問題,AutoML 會使用 PySpark sampleBy方法進行分層取樣,以保留目標標籤分佈。
針對迴歸問題,AutoML 會使用 PySpark sample方法。
語意類型偵測
注意
- AutoML 不會針對有指定的 自定義插補 方法的欄位執行語意類型偵測。
使用 Databricks Runtime 9.1 LTS ML 和更新版本時,AutoML 會嘗試偵測數據行的語意類型與數據表架構中的 Spark 或 pandas 數據類型不同。 AutoML 會將這些數據行視為偵測到的語意類型。 這些偵測是為盡最大努力,有時可能會遺漏語意類型的存在。 您也可以手動設定數據行的語意類型,或告訴 AutoML 不要使用註釋,將語意類型偵測套用至數據行
具體而言,AutoML 會進行下列調整:
- 代表日期或時間戳數據的字串和整數數據行會被視為時間戳類型。
- 表示數值數據的字串數據行會被視為數值類型。
使用 Databricks Runtime 10.1 ML 和更新版本時,AutoML 也會進行下列調整:
- 包含類別識別碼的數值數據行會被視為類別特徵。
- 包含英文文字的字串數據行會被視為文字功能。
語意類型註釋
透過 Databricks Runtime 10.1 ML 及更高版本,您可以在欄位上放置語意類型批註,以手動控制指派的語意類型。 若要將數據行的語意類型手動標註為 <column-name><semantic-type>,請使用下列語法:
metadata_dict = df.schema["<column-name>"].metadata
metadata_dict["spark.contentAnnotation.semanticType"] = "<semantic-type>"
df = df.withMetadata("<column-name>", metadata_dict)
<semantic-type> 可以是下列其中一項:
-
categorical:數據行包含類別值(例如,應視為標識符的數值)。 -
numeric:數據行包含數值(例如,可以剖析成數位的字串值)。 -
datetime:數據行包含時間戳值(可轉換成時間戳的字串、數值或日期值)。 -
text:字串數據行包含英文文字。
若要停用資料行上的語意類型偵測,請使用特殊關鍵詞批註 native。