在Caret中调整PCA阈值

我正在尝试使用caret从一些数据中构建一个分类器。我想尝试的方法之一是从用PCA预处理的数据中进行简单的LDA。我发现如何使用caret来实现这一点:

fitControl <- trainControl("repeatedcv", number=10, repeats = 10,                                preProcOptions = list(thresh = 0.9))ldaFit1 <- train(label ~ ., data = tab,                method = "lda2",                preProcess = c("center", "scale", "pca"),                trControl = fitControl)

正如预期的那样,caret正在比较不同维度值的LDA的准确性:

Linear Discriminant Analysis 158 samples1955 predictors   3 classes: '1', '2', '3'Pre-processing: centered (1955), scaled (1955), principal component signal extraction (1955)Resampling: Cross-Validated (10 fold, repeated 10 times)Summary of sample sizes: 142, 142, 143, 142, 143, 142, ...Resampling results across tuning parameters:  dimen  Accuracy   Kappa  1      0.5498987  0.1151681  2      0.5451340  0.1298590Accuracy was used to select the optimal model using the largest value.The final value used for the model was dimen = 1.

我想做的是将PCA阈值添加到调整参数中,但我找不到这样做的方法。

caret中是否有简单的方法来解决这个问题?还是需要用不同的预处理选项重复训练步骤,最后选择最佳值?


回答:

多亏了@人名指出的链接,我设法将PCA的解释方差阈值集成到参数调整中:

library(caret)library(recipes)library(MASS)# 设置要尝试的阈值向量pca_varex <- c(0.8, 0.9, 0.95, 0.97, 0.98, 0.99, 0.995, 0.999)# 设置配方initial_recipe <- recipe(train, formula = label ~ .) %>%                    step_center(all_predictors()) %>%                    step_scale(all_predictors())# 定义模型网格models <- model_grid() %>%            share_settings(data = train,                            trControl = caret::trainControl(method = "repeatedcv",                                                        number = 10,                                                        repeats = 10),                            method = "lda2") # 添加具有不同PCA阈值的模型for (i in pca_varex) {    models <- models %>% add_model(model_name = sprintf("varex_%s", i),                                    x = initial_recipe %>%                                        step_pca(all_predictors(), threshold = i))}# 训练模型models <- models %>% train(.)

虽然查看了modelgrid和recipes的文档,tidymodels包可能是最直接的方式(https://www.tidymodels.org/)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注