Share via


將資料分割成培訓集和測試集 (Analysis Services - 資料採礦)

將資料分成定型集和測試集是評估資料採礦模型中的一個重要部分。一般來說,當您將資料集分割成定型集和測試集時,大多數的資料會用於定型,小部分的資料會用於測試。Analysis Services 會隨機取樣資料,以確保測試和定型資料分割是類似的。您可以透過針對定型和測試使用相同的資料,盡可能減少資料不一致的影響並有效了解模型的特性。

在使用定型集處理過模型之後,您可以針對測試集進行預測來測試模型。由於測試集中的資料已經包含您想要預測之屬性的已知值,所以可以輕鬆地判斷模型的猜測是否正確。

一般來說,採礦模型的預測精確度是由「增益」(Lift) 或分類精確度所衡量。如需有關增益圖和其他精確度圖表的詳細資訊,請參閱<圖表模型精確度的工具 (Analysis Services - 資料採礦)>。

建立資料採礦結構的資料分割

在 SQL Server 2008 中,您可以分割位於採礦結構層級的資料。有關資料分割大小和每個資料分割中之資料的資訊會與結構一起儲存,而且以該結構為基礎的所有模型都可以使用這些資料分割進行定型和測試。

您可以利用下列方式,針對採礦結構定義資料分割:

  • 在您建立採礦結構時,使用資料採礦精靈來分割採礦結構。

  • 在資料採礦設計師的 [採礦結構] 索引標籤中修改結構屬性。

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

使用資料採礦精靈來分割採礦結構

根據預設,當您定義了採礦結構的資料來源之後,資料採礦精靈會將資料分成 70% 用於定型而 30% 用於測試的資料分割。這是通常用於資料採礦的比率,但是您可以利用 Analysis Services 來變更這個比率,以便符合您的需求。

此外,您可以設定精靈以便設定定型案例的最大數目,也可以結合限制以便允許案例的最大百分比 (最高達指定的最大案例數目)。當您同時指定案例的最大百分比和案例的最大數目時,Analysis Services 會使用這兩個限制中的較小者當做測試集的大小。例如,如果您針對測試案例指定 30% 鑑效組,而且測試案例的最大數目為 1000,則測試集的大小絕對不會超過 1000 個案例。如果您想要確保測試集的大小維持一致 (即使有更多定型資料加入至模型),這可能會很有用。

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

[!附註]

如果您使用 EXPORT 和 IMPORT 陳述式來建立採礦結構的副本,新的採礦結構將具有相同的資料分割定義,因為匯出程序會建立新的識別碼,但卻使用相同的名稱。不過,如果兩個採礦結構使用相同的基礎資料來源,但具有不同的名稱,則針對每個採礦結構所建立的資料分割將會不同。

修改結構屬性

如果您建立並處理採礦結構,然後決定要加入測試資料分割,就可以修改採礦結構的屬性。若要變更資料分割的方式,請編輯下列屬性:

屬性

描述

HoldoutMaxCases

指定測試集中要包含的最大案例數目。

HoldoutMaxPercent

將測試集中要包含的案例數目指定為完整資料集的百分比。如果沒有任何資料集,您應該指定 0。

HoldoutSeed

指定一個整數值,以便在隨機選取資料分割的資料時當做種子使用。這個值不會影響定型集中的案例數目。不過,它會確保資料分割可重複。

如果您在現有的結構中加入或變更資料分割,就必須重新處理結構和所有相關聯的模型。此外,由於加入資料分割會導致模型針對不同的資料子集進行定型,因此您可能會看見模型產生不同的結果。

以程式設計方式指定 HOLDOUT

您可以使用 DMX 陳述式、AMO 或 XML DDL 來建立分割的資料採礦結構。

  • DMX:在資料採礦延伸模組 (DMX) 語言中,CREATE MINING STRUCTURE 陳述式已經擴充成包含 WITH HOLDOUT 子句。如需 CREATE STRUCTURE 陳述式的語法和範例,請參閱<CREATE MINING STRUCTURE (DMX)>。

    [!附註]

    ALTER MINING STRUCTURE 陳述式不支援使用鑑效組參數。

  • ASSL:您可以使用 Analysis Services 指令碼語言 (ASSL),藉以建立新的資料分割採礦結構以及將資料分割加入至現有的資料採礦結構。如需詳細資訊,請參閱<MiningStructure 元素 (ASSL)>。

  • AMO:您也可以使用 AMO 來檢視和修改資料分割。如需詳細資訊,請參閱<AMO 概念和物件模型>。

您可以查詢資料採礦結構描述資料列集,以檢視現有採礦結構中有關資料分割的資訊。您可以發出 DISCOVER ROWSET 呼叫來進行這項處理,或是使用 DMX 查詢。如需詳細資訊,請參閱<資料採礦結構描述資料列集>或<查詢資料採礦結構描述資料列集 (Analysis Services - 資料採礦)>。

使用資料分割資訊

根據預設,有關定型和測試資料分割的所有資訊都會快取,好讓您可以使用現有資料分割來定型然後測試新的模型。您也可以定義要套用至快取鑑效組資料分割的篩選,如此您就可以評估資料子集的模型。如需詳細資訊,請參閱<建立採礦模型的篩選 (Analysis Services - 資料採礦)>。

案例分成若干資料分割的方式取決於您設定鑑效組的方式以及您提供的資料。如果您想要判斷每個資料分割中的案例數目,或找出有關定型集和測試集中包含之案例的詳細資料,您可以建立 DMX 查詢來查詢模型結構。例如,下列查詢會傳回模型之定型集中使用的案例。

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

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

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

使用鑑效組的限制

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

  • 您無法使用資料分割搭配時間序列模型。因此,如果您建立某個資料分割並指定要使用 Microsoft 時間序列演算法來建立模型,資料分割就會停用。如果採礦結構在案例或巢狀資料表層級包含 KEY TIME 資料行,也會停用資料分割。

  • 您可能會不小心設定資料分割使用完整資料集用於測試,而沒有任何資料用於定型。不過,Analysis Services 將會引發錯誤,以便讓您更正問題。此外,如果超過 50% 的資料已經保留供測試,則 Analysis Services 也會在處理結構時警告您。

  • 在大部分情況下,預設的鑑效組值 30 會在定型與測試資料之間提供良好的平衡。目前沒有任何簡易方式可判斷資料集應該設定為多大才能提供足夠的定型,或定型集應該設定為多小才能避免過度學習。但是,在您建立模型之後,可以使用交叉驗證來評估與特定模型相關的資料集。如需詳細資訊,請參閱<交叉驗證 (Analysis Services - 資料採礦)>。

  • 除了上表所列的屬性以外,AMO 和 XML DDL 中也提供了一個唯讀屬性 HoldoutActualSize。不過,由於資料分割的實際大小要等到結構已經處理之後才能正確判斷出,因此您應該先檢查模型是否已經處理,然後再擷取 HoldoutActualSize 屬性的值。