抽查(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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# load the library library(mlbench) # load data data(BostonHousing) # fit model fit <- lm(mdev~>, BostonHousing) # summarize the fit print(fit) # make predictions predictions <- predict(fit, BostonHousing) # summarize accuracy mse <- mean((BostonHousing$medv - predictions)^2) print(mse) # caret # load libraries library(caret) library(mlbench) # load dataset data(BostonHousing) # train set.seed(7) control <- trainControl(method="cv", number=5) fit.lm <- train(medv~., data=BostonHousing, method="lm", metric="RMSE", preProc=c("center", "scale"), trControl=control) # summarize fit print(fit.lm) |
2.罗吉斯回归模型
stat包中glm()函数可以用于拟合广义线性模型。它可以用于拟合处理二元分类问题的罗吉斯回归模型。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# load the library library(mlbench) # Load the dataset data(PimaIndiansDiabetes) # fit model fit <- glm(diabetes~., data=PimaIndiansDiabetes, family=binomial(link='logit')) # summarize the fit print(fit) # make predictions probabilities <- predict(fit, PimaIndiansDiabetes[,1:8], type='response') predictions <- ifelse(probabilities > 0.5,'pos','neg') # summarize accuracy table(predictions, PimaIndiansDiabetes$diabetes) # caret # load libraries library(caret) library(mlbench) # Load the dataset data(PimaIndiansDiabetes) # train set.seed(7) control <- trainControl(method="cv", number=5) fit.glm <- train(diabetes~., data=PimaIndiansDiabetes, method="glm", metric="Accuracy", preProc=c("center", "scale"), trControl=control) # summarize fit print(fit.glm) |
3.线性判别分析
MASS包中的lda()函数可以用于拟合线性判别分析模型。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 m crayon-striped-num" data-line="crayon-5812ac15db67b997939607-20">20 21 22 23 24 1c3a4815eeb8d15c515bebbb02.jpg">
抽查(Spot checking)机器学习算法是指如何找出最适合于给定数据集的算法模型。 适用于你的数据集的最佳算法你无法在建模前就知道哪个算法最适用于你的数据集。 抽查哪些算法?首先,你可以思考哪些算法可能适用于你的数据集。 如何在 R 语言中抽查算法?R 语言中存在数百种可用的机器学习算法。 你需要知道给定算法对应的软件包和函数,同时你还需了解如何利用caret包实现这些常用的算法,从而你可以利用caret包的预处理、算法评估和参数调优的能力高效地评估算法的精度。 本文中将用到两个标准的数据集: 本文中的算法将被分成两组进行介绍: 下文中的所有代码都是完整的,因此你可以将其保存下来并运用到下个机器学习项目中。 线性算法这类方法对模型的函数形式有严格的假设条件,虽然这些方法的运算速度快,但是其结果偏倚较大。
1.线性回归模型stat包中的lm()函数可以利用最小二乘估计拟合线性回归模型。
2.罗吉斯回归模型stat包中glm()函数可以用于拟合广义线性模型。它可以用于拟合处理二元分类问题的罗吉斯回归模型。
3.线性判别分析MASS包中的lda()函数可以用于拟合线性判别分析模型。
|