【R】如何确定最适合数据集的机器学习算法(上)-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 会计>>

会计库

>>

【R】如何确定最适合数据集的机器学习算法(上)

【R】如何确定最适合数据集的机器学习算法(上)

发布:Iris2126 | 分类:会计库

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

经管之家新媒体交易平台

提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

提供微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

抽查(Spotchecking)机器学习算法是指如何找出最适合于给定数据集的算法模型。本文中我将介绍八个常用于抽查的机器学习算法,文中还包括各个算法的R语言代码,你可以将其保存并运用到下一个机器学习项目中。适用于你的 ...
免费学术公开课,扫码加入


抽查(Spot checking)机器学习算法是指如何找出最适合于给定数据集的算法模型。
本文中我将介绍八个常用于抽查的机器学习算法,文中还包括各个算法的 R 语言代码,你可以将其保存并运用到下一个机器学习项目中。


适用于你的数据集的最佳算法

你无法在建模前就知道哪个算法最适用于你的数据集。
你必须通过反复试验的方法来寻找出可以解决你的问题的最佳算法,我称这个过程为 spot checking。
我们所遇到的问题不是我应该采用哪个算法来处理我的数据集?,而是我应该抽查哪些算法来处理我的数据集?



抽查哪些算法?

首先,你可以思考哪些算法可能适用于你的数据集。
其次,我建议尽可能地尝试混合算法并观察哪个方法最适用于你的数据集。


  • 尝试混合算法(如事件模型和树模型)
  • 尝试混合不同的学习算法(如处理相同类型数据的不同算法)
  • 尝试混合不同类型的模型(如线性和非线性函数或者参数和非参数模型)

让我们具体看下如何实现这几个想法。下一章中我们将看到如何在 R 语言中实现相应的机器学习算法。



如何在 R 语言中抽查算法?

R 语言中存在数百种可用的机器学习算法。
如果你的项目要求较高的预测精度且你有充足的时间,我建议你可以在实践过程中尽可能多地探索不同的算法。
通常情况下,我们没有太多的时间用于测试,因此我们需要了解一些常用且重要的算法。


本章中你将会接触到一些 R 语言中经常用于抽查处理的线性和非线性算法,但是其中并不包括类似于boosting和bagging的集成算法。

每个算法都会从两个视角进行呈现:

1.常规的训练和预测方法
2.caret包的用法


你需要知道给定算法对应的软件包和函数,同时你还需了解如何利用caret包实现这些常用的算法,从而你可以利用caret包的预处理、算法评估和参数调优的能力高效地评估算法的精度。

本文中将用到两个标准的数据集:

1.回归模型:BHD(Boston Housing Dataset)
2.分类模型: PIDD(Pima Indians Diabetes Dataset)


本文中的算法将被分成两组进行介绍:

1.线性算法:简单、较大的偏倚、运算速度快
2.非线性算法:复杂、较大的方差、高精确度

下文中的所有代码都是完整的,因此你可以将其保存下来并运用到下个机器学习项目中。



线性算法

这类方法对模型的函数形式有严格的假设条件,虽然这些方法的运算速度快,但是其结果偏倚较大。
这类模型的最终结果通常易于解读,因此如果线性模型的结果足够精确,那么你没有必要采用较为复杂的非线性模型。



1.线性回归模型

stat包中的lm()函数可以利用最小二乘估计拟合线性回归模型。

  1. # load the library
  2. library(mlbench)
  3. # load data
  4. data(BostonHousing)
  5. # fit model
  6. fit <- lm(mdev~>, BostonHousing)
  7. # summarize the fit
  8. print(fit)
  9. # make predictions
  10. predictions <- predict(fit, BostonHousing)
  11. # summarize accuracy
  12. mse <- mean((BostonHousing$medv - predictions)^2)
  13. print(mse)

  14. # caret
  15. # load libraries
  16. library(caret)
  17. library(mlbench)
  18. # load dataset
  19. data(BostonHousing)
  20. # train
  21. set.seed(7)
  22. control <- trainControl(method="cv", number=5)
  23. fit.lm <- train(medv~., data=BostonHousing, method="lm", metric="RMSE", preProc=c("center", "scale"), trControl=control)
  24. # summarize fit
  25. print(fit.lm)
复制代码
2.罗吉斯回归模型

stat包中glm()函数可以用于拟合广义线性模型。它可以用于拟合处理二元分类问题的罗吉斯回归模型。

  1. # load the library
  2. library(mlbench)
  3. # Load the dataset
  4. data(PimaIndiansDiabetes)
  5. # fit model
  6. fit <- glm(diabetes~., data=PimaIndiansDiabetes, family=binomial(link='logit'))
  7. # summarize the fit
  8. print(fit)
  9. # make predictions
  10. probabilities <- predict(fit, PimaIndiansDiabetes[,1:8], type='response')
  11. predictions <- ifelse(probabilities > 0.5,'pos','neg')
  12. # summarize accuracy
  13. table(predictions, PimaIndiansDiabetes$diabetes)

  14. # caret
  15. # load libraries
  16. library(caret)
  17. library(mlbench)
  18. # Load the dataset
  19. data(PimaIndiansDiabetes)
  20. # train
  21. set.seed(7)
  22. control <- trainControl(method="cv", number=5)
  23. fit.glm <- train(diabetes~., data=PimaIndiansDiabetes, method="glm", metric="Accuracy", preProc=c("center", "scale"), trControl=control)
  24. # summarize fit
  25. print(fit.glm)
复制代码
3.线性判别分析

MASS包中的lda()函数可以用于拟合线性判别分析模型。

  1. # load the libraries
  2. library(MASS)
  3. library(mlbench)
  4. # Load the dataset
  5. data(PimaIndiansDiabetes)
  6. # fit model
  7. fit <- lda(diabetes~., data=PimaIndiansDiabetes)
  8. # summarize the fit
  9. print(fit)
  10. # make predictions
  11. predictions <- predict(fit, PimaIndiansDiabetes[,1:8])$class
  12. # summarize accuracy
  13. table(predictions, PimaIndiansDiabetes$diabetes)

  14. # caret
  15. # load libraries
  16. library(caret)
  17. library(mlbench)
  18. # Load the dataset
  19. data(PimaIndiansDiabetes)
  20. # train
  21. set.seed(7)
  22. control <- trainControl(method="cv", number=5)
  23. fit.lda <- train(diabetes~., data=PimaIndiansDiabetes, method="lda", metric="Accuracy", preProc=c("center", "scale"), trControl=control)
  24. # summarize fit
  25. print(fit.lda)
复制代码
4.正则化回归

glmnet包中的glmnet()函数可以用于拟合正则化分类或回归模型。
分类模型:

  1. # load the library
  2. library(glmnet)
  3. library(mlbench)
  4. # load data
  5. data(PimaIndiansDiabetes)
  6. x <- as.matrix(PimaIndiansDiabetes[,1:8])
  7. y <- as.matrix(PimaIndiansDiabetes[,9])
  8. # fit model
  9. fit <- glmnet(x, y, family="binomial", alpha=0.5, lambda=0.001)
  10. # summarize the fit
  11. print(fit)
  12. # make predictions
  13. predictions <- predict(fit, x, type="class")
  14. # summarize accuracy
  15. table(predictions, PimaIndiansDiabetes$diabetes)

  16. # caret
  17. # load libraries
  18. library(caret)
  19. library(mlbench)
  20. library(glmnet)
  21. # Load the dataset
  22. data(PimaIndiansDiabetes)
  23. # train
  24. set.seed(7)
  25. control <- trainControl(method="cv", number=5)
  26. fit.glmnet <- train(diabetes~., data=PimaIndiansDiabetes, method="glmnet", metric="Accuracy", preProc=c("center", "scale"), trControl=control)
  27. # summarize fit
  28. print(fit.glmnet)
复制代码

回归模型:

  1. # load the libraries
  2. library(glmnet)
  3. library(mlbench)
  4. # load data
  5. data(BostonHousing)
  6. BostonHousing$chas <- as.numeric(as.character(BostonHousing$chas))
  7. x <- as.matrix(BostonHousing[,1:13])
  8. y <- as.matrix(BostonHousing[,14])
  9. # fit model
  10. fit <- glmnet(x, y, family="gaussian", alpha=0.5, lambda=0.001)
  11. # summarize the fit
  12. print(fit)
  13. # make predictions
  14. predictions <- predict(fit, x, type="link")
  15. # summarize accuracy
  16. mse <- mean((y - predictions)^2)
  17. print(mse)

  18. # caret
  19. # load libraries
  20. library(caret)
  21. library(mlbench)
  22. library(glmnet)
  23. # Load the dataset
  24. data(BostonHousing)
  25. # train
  26. set.seed(7)
  27. control <- trainControl(method="cv", number=5)
  28. fit.glmnet <- train(medv~., data=BostonHousing, method="glmnet", metric="RMSE", preProc=c("center", "scale"), trControl=control)
  29. # summarize fit
  30. print(fit.glmnet)
复制代码
后文将为您介绍其余四种算法 请点击【R】如何确定最适合数据集的机器学习算法(下)
「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-4439643-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。