將數據分成定型集和測試集,是評估數據採礦模型的重要部分。 一般而言,當您將數據集分隔成定型集和測試集時,大部分的數據都用於定型,而較小的部分數據則用於測試。 Analysis Services 會隨機取樣數據,以協助確保測試和定型集類似。 藉由使用類似的數據進行定型和測試,您可以將數據不一致的影響降到最低,並進一步瞭解模型的特性。
使用定型集處理模型之後,您可以針對測試集進行預測來測試模型。 由於測試集中的數據已經包含您要預測之屬性的已知值,因此很容易判斷模型的猜測是否正確。
建立數據採礦結構的測試和定型集
在 SQL Server 2014 中,您會在採礦結構的層級區隔原始數據集。 定型和測試數據集的大小,以及哪些數據列屬於哪一個數據列,會與結構一起儲存,而以該結構為基礎的所有模型都可以使用集合進行定型和測試。
您可以透過下列方式在採礦結構上定義測試資料集:
當您建立採礦結構時,使用數據採礦精靈來分割採礦結構。
在數據採礦設計師的 [ 採礦結構 ] 索引標籤中修改結構屬性。
使用分析管理物件 (AMO) 或 XML 資料定義語言 (DDL) 以程式設計方式建立和修改結構。
使用數據採礦精靈來分割採礦結構
根據預設,在您定義採礦結構的數據源之後,數據採礦精靈會將數據分割成兩組:一個具有 70% 的源數據、用於定型模型,另一個具有 30% 的源數據,用於測試模型。 之所以選擇此預設值,是因為數據採礦中通常會使用 70-30 比率,但透過 Analysis Services,您可以變更此比例以符合您的需求。
您也可以設定精靈來設定定型案例數目上限,也可以結合限制,以允許最大百分比的案例數目達指定的案例數目上限。 當您同時指定案例的百分比上限和案例數目上限時,Analysis Services 會使用兩個限制中的較小數目做為測試集的大小。 例如,如果您為測試案例指定 30% 的保留集,並將測試案例數目上限指定為 1000,測試集的規模將永遠不會超過 1000 個案例。 如果您想要確保測試集的大小即使在新增更多定型數據至模型時仍能保持一致,这个方法会非常有用。
如果您針對不同的採礦結構使用相同的數據源檢視,而且想要確保所有採礦結構及其模型的數據以大致相同的方式分割,您應該指定用來初始化隨機取樣的種子。 當您指定 的值 HoldoutSeed時,Analysis Services 會使用該值開始取樣。 否則,取樣會在採礦結構的名稱上使用哈希演算法來建立種子值。
備註
如果您使用 EXPORT 和 IMPORT 語句建立採礦結構的副本,新的採礦結構將會有相同的訓練和測試數據集,因為導出過程會建立新的識別碼,但使用相同的名稱。 不過,如果兩個採礦結構使用相同的基礎數據源,但名稱不同,則針對每個採礦結構所建立的集合將會不同。
修改結構屬性以建立測試數據集
如果您建立和處理採礦結構,然後稍後決定要保留測試數據集,您可以修改採礦結構的屬性。 若要變更資料分割的方式,請編輯下列屬性:
| 房產 | 說明 |
|---|---|
HoldoutMaxCases |
指定要包含在測試集中的案例數目上限。 |
HoldoutMaxPercent |
指定要包含在測試集中的案例數目,做為完整數據集的百分比。 若要沒有資料集,您可以指定 0。 |
HoldoutSeed |
指定用作隨機選取分割數據的整數值種子。 此值不會影響訓練集中的案例數目;相反地,它會確保數據集的分割可以重複。 |
如果您將測試數據集新增或變更為現有的結構,則必須重新處理結構和所有相關聯的模型。 此外,由於分割源數據會導致模型在不同的數據子集上定型,因此您可能會看到與模型不同的結果。
以程序設計方式指定 Holdout
您可以使用 DMX 語句、AMO 或 XML DDL,在採礦結構上定義測試和定型數據集。 ALTER MINING STRUCTURE 語法不支援使用保留參數。
DMX 在數據採礦延伸模組 (DMX) 語言中,CREATE MINING STRUCTURE 語句已擴充為包含WITH HOLDOUT子句。
ASSL 您可以使用 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 數據行,則會停用持出數據的使用。
您可能會不經意間設定保留數據集,讓整個數據集用於測試,而沒有任何數據保持在訓練中。 不過,如果您這樣做,Analysis Services 將會引發錯誤,以便修正問題。 如果超過 50% 的數據已保留進行測試,Analysis Services 也會在處理結構時警告您。
在大部分情況下,預設保留值 30 提供定型和測試數據之間的良好平衡。 判斷數據集應該多大才能提供足夠的訓練,或訓練集的稀疏程度可以達到而不會導致過度擬合,沒有簡單的方法。 不過,在建置模型之後,您可以使用交叉驗證來評估與特定模型相關的數據集。
除了上表所列的屬性之外,AMO 和 XML DDL 中也會提供唯讀屬性
HoldoutActualSize。 不過,由於在處理結構之後,無法準確判斷分割區的實際大小,因此您應該先檢查模型是否已經過處理,再擷取 屬性的值HoldoutActualSize。
相關內容
| 主題 | 連結 |
|---|---|
| 描述模型上的篩選如何與定型和測試數據集互動。 | 採礦模型的篩選 (Analysis Services - 數據採礦) |
| 描述如何使用定型和測試數據會影響交叉驗證。 | 交叉驗證 (Analysis Services - 數據採礦) |
| 提供有關在採礦結構中使用定型和測試集的程序設計介面資訊。 |
AMO 概念和物件模型 ASSL 礦業結構元素 |
| 提供 DMX 語法來建立保留集。 | CREATE MINING STRUCTURE(DMX) |
| 擷取訓練集和測試集中案件的相關資訊。 |
數據採礦架構數據列集 查詢資料採礦架構資料列集 (Analysis Services - 資料採礦) |