目前,很多与数据科学结合的论文,最终的落脚点是“预测模型”。事实上,预测模型这个名字只是一个基于目的的命名,很多模型的用途都可以调整为预测,这是大家的项目需求决定的。现在的科研研究,论文发表都太卷了,人们不禁卷数据量,还要卷“模型的高级程度”,很多人觉得线性模型太普遍了,开始使用一些类似于神经网络这样的比较“新颖”的模型。但不管怎么选择,所有模型的分析套路终究还是一样的,今天的更新,我们就以线性模型和神经网络为例,介绍R代码的实现套路!
1. 概述:流行的预测模型
预测模型是数据科学中用于对未来结果或未知值进行推断的重要工具。随着机器学习和统计学的发展,以下几种预测模型被广泛应用:
线性回归:房价预测、销售额预测。
逻辑回归:是否购买商品、是否患病(分类问题)。
决策树与随机森林:客户流失预测、信用风险评估。
神经网络:图像识别、语音分析、复杂非线性关系预测。
时间序列模型:股票价格预测、流量趋势分析。
2. 线性回归建模流程
# 数据生成
set.seed(123)
n <- 100
x <- runif(n, 0, 10)
y <- 2 * x + rnorm(n, mean = 0, sd = 2)
data <- data.frame(x = x, y = y)
# 绘制散点图
plot(data$x, data$y, main = "Scatterplot of x and y", xlab = "x", ylab = "y", pch = 19)
# 拟合线性回归模型
model <- lm(y ~ x, data = data)
# 显示回归结果
summary(model)
##
## Call:
## lm(formula = y ~ x, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.4759 -1.2265 -0.0395 1.1927 4.4345
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.01792 0.39211 -0.046 0.964
## x 1.98203 0.06836 28.992 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.939 on 98 degrees of freedom
## Multiple R-squared: 0.8956, Adjusted R-squared: 0.8945
## F-statistic: 840.6 on 1 and 98 DF, p-value: < 2.2e-16
# 在散点图上添加回归线
abline(model, col = "blue", lwd = 2)
# 预测新数据
new_data <- data.frame(x = c(5, 7, 9))
predictions <- predict(model, new_data)
print(predictions)
## 1 2 3
## 9.892249 13.856316 17.820384
3. 神经网络建模教程
3.1 数据准备与标准化
library(neuralnet)
# 生成非线性数据
set.seed(123)
n <- 200
x <- runif(n, 0, 10)
y <- 2 * x + sin(x) + rnorm(n, mean = 0, sd = 0.5)
data <- data.frame(x = x, y = y)
# 数据标准化
normalize <- function(v) { (v - min(v)) / (max(v) - min(v)) }
data_norm <- as.data.frame(lapply(data, normalize))
3.2 构建神经网络模型
# 训练神经网络模型
nn_model <- neuralnet(y ~ x, data = data_norm, hidden = c(5, 3), linear.output = TRUE)
3.3 可视化预测结果
# 生成预测数据
x_test <- seq(0, 10, length.out = 100) # 测试数据范围
x_test_norm <- normalize(x_test) # 标准化
test_data <- data.frame(x = x_test_norm)
# 进行预测
predictions <- compute(nn_model, test_data)$net.result
# 反标准化预测结果
denormalize <- function(norm_value, original_vector) {
norm_value * (max(original_vector) - min(original_vector)) + min(original_vector)
}
predictions_denorm <- denormalize(predictions, data$y)
# 可视化实际值与预测值
plot(data$x, data$y, main = "Actual vs Predicted", xlab = "x", ylab = "y", pch = 19, col = "gray")
lines(x_test, predictions_denorm, col = "blue", lwd = 2) # 添加预测曲线
legend("topleft", legend = c("Actual", "Predicted"), col = c("gray", "blue"), pch = c(19, NA), lty = c(NA, 1), lwd = c(NA, 2))
3.4 模型评价
# 计算均方误差(MSE)
actual <- denormalize(data_norm$y, data$y) # 反标准化实际值
predicted_train <- compute(nn_model, data_norm[, "x", drop = FALSE])$net.result
predicted_train_denorm <- denormalize(predicted_train, data$y)
mse <- mean((actual - predicted_train_denorm)^2)
cat("Mean Squared Error (MSE):", mse, "\n")
## Mean Squared Error (MSE): 0.2490889
小结
通过本文的讲解,可以看到预测模型的构建流程通常包括以下步骤:数据准备与探索- 模型选择与训练-模型预测与评价。无论使用何种预测模型,基本套路是一致的。线性回归适合简单关系,神经网络适合复杂场景。大家可以基于本文提供的代码,尝试其他模型(如随机森林、SVM等)进行预测任务,举一反三地解决更广泛的问题。
感谢关注,你的支持是我不懈的动力!