第100+41步 ChatGPT学习:R语言实现误判病例分析

本期是《第33步 机器学习分类实战:误判病例分析》的R版本。

尝试使用Deepseek-R1来试试写代码,效果还不错。

下面上R语言代码,以Xgboost为例:

python 复制代码
# 加载必要的库
library(caret)
library(pROC)
library(ggplot2)
library(xgboost)

# 假设 'data' 是包含数据的数据框
# 设置随机种子以确保结果可重复
set.seed(123)

# 将数据分为训练集和验证集(80% 训练集,20% 验证集)
trainIndex <- createDataPartition(data$X, p = 0.8, list = FALSE)
trainData <- data[trainIndex, ]
validData <- data[-trainIndex, ]

# 为 XGBoost 准备数据矩阵
dtrain <- xgb.DMatrix(data = as.matrix(trainData[, -which(names(trainData) == "X")]), label = trainData$X)
dvalid <- xgb.DMatrix(data = as.matrix(validData[, -which(names(validData) == "X")]), label = validData$X)

# 定义 XGBoost 的参数
params <- list(booster = "gbtree", 
               objective = "binary:logistic", 
               eta = 0.1, 
               gamma = 0, 
               max_depth = 6, 
               min_child_weight = 1, 
               subsample = 0.5, 
               colsample_bytree = 0.9,
               lambda = 10,
               alpha = 5,
               eval_metric = "logloss")  # 使用 logloss 作为评估指标

# 训练 XGBoost 模型,并加入早停法
model <- xgb.train(params = params, 
                   data = dtrain, 
                   nrounds = 250, 
                   watchlist = list(train = dtrain, eval = dvalid),  # 监控训练集和验证集
                   early_stopping_rounds = 10,  # 如果验证集性能在 10 轮内没有提升,则停止训练
                   verbose = 1)

# 对训练集和验证集进行预测
trainPredict <- predict(model, dtrain)
validPredict <- predict(model, dvalid)

# 将概率值转换为二分类预测结果(默认阈值为 0.5)
trainPredictBinary <- ifelse(trainPredict > 0.5, 1, 0)
validPredictBinary <- ifelse(validPredict > 0.5, 1, 0)

# 提取正常分类和误判样本
# 训练集
trainResults <- trainData
trainResults$Predicted <- trainPredictBinary  # 添加预测结果列
trainResults$Actual <- trainData$X  # 添加真实标签列
trainResults$Status <- ifelse(trainResults$Predicted == trainResults$Actual, "Correct", "Misclassified")  # 添加分类状态列

# 验证集
validResults <- validData
validResults$Predicted <- validPredictBinary  # 添加预测结果列
validResults$Actual <- validData$X  # 添加真实标签列
validResults$Status <- ifelse(validResults$Predicted == validResults$Actual, "Correct", "Misclassified")  # 添加分类状态列

# 分离正常分类和误判样本
trainCorrect <- trainResults[trainResults$Status == "Correct", ]
trainMisclassified <- trainResults[trainResults$Status == "Misclassified", ]

validCorrect <- validResults[validResults$Status == "Correct", ]
validMisclassified <- validResults[validResults$Status == "Misclassified", ]

# 输出正常分类和误判样本
print("训练集中的正常分类样本:")
print(trainCorrect)

print("训练集中的误判样本:")
print(trainMisclassified)

print("验证集中的正常分类样本:")
print(validCorrect)

print("验证集中的误判样本:")
print(validMisclassified)

# 将结果保存到文件(可选)
write.csv(trainCorrect, file = "train_correct.csv", row.names = FALSE)
write.csv(trainMisclassified, file = "train_misclassified.csv", row.names = FALSE)
write.csv(validCorrect, file = "valid_correct.csv", row.names = FALSE)
write.csv(validMisclassified, file = "valid_misclassified.csv", row.names = FALSE)

简单解说:

(A)最终结果输出成excel查看,输出地址就是你的工作路径,不懂的话可以使用代码 getwd() 展示出来。

(B)打开工作路径,可以发现四个文件,分别对应混淆矩阵的四个数字:

(C)题外话:Deepseek-R1-0528 改改代码感觉可以跟GPT类似了,平替的好手。

相关推荐
QY_Research_24 分钟前
2026房地产NFT平台创业机遇与落地指南分析报告
大数据·人工智能·物联网·机器人·制造
机器人零零壹2 小时前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
电子元件小说家3 小时前
2026年四季度电感市场观察:AI算力与汽车电子驱动下的选型与验证建议智能硬件
人工智能·汽车
网易CodeWave-小码哥3 小时前
支持多模块 Java 微服务导入|CodeWave SDD V4.5.10 上线
人工智能
AI你一生一世3 小时前
不止于时序存储:DolphinDB 如何成为 AI 时代的工业智能底座
java·人工智能·struts·时序数据库·工业智能·dolphindb·ai基础设施
belldeep3 小时前
python:genesis-world, Genesis-Embodied-AI
人工智能·python·ai·genesis
怕浪猫3 小时前
小程序成长计划上新:10 亿 Token 现在能调 DeepSeek-v4.1-flash了
人工智能·aigc·ai编程
ss2733 小时前
为什么PostgreSQL适合AI场景?
数据库·人工智能·postgresql
七牛云行业应用4 小时前
DeepSeek Super-agent 与 Grok Bot:开源 Agent 架构和聊天助手有何区别
人工智能·ai·架构·ai编程
维克兜率天4 小时前
【维克】趋势型CTA:期货市场的“追涨杀跌“
人工智能·python