這個問題中提到的資料集和 R 腳本都可以在我的這個專案的GitHub存盤庫中找到。
目標是在 58k 個不同的 csv 檔案格式資料集(都在同一個檔案夾中)上使用 elasticnet 包中的 enet 函式計算 R 中的 LASSO 函式擬合的回歸模型有多少是正確的。通過檢查該資料集的擬合模型中包含的變數是否與它的真實基礎回歸模型(即該資料集)完全匹配來確定所選模型是否正確。這些資料集是使用自定義 Excel 宏生成的,該宏以我知道每個資料集的正確底層結構模型的方式構建(詳細資訊在 ps 部分中進行了解釋)。
我已將 LASSO 為每個資料集選擇的變數(在運行“LASSO 代碼”腳本中的代碼時)匯出到名為“IVs_Selected_by_LASSO”的 csv 檔案中,然后將它們重新匯入名為“量化 LASSO 的性能”的不同 R 腳本中(并在正確排序后將它們分配給一個名為“BM1_models”的物件。
所有擬合的模型都存盤在 BM1_models 物件中,如下所示,其中分號前的 n1-n2-n3-n4s 表示每個 csv 檔案的名稱,它們之后的顯然是 LASSO 回歸運行選擇的模型在該 csv 檔案中的資料集上:
> BM1_models <- read.csv("IVs_Selected_by_LASSO.csv", header = FALSE)
> head(BM1_models, n = 3)
V1
1 0-3-1-1; X1, X2, X3
2 0-3-1-2; X1, X2, X3
3 0-3-1-3; X1, X2, X3
> tail(BM1_models, n = 3)
V1
57998 1-15-9-498; X2, X3, X5, X6, X8, X9, X10, X11, X12, X15
57999 1-15-9-499; X3, X4, X5, X6, X8, X10, X11, X12, X15
58000 1-15-9-500; X2, X4, X6, X7, X8, X10, X11
> str(BM1_models)
'data.frame': 58000 obs. of 1 variable:
$ V1: chr "0-3-1-1; X1, X2, X3" "0-3-1-2; X1, X2, X3" "0-3-1-3; X1, X2, X3" "0-3-1-4; X1, X2, X3" ...
為了記錄,每個分號后面有兩個空格,而不僅僅是一個。
ps 如何判斷 ML 變數/因子選擇方法(在本例中為 LASSO)是否適用于任何給定資料集,如果該資料集的 n2 為 3,則選擇的自變數應為 X1、X2、X3;如果它說 4,則基礎結構模型是 X1、X2、X3、X4,依此類推,直到 X1、X2、X3、X4、X5、X6、X7、X8、X9、X10、X11、X12、X13、X14 , X15 當它說 15。如果選擇的模型是 X1,X3,X4 或當 n2 = 3 時的 X2,X3,X4,或者除 X1,X2,X3 之外的任何其他組合,這是錯誤的,必須準確。
uj5u.com熱心網友回復:
考慮嵌套strsplit然后rbind將向量拆分為資料框:
BM1_models <- read.csv("IVs_Selected_by_LASSO.csv", header = FALSE)
n_df <- do.call(
rbind.data.frame,
lapply(
strsplit(BM1_models$V1, ";"),
function(x) {
s <- strsplit(x, "-")
c(s[[1]], s[[2]])
}
)
) |> setNames(
c("n1", "n2", "n3", "n4", "IV")
)
head(n_df)
# n1 n2 n3 n4 IV
# 1 0 3 1 1 X1, X2, X3
# 2 0 3 1 2 X1, X2, X3
# 3 0 3 1 3 X1, X2, X3
# 4 0 3 1 4 X1, X2, X3
# 5 0 3 1 5 X1, X2, X3
# 6 0 3 1 6 X1, X2, X3
tail(n_df)
# n1 n2 n3 n4 IV
# 57995 1 15 9 495 X2, X3, X4, X5, X7, X9, X10, X11, X12, X13, X15
# 57996 1 15 9 496 X4, X6, X7, X8, X11, X12, X13
# 57997 1 15 9 497 X2, X3, X4, X9, X10, X11, X13, X14
# 57998 1 15 9 498 X2, X3, X5, X6, X8, X9, X10, X11, X12, X15
# 57999 1 15 9 499 X3, X4, X5, X6, X8, X10, X11, X12, X15
# 58000 1 15 9 500 X2, X4, X6, X7, X8, X10, X11
然后根據需要分析或子集回傳:
# TABULATE n2 COLUMN
table(n_df$n2)
# 10 11 12 13 14 15 3 4 5 6 7 8 9
# 4500 4000 4500 4500 4500 4500 4500 4500 4500 4500 4500 4500 4500
# SUBSET TO NEEDED CRITERIA
sub_n_df <- subset(n_df, n2 == "3")
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/511430.html
