社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

一篇学会!目前最常用,最全面的机器学习模型代码分享~

作图丫 • 2 周前 • 81 次点击  

最近有小伙伴反映收不到推送,因为公众号改了推送算法,现在需要加星标,多点赞、点在看,才能准时收到推送哦。

导语:以下是在R中实现最常用、最全面的机器学习模型的代码示例,包括数据准备、模型训练、评估和可视化。


北京墨因生物已经与国内50+知名医院的老师或名牌大学实验室合作(协和、哈工大、同济、哈医大等)。欢迎有生信分析需求的老师垂询,公共数据库数据挖掘或自测数据分析均可。

欢迎长期合作
联系请扫描下方二维码


结果解析




01
准备工作

# 安装必要的包(如果尚未安装)install.packages(c("caret""randomForest""glmnet""e1071""xgboost"                   "rpart""kernlab""nnet""pROC""ggplot2"))
# 加载包library(caret)      # 机器学习统一接口library(randomForest) # 随机森林library(glmnet)     # 正则化回归library(e1071)      # SVMlibrary(xgboost)    # XGBoostlibrary(rpart)      # 决策树library(kernlab)    # 其他核方法library(nnet)       # 神经网络library(pROC)       # ROC曲线library(ggplot2)    # 可视化
# 设置随机种子保证可重复性set.seed(123)
# 加载示例数据集(使用内置的iris数据集) data(iris)

02
数据预处理

# 划分训练集和测试集trainIndex 0.7, list = FALSE)trainData testData 
# 标准化数据(对数值变量)preProcValues 5], method = c("center""scale"))trainTransformed testTransformed 
# 查看数据结构str(trainTransformed)

03
逻辑回归(用于分类)

# 训练逻辑回归模型logitModel ~ .,                  data = trainTransformed,                  family = binomial(link = "logit"))
# 多分类逻辑回归multinomModel ~ ., data = trainTransformed)
# 预测logitPred "response")multinomPred
# 评估confusionMatrix(multinomPred, testTransformed$Species)

04
模型代码

#正则化回归(lasso、ridge)# 准备矩阵格式的数据x ~ ., trainTransformed)[, -1]y $Species
# 交叉验证选择最佳lambdacvFit "multinomial", alpha = 1# LASSO (alpha=1)
# 查看结果plot(cvFit)
# 预测ridgePred                     newx = model.matrix(Species ~ ., testTransformed)[, -1],                    s = "lambda.min",                    type = "class")
# 评估confusionMatrix(factor(ridgePred), testTransformed$Species)
# 训练决策树treeModel ~ ., data = trainTransformed, method = "class")
# 可视化决策树plot(treeModel)text(treeModel, use.n = TRUE)
# 预测treePred "class")
# 评估confusionMatrix(treePred, testTransformed$Species)
# 训练随机森林rfModel ~ ., data = trainTransformed, ntree = 500)
# 查看变量重要性varImpPlot(rfModel)
# 预测rfPred
# 评估confusionMatrix(rfPred, testTransformed$Species)
# 训练SVM模型svmModel ~ ., data = trainTransformed, kernel = "radial")
# 预测svmPred
# 评估confusionMatrix(svmPred, testTransformed$Species)
# 使用caret调参svmTune ~ .,                data = trainTransformed,                method = "svmRadial",                tuneLength = 9,                trControl = trainControl(method = "cv"))
# 准备数据trainX ~ ., trainTransformed)[, -1]trainY $Species) - 1testX ~ ., testTransformed)[, -1]
# 训练XGBoost模型xgbModel                    label = trainY,                   nrounds = 100,                   objective = "multi:softprob",                   num_class = length(levels(iris$Species)),                   eval_metric = "mlogloss")
# 预测xgbPred xgbPred $Species)[max.col(xgbPred)]
# 评估confusionMatrix(factor(xgbPred), testTransformed$Species)
# 训练神经网络nnModel                data = trainTransformed,               size = 5,               decay = 0.01,               maxit = 200,               trace = FALSE)
# 预测nnPred "class")
# 评估confusionMatrix(factor(nnPred), testTransformed$Species)
05
模型比较与选择

# 设置训练控制ctrl "cv", number = 5, classProbs = TRUE)
# 比较多个模型modelList   logistic = train(Species ~ ., data = trainTransformed, method = "multinom", trControl = ctrl),  rf = train(Species ~ ., data = trainTransformed, method = "rf", trControl = ctrl),  svm = train(Species ~ ., data = trainTransformed, method = "svmRadial", trControl = ctrl),  xgb = train(Species ~ ., data = trainTransformed, method = "xgbTree", trControl = ctrl))
# 比较模型性能results summary(results)
# 可视化比较dotplot(results)

06
集成学习

# 创建多个基学习器的预测pred1 $logistic, testTransformed, type = "prob")pred2 $rf, testTransformed, type = "prob")pred3 $svm, testTransformed, type = "prob")
# 简单平均集成ensemblePred finalPred
# 评估集成模型confusionMatrix(factor(finalPred), testTransformed$Species) # 模型揭示与可视化# 特征重要性importance $rf)plot(importance)
# ROC曲线(二分类问题示例)rocCurve $Species == "setosa"),               predictor = as.numeric(pred1[, "setosa"]))plot(rocCurve, print.auc = TRUE)
# 决策边界可视化(选择两个特征)ggplot(trainTransformed, aes(x = Sepal.Length, y = Petal.Length, color = Species)) +  geom_point() +  stat_ellipse() +  ggtitle("Feature Space with Decision Boundaries")
小编总结




以上代码使用了iris数据集作为示例,实际应用中应替换为您自己的数据集,对于大数据集,某些模型可能需要较长的训练时间,根据具体问题调整模型参数(如学习率、树的数量、网络结构等),分类和回归问题的代码略有不同,上述示例主要是分类问题,对于回归问题,可以使用method = "lm"method = "gbm"等替代方案。




往期推荐


分析专辑


单细胞scRNA | R包绘图 | 免疫浸润分析 | 肿瘤纯度评估工具 | 数据库


文章解读专辑


多区域进化文章精读 | 高分文章精读 | 免疫微环境文献解读


招聘信息


招聘


点击红字即可进入专栏!


码字不易,欢迎读者分享或转发到朋友圈,任何公众号或其他媒体未经许可不得私自转载或抄袭。
由于微信平台算法改版,公众号内容将不再以时间排序展示,建议设置“作图丫”公众号为星标,防止丢失。星标具体步骤为:
(1)点击页面最上方“作图丫”,进入公众号主页;
(2)点击右上角的小点点,在弹出界面选择“设为星标”即可。


点个在看你最好看


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/185720
 
81 次点击