共用方式為


定型和測試數據集

適用於: SQL Server 2019 和舊版 Analysis Services Azure Analysis Services Fabric/Power BI Premium

重要

SQL Server 2017 Analysis Services 中已淘汰數據採礦,現在已在 SQL Server 2022 Analysis Services 中停止。 檔不會更新為已淘汰和已停止的功能。 若要深入瞭解,請參閱 Analysis Services 回溯相容性

將數據分成定型集和測試集,是評估數據採礦模型的重要部分。 一般而言,當您將數據集分隔成定型集和測試集時,大部分的數據都用於定型,而較小的部分數據則用於測試。 SQL Server Analysis Services 會隨機取樣數據,以協助確保測試和定型集類似。 藉由使用類似的數據進行定型和測試,您可以將數據不一致的影響降到最低,並進一步瞭解模型的特性。

使用定型集處理模型之後,您可以針對測試集進行預測來測試模型。 由於測試集中的數據已經包含您要預測之屬性的已知值,因此很容易判斷模型的猜測是否正確。

建立數據採礦結構的測試和定型集

在 SQL Server 2017 中,您會在採礦結構的層級區隔原始數據集。 定型和測試數據集的大小,以及哪些數據列屬於哪一個數據列,會與結構一起儲存,而以該結構為基礎的所有模型都可以使用集合進行定型和測試。

您可以透過下列方式在採礦結構上定義測試資料集:

  • 當您建立採礦結構時,使用數據採礦精靈來分割採礦結構。

  • 在數據採礦設計師的 [採礦結構] 索引卷標中修改結構屬性

  • 使用分析管理物件 (AMO) 或 XML 資料定義語言 (DDL) 以程式設計方式建立和修改結構。

使用數據採礦精靈來分割採礦結構

根據預設,在您定義採礦結構的數據源之後,數據採礦精靈會將數據分割成兩組:一個具有 70% 的源數據、用於定型模型,另一個具有 30% 的源數據,用於測試模型。 之所以選擇此預設值,是因為數據採礦中通常會使用 70-30 比率,但使用 SQL Server Analysis Services 時,您可以變更此比例以符合您的需求。

您也可以設定精靈來設定定型案例數目上限,也可以結合限制,以允許最大百分比的案例數目達指定的案例數目上限。 當您同時指定案例的百分比上限和案例數目上限時,SQL Server Analysis Services 會使用兩個限制中的較小值作為測試集的大小。 例如,如果您為測試案例指定 30% 的鑒效組,並將測試案例數目上限指定為 1000,測試集的大小永遠不會超過 1000 個案例。 如果您想要確保測試集的大小保持一致,即使將更多定型數據新增至模型,這非常有用。

如果您針對不同的採礦結構使用相同的數據源檢視,而且想要確保所有採礦結構及其模型的數據以大致相同的方式分割,您應該指定用來初始化隨機取樣的種子。 當您指定 HoldoutSeed的值時,SQL Server Analysis Services 會使用該值開始取樣。 否則,取樣會在採礦結構的名稱上使用哈希演算法來建立種子值。

注意

如果您使用 EXPORTIMPORT 語句來建立採礦結構的複本,新的採礦結構將會有相同的定型和測試數據集,因為導出程式會建立新的標識符,但使用相同的名稱。 不過,如果兩個採礦結構使用相同的基礎數據源,但名稱不同,則針對每個採礦結構所建立的集合將會不同。

修改結構屬性以建立測試數據集

如果您建立和處理採礦結構,然後稍後決定要保留測試數據集,您可以修改採礦結構的屬性。 若要變更資料分割的方式,請編輯下列屬性:

財產 描述
HoldoutMaxCases 指定要包含在測試集中的案例數目上限。
HoldoutMaxPercent 指定要包含在測試集中的案例數目,做為完整數據集的百分比。 若要沒有資料集,您可以指定 0。
HoldoutSeed 指定隨機選取數據分割的數據時,要當做種子使用的整數值。 此值不會影響定型集中的案例數目;相反地,它會確保可以重複數據分割。

如果您將測試數據集新增或變更為現有的結構,則必須重新處理結構和所有相關聯的模型。 此外,由於分割源數據會導致模型在不同的數據子集上定型,因此您可能會看到與模型不同的結果。

以程序設計方式指定 Holdout

您可以使用 DMX 語句、AMO 或 XML DDL,在採礦結構上定義測試和定型數據集。 ALTER MINING STRUCTURE 語句不支援使用鑒效組參數。

  • DMX 在數據採礦延伸模組 (DMX) 語言中,CREATE MINING STRUCTURE 語句已擴充為包含WITH HOLDOUT子句。

  • ASSL 您可以使用 SQL Server Analysis Services 腳本語言 (ASSL) 建立新的採礦結構,或將測試數據集新增至現有的採礦結構。

  • AMO 您也可以使用 AMO 來檢視及修改鑒效組數據集。

您可以藉由查詢數據採礦架構數據列集,來檢視現有採礦結構中有關鑒效組的資訊。 您可以進行 DISCOVER ROWSET 呼叫,或使用 DMX 查詢來執行此動作。

擷取有關 Holdout 資料的資訊

根據預設,會快取定型和測試數據集的所有資訊,讓您可以使用現有的數據來定型,然後測試新的模型。 您也可以定義要套用至快取保留數據的篩選,以便評估數據子集上的模型。

案例分成定型和測試數據集的方式取決於您設定鑒效組的方式,以及您提供的數據。 如果您想要判斷用於定型或測試的案例數目,或想要尋找定型和測試集中包含的案例的其他詳細數據,您可以建立 DMX 查詢來查詢模型結構。 例如,下列查詢會傳回模型定型集中使用的案例。

SELECT * from <structure>.CASES WHERE IsTrainingCase()  

若要只擷取測試案例,並額外篩選採礦結構中其中一個數據行的測試案例,請使用下列語法:

SELECT * from <structure>.CASES WHERE IsTestCase() AND <structure column name> = '<value>'  

使用鑒效組數據的限制

  • 若要使用 holdout,採礦結構的 MiningStructureCacheMode 屬性必須設定為預設值,KeepTrainingCases。 如果您將 CacheMode 屬性變更為 ClearAfterProcessing,然後重新處理採礦結構,分割區將會遺失。

  • 您無法從時間序列模型移除資料;因此,您無法將源數據分成定型和測試集。 如果您開始建立採礦結構和模型,並選擇Microsoft時間序列演算法,則會停用建立鑒效組數據集的選項。 如果採礦結構包含案例或巢狀數據表層級的 KEY TIME 數據行,也會停用使用鑒效組數據。

  • 您可以不小心設定鑒效組數據集,讓完整的數據集用於測試,而且不會保留任何數據進行定型。 不過,如果您這樣做,SQL Server Analysis Services 將會引發錯誤,以便修正問題。 如果超過 50% 的數據已保留進行測試,SQL Server Analysis Services 也會在處理結構時警告您。

  • 在大部分情況下,預設保留值 30 提供定型和測試數據之間的良好平衡。 判斷數據集應該要提供足夠的定型,或訓練集的疏鬆程度,還是避免過度學習,沒有簡單的方法。 不過,在建置模型之後,您可以使用交叉驗證來評估與特定模型相關的數據集。

  • 除了上表所列的屬性之外,AMO 和 XML DDL 中也會提供唯讀屬性 HoldoutActualSize。 不過,由於在處理結構之後,無法準確判斷分割區的實際大小,因此您應該先檢查模型是否已處理,再擷取 HoldoutActualSize 屬性的值。

另請參閱

數據採礦工具
數據採礦概念
數據採礦解決方案
測試和驗證 (資料採礦)