分類的數據準備
瞭解如何使用 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 和更新版本)
插補遺漏 values
在 Databricks Runtime 10.4 LTS ML 和更新版本中,您可以指定如何對 null values 進行插補。 在 UI 中,從 Impute 的下拉式清單中選擇 select 方法,然後在 tableschema中使用column。 在 API 中,使用 imputers
參數。 如需詳細資訊,請參閱 AutoML Python API 參考。
預設情況下,AutoML 會根據 column 類型和內容選擇填補方法。
注意
如果您指定非預設插補方法,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 接著會在模型訓練中使用這些類別權數作為參數,以確保在訓練模型時,每個類別的樣本都會適當加權。
Column 選取
在 Databricks Runtime 10.3 ML 和更新版本中,您可以指定 AutoML 應該使用 columns 進行訓練。 若要在 UI 中排除 column,請在 Includecolumn內取消勾選。 在 API 中,使用 exclude_cols
參數。 如需詳細資訊,請參閱 AutoML Python API 參考。
您無法移除選取為預測目標的 column,或作為 時間 column 用於數據分割的項。
根據預設,會包含所有 columns。
將資料集分割成訓練、驗證和測試集
AutoML 會將資料分割成三個分割區,分別用於訓練、驗證和測試。 根據 ML 問題的類型,您有不同的分割資料選項。
使用下列方法將資料分割成定型、驗證和測試集:
(預設) 隨機分割:如果未指定資料分割策略,資料集會隨機分割成 60% 的訓練分割區、20% 的驗證分割區,以及 20% 的測試分割區。 針對分類,分層隨機分割可確保每個類別都已充分呈現在訓練、驗證和測試集中。
時間分割:在 Databricks Runtime 10.4 LTS ML 和更新版本中,您可以 select 時間 column 建立時間定型、驗證和測試分割。 按時間順序的分割會使用最早的資料點進行訓練、次早資料點進行驗證,以及最新的資料點進行測試。 時間 column 可以是時間戳、整數或字串 column。
手動分割:在 Databricks Runtime 15.3 ML 和更新版本中,您可以使用 API 來 set 手動分割。 指定分割 column,並使用 valuestrain
、validate
或 test
來識別您想要用於定型、驗證和測試數據集的數據列。 除了 train
、test
或 validate
以外的任何分割 columnvalues 數據列,則會忽略並引發對應的警示。
取樣大型資料集
雖然 AutoML 會將超參數微調試用分散到叢集的背景工作角色節點,但每個模型都會在單一背景工作角色節點上進行訓練。
AutoML 會自動估計載入和訓練資料集所需的記憶體,並視需要取樣資料集。
Databricks 運行時間版本 | 取樣行為 |
---|---|
9.1 LTS ML - 10.4 LTS ML | 取樣分數是常數, 不 取決於叢集的節點類型或每個節點的記憶體。 |
11.x ML | 背景工作節點的取樣分數 會增加 ,每個核心的記憶體較多。 若要增加樣本大小: - 使用 記憶體優化 實例類型。 - 在Spark組態中調整 spark.task.cpus 。 默認值為 1,最大值是背景工作節點上的 CPU 數目。 最大值是背景工作節點上的CPU數目。 當您增加此值時,樣本大小會增加,但平行執行的試用版則會減少。範例:在具有 4 個核心和 64GB RAM 的電腦上: - 使用 spark.task.cpus=1 時,每個背景工作角色都會執行四個試用版,每個都使用 16GB RAM。- 使用 時 spark.task.cpus=4 ,每個背景工作角色都會執行一個試用版,使用所有 64GB RAM。 |
11.3 LTS ML 和更新版本 | 如果 AutoML 取樣數據集,則取樣分數會顯示在 UI 的 [概觀] 索引標籤中。 |
12.2 LTS ML 和更新版本 | AutoML 可以藉由為每個定型工作配置更多 CPU 核心來處理較大的數據集。 選取具有更多總記憶體的實例,以增加樣本大小。 |
針對分類問題,AutoML 會使用 PySpark sampleBy
方法進行分層取樣,以保留目標標籤分佈。
針對迴歸問題,AutoML 會使用 PySpark sample
方法。
語意類型偵測
注意
- AutoML 不會為具備 自訂插補 方法的 columns 執行語意類型偵測。
使用 Databricks Runtime 9.1 LTS ML 和更新版本時,AutoML 會嘗試偵測 columns 語意類型與 tableschema中的 Spark 或 pandas 數據類型不同。 AutoML 會將這些 columns 視為偵測到的語意類型。 這些偵測是為盡最大努力,有時可能會遺漏語意類型的存在。 您也可以手動
具體而言,AutoML 會進行下列調整:
- 代表日期或時間戳數據的字串和整數 columns 會被視為時間戳類型。
- 表示數值數據的字串 columns 會被視為數值類型。
使用 Databricks Runtime 10.1 ML 和更新版本時,AutoML 也會進行下列調整:
- 包含類別標識碼的數值 columns 會被視為類別特徵。
- 包含英文文字的字串 columns 會被視為文字功能。
語意類型註釋
透過 Databricks Runtime 10.1 ML 和更新版本,您可以在 column上添加語意類型批註,以手動控制語意類型的指派。 若要將 column<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
:column 包含類別 values(例如,應視為識別碼的數值 values)。 -
numeric
:column 包含數值 values(例如,可以剖析為數位的字串 values)。 -
datetime
:column 包含時間戳 values(可轉換成時間戳的字串、數值或日期 values)。 -
text
:字串 column 包含英文文字。
若要停用 column上的語意類型偵測,請使用特殊關鍵詞批註 native
。