保留原始分佈的子集創建如果我有一個包含連續變數的資料表,並且我想建立幾個與原始表保持相同分佈的子集,我該怎麼做?
我有 JMP Pro,並且嘗試了“子集”選單中的“分層”選項,但我不知道如何操作。
數據探索和視覺化回覆:保留原始分佈的子集創建您可以根據需要建立一個分層的驗證列(在預測建模下),然後使用這些子集。我認為至少在最初,您僅限於 3 個子集(訓練、驗證和測試子集),但如果您需要更多,您可以執行此操作多次。我從未使用過“子集”選單中的“分層”選項,但它似乎可以工作,但一次只能建立子集。
回覆:保留原始分佈的子集創建因為您有 JMP Pro,並且您提到了 Stratify,所以這裡有另一個選項:來自 JMP Pro 的 XGBoost 插件的「製作 K 折疊列」( https://community.jmp.com/t5/JMP-Add-Ins / XGBoost-Add-In-for-JMP-Pro/ta-p/319383 ) 並閱讀第 3、4、5 頁
在“XGBoost Add-in.pdf”文件中。

此函數建立子集(加載項稱為折疊),以保持原始分佈(加載項稱為平衡),同時透過保持分層變數平衡來尊重分層。請參閱該 pdf 文件第 5 頁的直方圖。
回覆:保留原始分佈的子集創建感謝您的回答。
我意識到需要超過 3 個子集,您可以在預測建模 --> 建立驗證列中使用「建立 K 倍驗證列」。
回覆:保留原始分佈的子集創建我認為您需要做的就是使用 Tables=> Subset Platform 中的隨機取樣功能指定子集。按速率或大小進行隨機取樣將為您提供與原始表具有相同分佈的資料表。
回覆:保留原始分佈的子集創建嚴格來說,如果您想要與原始分佈相同的分佈,則需要進行放回抽樣。這是重採樣和引導方法的基礎。 Subset 指令執行無放回隨機取樣。我認為你需要一個腳本來獲得你需要的東西。採樣將基於計算隨機下標,如下所示:
subscript = J( sample size, 1, Random Integer( 1, N Row( dt ) )
此向量可用於在新資料表中建立資料列。
New Table( "Sample", New Column( "Data", Value( dt:originalColumn[subscript] ) ) );
回覆:子集建立保持原始分佈你好@bbenny7 ,
我發現這個主題很有趣,原因類似,就是想正確地對資料表進行子集劃分,但要根據列進行分層。我以前也按照@dlehman1的建議做過,使用驗證列對感興趣的列進行分層,但我也很好奇,如果需要多個數據表,該如何用不同的方法實現。我嘗試了@Mark_Bailey建議的方法,但發現需要將New Table()的JSL程式碼拆分成兩行,一行定義新表,另一行根據資料表的另一個感興趣的列賦值。我無法按照他原來的程式碼佈局方式運行。以下是修改後的程式碼,效果如下:
Names Default To Here( 1 );
dt = Data Table( "originaldatatable" ); //assigns the original data table to the variable dt
subscript = J( samplesize, 1, Random Integer( 1, N Rows( dt ) ) ); //creates the random integer vector of length 'samplesize'
dt2 = New Table( "Sample", New Column( "Data" ) ); //creates new data table with column Data
dt2:Data << Set Values( dt:originalColumn[subscript] ); // assigns values to Data based on the row entries for the originalColumn
作為一個有趣的小測試,我透過製作一個 For() 循環並在其中放入下標線(以產生一組新的行號)產生了 4 個子集,並比較了 4 個集合的分佈,它們的匯總統計數據都非常相似。

我做了一個類似的測試,但創建了4個分層驗證列,然後查看了它們的統計資料。 N值不同,因為「建立驗證列」平台無法產生與我上面相同的比率,我在上面隨機選擇了300個。總之,結果都非常相似。

無論哪種方式都應該有效,並能讓你到達你想去的地方。
祝你好運! ,
DS
回覆:子集建立保持原始分佈謝謝你的回答。
我意識到我不需要插件,但我可以在預測模型中使用「製作 K 折驗證列」-->製作驗證列。