R3.6.3版本中ElemStatLearn包不可用,求替代包实现相同可视化
没问题!ElemStatLearn包确实因为版本兼容问题,在R 3.6.3这类稍旧的版本里很难安装,但咱们完全有办法绕开它,实现你要的逻辑回归预测和可视化效果,甚至不需要依赖这个难装的包。
1. 逻辑回归模型的替代(完全用基础R)
首先,你之前用ElemStatLearn训练的逻辑回归模型,完全可以用R基础包的glm()函数替代——这是R原生的逻辑回归实现,稳定且在所有R版本里都能直接使用:
# 假设你的训练集是train_set,第三列是二元响应变量(比如Purchased) classifier <- glm(formula = Purchased ~ ., data = train_set, family = binomial)
用这个代码训练出来的模型,和ElemStatLearn里的逻辑回归效果完全一致,后续的预测代码也不需要修改。
2. 可视化的两种实现方式
你原来的可视化代码其实根本没用到ElemStatLearn包的功能——所有绘图相关的函数(seq()、expand.grid()、plot()、contour()等)都是R基础包自带的!所以最简单的方法就是直接去掉加载ElemStatLearn的代码,就能正常生成你要的图:
方案1:基础R原生实现(和原代码几乎一致)
# Predict the test set results(这部分和你原来的代码完全一样) prob_pred = predict(classifier, type = 'response', newdata = test_set[-3]) y_pred = ifelse(prob_pred>0.5, 1, 0) # Visualising the Test set results(去掉ElemStatLearn相关代码即可) set = test_set X1 = seq(min(set[, 1]) - 1, max(set[, 1]) + 1, by = 0.01) X2 = seq(min(set[, 2]) - 1, max(set[, 2]) + 1, by = 0.01) grid_set = expand.grid(X1, X2) colnames(grid_set) = c('Age', 'EstimatedSalary') prob_set = predict(classifier, type = 'response', newdata = grid_set) y_grid = ifelse(prob_set > 0.5, 1, 0) # 绘制可视化图 plot(set[, -3], main = 'Logistic Regression (Test set)', xlab = 'Age', ylab = 'Estimated Salary', xlim = range(X1), ylim = range(X2)) contour(X1, X2, matrix(as.numeric(y_grid), length(X1), length(X2)), add = TRUE) points(grid_set, pch = '.', col = ifelse(y_grid == 1, 'springgreen3', 'tomato')) points(set, pch = 21, bg = ifelse(set[, 3] == 1, 'green4', 'red3'))
这段代码在R 3.6.3里能完美运行,生成的图和你期望的完全一致。
方案2:用ggplot2实现(更美观,代码更清晰)
如果你想要更现代、美观的可视化效果,可以用ggplot2包——这个包在R 3.6.3里可以正常从CRAN安装,是数据可视化的常用工具:
# 先安装并加载ggplot2(如果没装过) install.packages("ggplot2") library(ggplot2) # 预测部分和之前一致 prob_pred = predict(classifier, type = 'response', newdata = test_set[-3]) y_pred = ifelse(prob_pred>0.5, 1, 0) # 准备可视化数据 set = test_set X1 = seq(min(set[, 1]) - 1, max(set[, 1]) + 1, by = 0.01) X2 = seq(min(set[, 2]) - 1, max(set[, 2]) + 1, by = 0.01) grid_set = expand.grid(X1, X2) colnames(grid_set) = c('Age', 'EstimatedSalary') prob_set = predict(classifier, type = 'response', newdata = grid_set) y_grid = ifelse(prob_set > 0.5, 1, 0) grid_set$y_grid = factor(y_grid) set_df = as.data.frame(set) set_df$Purchased = factor(set_df$Purchased) # 绘制ggplot版本的可视化 ggplot() + # 绘制分类背景区域 geom_tile(data = grid_set, aes(x = Age, y = EstimatedSalary, fill = y_grid), alpha = 0.3) + # 绘制测试集实际样本点 geom_point(data = set_df, aes(x = Age, y = EstimatedSalary, fill = Purchased), shape = 21, size = 3) + # 添加决策边界 stat_contour(data = grid_set, aes(x = Age, y = EstimatedSalary, z = as.numeric(y_grid)-1), breaks = 0, color = "black", size = 1) + # 设置标题和标签 labs(title = 'Logistic Regression (Test set)', x = 'Age', y = 'Estimated Salary', fill = 'Purchased') + # 设置颜色匹配原风格 scale_fill_manual(values = c('tomato', 'springgreen3')) + theme_minimal()
这个版本的图和你需求的核心逻辑一致,还能获得更整洁的样式和更灵活的自定义空间。
总结
- 不需要依赖ElemStatLearn包,基础R就能完成所有需求;
- 如果想要更美观的可视化,ggplot2是稳定且易获取的替代选择;
- 逻辑回归模型用原生的
glm()完全替代,效果一致。
内容的提问来源于stack exchange,提问作者Swapnil Kulkarni
相关产品推荐
相关产品推荐

