我正在通过这篇博客学习新的特征选择方法:
https://www.machinelearningplus.com/machine-learning/feature-selection/
第九点。我偶然发现了一些问题。首先是简历,我已经解决了这个问题。
library(InformationValue)
adult <- read.csv('https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data',
sep = ',', fill = F, strip.white = T,stringsAsFactors = FALSE)
colnames(adult) <- c('age', 'WORKCLASS', 'fnlwgt', 'EDUCATION',
'educatoin_num', 'MARITALSTATUS', 'OCCUPATION', 'RELATIONSHIP', 'RACE', 'SEX',
'capital_gain', 'capital_loss', 'hours_per_week', 'NATIVECOUNTRY', 'ABOVE50K')
inputData <- adult
print(head(inputData))但是我不能解决下一个问题
# Choose Categorical Variables to compute Info Value.
cat_vars <- c ("WORKCLASS", "EDUCATION", "MARITALSTATUS", "OCCUPATION", "RELATIONSHIP", "RACE", "SEX", "NATIVECOUNTRY") # get all categorical variables
# Init Output
df_iv <- data.frame(VARS=cat_vars, IV=numeric(length(cat_vars)), STRENGTH=character(length(cat_vars)), stringsAsFactors = F) # init output dataframe
# Get Information Value for each variable
for (factor_var in factor_vars){
df_iv[df_iv$VARS == factor_var, "IV"] <- InformationValue::IV(X=inputData[, factor_var], Y=inputData$ABOVE50K)
df_iv[df_iv$VARS == factor_var, "STRENGTH"] <- attr(InformationValue::IV(X=inputData[, factor_var], Y=inputData$ABOVE50K), "howgood")
}
# Sort
df_iv <- df_iv[order(-df_iv$IV), ]
df_iv我一直在IV中得到0值,当然,在数据帧的列中也不是预测值。
我试着做一个
factor_vars=cat_vars但它似乎不起作用,坦率地说,我不明白为什么它不起作用。
发布于 2020-07-03 03:16:15
就这么解决了。在第一个例子中,stringsAsFactors = FALSE的参数是不必要的,因为我们需要因子。
然后,参考IV函数并查看数据集的摘要,我注意到,尽管它是函数需要数字输入的一个因素,但该函数无法提取其“值”(level)。所以我们必须绕过它。
as.numeric(inputData$ABOVE50K)“解决它”,尽管也许我应该改变值,因为它给出了1-2而不是经典的0-1响应。我正在努力。
我认为有一个最简单的解决方案,但是:
levels(inputData$ABOVE50K)inputData$ABOVE50K2 = as.numeric(inputData$ABOVE50K)inputData$ABOVE50K3= ifelse(inputData$ABOVE50K2 ==1,0, ifelse(inputData$ABOVE50K2==2,1,NA))inputData$ABOVE50K3 <- factor(inputData$ABOVE50K3)输出也是一样的。因此,不需要将级别更改为0-1。
# Choose Categorical Variables to compute Info Value.
cat_vars <- c ("WORKCLASS", "EDUCATION", "MARITALSTATUS", "OCCUPATION", "RELATIONSHIP", "RACE", "SEX", "NATIVECOUNTRY") # get all categorical variables
factor_vars= cat_vars
# Init Output
df_iv <- data.frame(VARS=cat_vars, IV=numeric(length(cat_vars)), STRENGTH=character(length(cat_vars)), stringsAsFactors = F) # init output dataframe
# Get Information Value for each variable
for (factor_var in factor_vars){
df_iv[df_iv$VARS == factor_var, "IV"] <- InformationValue::IV(X=inputData[, factor_var], Y=inputData$ABOVE50K3)
df_iv[df_iv$VARS == factor_var, "STRENGTH"] <- attr(InformationValue::IV(X=inputData[, factor_var], Y=inputData$ABOVE50K3), "howgood")
}
# Sort
df_iv <- df_iv[order(-df_iv$IV), ]
df_ivhttps://stackoverflow.com/questions/62703119
复制相似问题