列名与拟合regsubsets选择最佳变量不同

我正在尝试从regsubsets中获取重要变量(列名)。我想一个一个地获取这些重要变量,以便进行分析。以下是程序代码:

library(leaps)library(ISLR)data(Hitters)reg_fit=regsubsets(Salary~., data = Hitters, nvmax = 10, method = "forward")

问题是reg_fit中的列名与数据集Hitters中的列名不一致。

这是原始数据的输出:

names(Hitters)##  [1] "AtBat"     "Hits"      "HmRun"     "Runs"      "RBI"      ##  [6] "Walks"     "Years"     "CAtBat"    "CHits"     "CHmRun"   ## [11] "CRuns"     "CRBI"      "CWalks"    "League"    "Division" ## [16] "PutOuts"   "Assists"   "Errors"    "Salary"    "NewLeague"

这是从reg_fit中提取的输出:

colnames(summary(reg_fit)$which)##  [1] "(Intercept)" "AtBat"       "Hits"        "HmRun"       "Runs"       ##  [6] "RBI"         "Walks"       "Years"       "CAtBat"      "CHits"      ## [11] "CHmRun"      "CRuns"       "CRBI"        "CWalks"      "LeagueN"    ## [16] "DivisionW"   "PutOuts"     "Assists"     "Errors"      "NewLeagueN"

请注意,League变为了LeagueN,Division变为了DivisionW。有什么想法吗?这是不是一个bug,或者有没有简单的方法从reg_fit中获取列名?


回答:

这不是一个bug。这是将分类变量分解成指示变量,以便在回归中使用,而名称的变化是它让你知道哪个级别被分配给指示变量的正级别的方式。

如果你想避免这种情况,可以通过预处理来实现。以下是针对变量League的一个示例:

League <- rep(0,322)League[Hitters$League == "N"] <- 1Hitters$League <- as.numeric(as.character(League))reg_fit=regsubsets(Salary~., data = Hitters, nvmax = 10, method = "forward")colnames(summary(reg_fit)$which)

在上面的示例中,我创建了一个数值变量,当League等于N时该变量等于1,并用它替换了Leaguefactor变量版本。

对于二元因子变量,你可以在运行回归后更改结果对象中的标签,但如果有超过两个级别,这种方法就不适用了。对于多类因子变量,你需要在原始数据集中创建多个指示变量,就像我在上面的示例中所做的那样。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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