You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 12:13:11