Machine-Learning-Mastery-R-机器学习教程-四-

139 阅读22分钟

Machine Learning Mastery R 机器学习教程(四)

原文:Machine Learning Mastery

协议:CC BY-NC-SA 4.0

抽查 R 中的机器学习算法(下一个项目要尝试的算法)

原文:machinelearningmastery.com/spot-check-…

最后更新于 2019 年 8 月 22 日

抽查机器学习算法是如何为数据集找到最佳算法的。

但是应该抽查哪些算法呢?

在这篇文章中,你发现了 8 个机器学习算法,你应该抽查你的数据。

您还可以获得每种算法的配方,您可以将其复制并粘贴到当前或下一个机器学习项目中。

用我的新书用 R 启动你的项目,包括一步一步的教程和所有例子的 R 源代码文件。

我们开始吧。

Spot Check Machine Learning Algorithms in R

核管理委员会抽查 R 图片中的机器学习算法,保留部分权利。

数据集的最佳算法

在手之前,您无法知道哪种算法最适合您的数据集。

您必须使用反复试验来发现一个在您的问题上做得很好的算法的简短列表,然后您可以加倍并进一步调整。我称这个过程为抽查。

问题不在于:

我应该在数据集上使用什么算法?

相反,它是:

我应该在数据集上抽查哪些算法?

要抽查哪些算法

您可以猜测哪些算法可能在您的数据集上表现良好,这可能是一个很好的起点。

我建议尝试混合算法,看看什么最擅长挑选数据中的结构。

  • 尝试混合算法表示(例如实例和树)。
  • 尝试混合学习算法(例如,学习同一类型表示的不同算法)。
  • 尝试混合建模类型(例如,线性和非线性函数或参数和非参数)。

具体点说吧。在下一节中,我们将寻找算法,您可以使用这些算法来抽查您在 r

R 中抽查的算法

r 中有数百种机器学习算法可用。

我建议探索其中的许多,特别是如果对数据集做出准确的预测很重要并且你有时间的话。

通常你没有时间,所以你需要知道几个算法,你绝对必须测试你的问题。

在这一节中,你将发现你应该在 r 中抽查的线性和非线性算法。这不包括集成算法,如增强和装袋,一旦你有了基线,它们就会出现。

每种算法将从两个角度呈现:

  1. 用于训练和预测算法的包和函数。
  2. 算法的 Caret 包装。

对于给定的算法,您需要知道使用哪个包和函数。在以下情况下需要这样做:

  • 您正在研究算法参数以及如何从算法中获得最大收益。
  • 你已经发现了使用的最佳算法,需要准备一个最终模型。

您需要知道如何将每个算法与 Caret 一起使用,这样您就可以使用 Caret 的预处理、算法评估和调整功能,在看不见的数据上有效地评估计法的准确性。

两个标准数据集用于演示算法:

  • 波士顿房屋数据集用于回归(波士顿房屋来自 mlbench 库)。
  • 皮马印第安人糖尿病数据集进行分类(皮马糖尿病患者来自 mlbench 库)。

算法分为两组:

  • 线性算法是更简单的方法,具有很强的偏差,但训练速度很快。
  • 非线性算法是更复杂的方法,具有较大的方差,但通常更准确。

本节中介绍的每个秘籍都是完整的,并将产生一个结果,以便您可以将其复制并粘贴到当前或下一个机器学习项目中。

我们开始吧。

线性算法

这些方法对被建模函数的形式做了大量假设。因此,他们有很高的偏见,但往往训练速度很快。

最终模型通常也很容易(或更容易)解释,这使得它们作为最终模型很受欢迎。如果结果适当准确,如果是线性算法,您可能不需要继续使用非线性方法。

1.线性回归

lm() 函数位于统计库中,使用普通最小二乘法创建线性回归模型。

# load the library
library(mlbench)
# load data
data(BostonHousing)
# fit model
fit <- lm(medv~., BostonHousing)
# summarize the fit
print(fit)
# make predictions
predictions <- predict(fit, BostonHousing)
# summarize accuracy
mse <- mean((BostonHousing$medv - predictions)²)
print(mse)

lm 实现可以在 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.逻辑回归

glm 函数位于 stats 库中,它创建了一个广义线性模型。它可以配置为执行适合二分类问题的逻辑回归。

# 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)

glm 算法可用于 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.线性判别分析

lda 函数在 MASS 库中,它创建了一个分类问题的线性模型。

# load the libraries
library(MASS)
library(mlbench)
# Load the dataset
data(PimaIndiansDiabetes)
# fit model
fit <- lda(diabetes~., data=PimaIndiansDiabetes)
# summarize the fit
print(fit)
# make predictions
predictions <- predict(fit, PimaIndiansDiabetes[,1:8])$class
# summarize accuracy
table(predictions, PimaIndiansDiabetes$diabetes)

lda 算法可用于 Caret,如下所示:

# load libraries
library(caret)
library(mlbench)
# Load the dataset
data(PimaIndiansDiabetes)
# train
set.seed(7)
control <- trainControl(method="cv", number=5)
fit.lda <- train(diabetes~., data=PimaIndiansDiabetes, method="lda", metric="Accuracy", preProc=c("center", "scale"), trControl=control)
# summarize fit
print(fit.lda)
4.正则回归

glmnet 函数位于 glmnet 库中,可用于分类或回归。

分类示例:

# load the library
library(glmnet)
library(mlbench)
# load data
data(PimaIndiansDiabetes)
x <- as.matrix(PimaIndiansDiabetes[,1:8])
y <- as.matrix(PimaIndiansDiabetes[,9])
# fit model
fit <- glmnet(x, y, family="binomial", alpha=0.5, lambda=0.001)
# summarize the fit
print(fit)
# make predictions
predictions <- predict(fit, x, type="class")
# summarize accuracy
table(predictions, PimaIndiansDiabetes$diabetes)

回归示例:

# load the libraries
library(glmnet)
library(mlbench)
# load data
data(BostonHousing)
BostonHousing$chas <- as.numeric(as.character(BostonHousing$chas))
x <- as.matrix(BostonHousing[,1:13])
y <- as.matrix(BostonHousing[,14])
# fit model
fit <- glmnet(x, y, family="gaussian", alpha=0.5, lambda=0.001)
# summarize the fit
print(fit)
# make predictions
predictions <- predict(fit, x, type="link")
# summarize accuracy
mse <- mean((y - predictions)²)
print(mse)

它还可以配置为执行三种重要类型的正则化:套索、脊和弹性网,方法是将 alpha 参数分别配置为 1、0 或 in [0,1]。

glmnet 实现可以在 Caret 中用于分类,如下所示:

# load libraries
library(caret)
library(mlbench)
library(glmnet)
# Load the dataset
data(PimaIndiansDiabetes)
# train
set.seed(7)
control <- trainControl(method="cv", number=5)
fit.glmnet <- train(diabetes~., data=PimaIndiansDiabetes, method="glmnet", metric="Accuracy", preProc=c("center", "scale"), trControl=control)
# summarize fit
print(fit.glmnet)

glmnet 实现可以在 caret 中用于回归,如下所示:

# load libraries
library(caret)
library(mlbench)
library(glmnet)
# Load the dataset
data(BostonHousing)
# train
set.seed(7)
control <- trainControl(method="cv", number=5)
fit.glmnet <- train(medv~., data=BostonHousing, method="glmnet", metric="RMSE", preProc=c("center", "scale"), trControl=control)
# summarize fit
print(fit.glmnet)

非线性算法

这些是机器学习算法,对被建模的函数做较少的假设。因此,它们具有更高的方差,但通常导致更高的准确率。他们增加的灵活性也会使他们训练更慢或者增加他们的记忆需求。

1.k-最近邻

knn3 函数在 caret 库中,不创建模型,而是直接从训练集中进行预测。它可以用于分类或回归。

分类示例:

# knn direct classification

# load the libraries
library(caret)
library(mlbench)
# Load the dataset
data(PimaIndiansDiabetes)
# fit model
fit <- knn3(diabetes~., data=PimaIndiansDiabetes, k=3)
# summarize the fit
print(fit)
# make predictions
predictions <- predict(fit, PimaIndiansDiabetes[,1:8], type="class")
# summarize accuracy
table(predictions, PimaIndiansDiabetes$diabetes)

回归示例:

# load the libraries
library(caret)
library(mlbench)
# load data
data(BostonHousing)
BostonHousing$chas <- as.numeric(as.character(BostonHousing$chas))
x <- as.matrix(BostonHousing[,1:13])
y <- as.matrix(BostonHousing[,14])
# fit model
fit <- knnreg(x, y, k=3)
# summarize the fit
print(fit)
# make predictions
predictions <- predict(fit, x)
# summarize accuracy
mse <- mean((BostonHousing$medv - predictions)²)
print(mse)

knn 实现可以在 caret train()函数中用于分类,如下所示:

# load libraries
library(caret)
library(mlbench)
# Load the dataset
data(PimaIndiansDiabetes)
# train
set.seed(7)
control <- trainControl(method="cv", number=5)
fit.knn <- train(diabetes~., data=PimaIndiansDiabetes, method="knn", metric="Accuracy", preProc=c("center", "scale"), trControl=control)
# summarize fit
print(fit.knn)

knn 实现可以在 caret train()函数中用于回归,如下所示:

# load libraries
library(caret)
data(BostonHousing)
# Load the dataset
data(BostonHousing)
# train
set.seed(7)
control <- trainControl(method="cv", number=5)
fit.knn <- train(medv~., data=BostonHousing, method="knn", metric="RMSE", preProc=c("center", "scale"), trControl=control)
# summarize fit
print(fit.knn)
2.朴素贝叶斯

天真贝叶斯函数在 e1071 库中,它独立地对每个属性到结果变量的概率进行建模。它可以用于分类问题。

# load the libraries
library(e1071)
library(mlbench)
# Load the dataset
data(PimaIndiansDiabetes)
# fit model
fit <- naiveBayes(diabetes~., data=PimaIndiansDiabetes)
# summarize the fit
print(fit)
# make predictions
predictions <- predict(fit, PimaIndiansDiabetes[,1:8])
# summarize accuracy
table(predictions, PimaIndiansDiabetes$diabetes)

一个非常相似的朴素贝叶斯实现(来自 klaR 库的朴素贝叶斯)可以如下使用 Caret:

# load libraries
library(caret)
library(mlbench)
# Load the dataset
data(PimaIndiansDiabetes)
# train
set.seed(7)
control <- trainControl(method="cv", number=5)
fit.nb <- train(diabetes~., data=PimaIndiansDiabetes, method="nb", metric="Accuracy", trControl=control)
# summarize fit
print(fit.nb)
3.支持向量机

ksvm 函数在 kernlab 包中,可用于分类或回归。它是 LIBSVM 库的包装器,并提供了一套内核类型和配置选项。

这些示例使用径向基核。

分类示例:

 load the libraries
library(kernlab)
library(mlbench)
# Load the dataset
data(PimaIndiansDiabetes)
# fit model
fit <- ksvm(diabetes~., data=PimaIndiansDiabetes, kernel="rbfdot")
# summarize the fit
print(fit)
# make predictions
predictions <- predict(fit, PimaIndiansDiabetes[,1:8], type="response")
# summarize accuracy
table(predictions, PimaIndiansDiabetes$diabetes)

回归示例:

# load the libraries
library(kernlab)
library(mlbench)
# load data
data(BostonHousing)
# fit model
fit <- ksvm(medv~., BostonHousing, kernel="rbfdot")
# summarize the fit
print(fit)
# make predictions
predictions <- predict(fit, BostonHousing)
# summarize accuracy
mse <- mean((BostonHousing$medv - predictions)²)
print(mse)

带有径向基核的 SVM 实现可以与 Caret 一起使用进行分类,如下所示:

# load libraries
library(caret)
library(mlbench)
# Load the dataset
data(PimaIndiansDiabetes)
# train
set.seed(7)
control <- trainControl(method="cv", number=5)
fit.svmRadial <- train(diabetes~., data=PimaIndiansDiabetes, method="svmRadial", metric="Accuracy", trControl=control)
# summarize fit
print(fit.svmRadial)

带有径向基核的 SVM 实现可以与 Caret 一起用于回归,如下所示:

# load libraries
library(caret)
library(mlbench)
# Load the dataset
data(BostonHousing)
# train
set.seed(7)
control <- trainControl(method="cv", number=5)
fit.svmRadial <- train(medv~., data=BostonHousing, method="svmRadial", metric="RMSE", trControl=control)
# summarize fit
print(fit.svmRadial)
4.分类和回归树

rpart 库中的 rpart 函数为分类和回归提供了一个 CART 的实现。

分类示例:

# load the libraries
library(rpart)
library(mlbench)
# Load the dataset
data(PimaIndiansDiabetes)
# fit model
fit <- rpart(diabetes~., data=PimaIndiansDiabetes)
# summarize the fit
print(fit)
# make predictions
predictions <- predict(fit, PimaIndiansDiabetes[,1:8], type="class")
# summarize accuracy
table(predictions, PimaIndiansDiabetes$diabetes)

回归示例:

# load the libraries
library(rpart)
library(mlbench)
# load data
data(BostonHousing)
# fit model
fit <- rpart(medv~., data=BostonHousing, control=rpart.control(minsplit=5))
# summarize the fit
print(fit)
# make predictions
predictions <- predict(fit, BostonHousing[,1:13])
# summarize accuracy
mse <- mean((BostonHousing$medv - predictions)²)
print(mse)

rpart 实现可以与 caret 一起使用进行分类,如下所示:

# load libraries
library(caret)
library(mlbench)
# Load the dataset
data(PimaIndiansDiabetes)
# train
set.seed(7)
control <- trainControl(method="cv", number=5)
fit.rpart <- train(diabetes~., data=PimaIndiansDiabetes, method="rpart", metric="Accuracy", trControl=control)
# summarize fit
print(fit.rpart)

rpart 实现可以与 Caret 一起用于回归,如下所示:

# load libraries
library(caret)
library(mlbench)
# Load the dataset
data(BostonHousing)
# train
set.seed(7)
control <- trainControl(method="cv", number=2)
fit.rpart <- train(medv~., data=BostonHousing, method="rpart", metric="RMSE", trControl=control)
# summarize fit
print(fit.rpart)

其他算法

R 提供了许多其他算法,并且在 caret 中可用。

我建议你去探索它们,并在你的下一个机器学习项目中,在你自己的必须尝试算法的简短列表中添加更多的算法。

您可以在本页的 Caret 包中找到机器学习函数和包到它们名称的映射:

如果您在 caret 中使用一个算法,并且想知道它属于哪个包,以便您可以阅读参数并从中获得更多信息,此页面非常有用。

如果您直接在 R 中使用机器学习算法,并且想知道它如何在 Caret 中使用,此页面也很有用。

摘要

在这篇文章中,你发现了 8 种不同的算法,可以用来抽查你的数据集。具体来说:

  • 线性回归
  • 逻辑回归
  • 线性判别分析
  • 正则回归
  • k-最近邻
  • 朴素贝叶斯
  • 支持向量机
  • 分类和回归树

您学习了每个算法使用哪些包和函数。您还学习了如何将每个算法与提供算法评估和调整功能的 caret 包一起使用。

您可以使用这些算法作为模板,对您当前或下一个机器学习项目进行抽查

你的下一步

你试过这些秘籍吗?

  1. 开始你的互动环境。
  2. 键入或复制粘贴上面的秘籍并试用。
  3. 使用 R 中的内置帮助来了解有关所用函数的更多信息。

你有问题吗?在评论里问,我会尽力回答。

调整 R 中的机器学习算法(随机森林案例研究)

原文:machinelearningmastery.com/tune-machin…

最后更新于 2020 年 7 月 31 日

很难为你的问题找到一个好的机器学习算法。但是一旦你这样做了,你如何从中获得最好的表现。

在这篇文章中,你将发现三种方法,你可以在 r。

用 r 中的工作代码一步一步地浏览一个真实的例子。使用代码作为模板,在您当前或下一个机器学习项目中调整机器学习算法。

用我的新书用 R 启动你的项目,包括一步一步的教程和所有例子的 R 源代码文件。

我们开始吧。

Tune Random Forest in R

在 r . r . 调谐随机森林苏姗娜·尼尔森摄,版权所有。

从顶级算法中获得更高的准确率

很难为您的数据集找到一个好的甚至表现良好的机器学习算法。

通过一个反复试验的过程,你可以确定一个显示有希望的算法的简短列表,但是你怎么知道哪个是最好的。

您可以为每个算法使用默认参数。这些参数是由书本和研究论文中的经验法则或建议设定的。但是你怎么知道你正在解决的算法显示出了最好的表现呢?

使用算法调整搜索算法参数

答案是为你的问题寻找好的甚至最好的算法参数组合。

您需要一个过程来调整每个机器学习算法,以知道您正在从中获得最大收益。调整后,您可以对候选列表中的算法进行客观的比较。

搜索算法参数可能很困难,有许多选项,例如:

  • 要调什么参数?
  • 用什么搜索方法定位好的算法参数?
  • 使用什么测试选项来限制训练数据的过拟合?

调整机器学习算法

您可以在 r 中调整您的机器学习算法参数。

通常,本节中的方法假设您已经有了一个针对您的问题的表现良好的机器学习算法的简短列表,您希望从中获得更好的表现。

创建表现良好的算法候选列表的一个很好的方法是使用 caret 包。

有关如何使用 Caret 包的更多信息,请参见:

在本节中,我们将了解三种方法,您可以在 R 中使用它们来调整算法参数:

  1. 使用 Caret R 包。
  2. 使用算法自带的工具。
  3. 设计自己的参数搜索。

在开始调优之前,让我们设置环境和测试数据。

测试设置

让我们快速看一下数据和我们将在这个案例研究中使用的算法。

测试数据集

在本案例研究中,我们将使用声纳测试问题。

这是来自 UCI 机器学习资源库的数据集,描述了雷达回波是从金属还是岩石上反弹回来的。

这是一个二分类问题,有 60 个数字输入特征来描述雷达回波的特性。你可以在这里了解更多这个问题:声纳数据集。您可以在此处看到该数据集的世界级发布结果:声纳数据集的准确率

这并不是一个特别困难的数据集,但是对于这个例子来说,它并不平凡而且有趣。

让我们从 mlbench 包加载所需的库和数据集。

library(randomForest)
library(mlbench)
library(caret)

# Load Dataset
data(Sonar)
dataset <- Sonar
x <- dataset[,1:60]
y <- dataset[,61]
测试算法

我们将使用流行的随机森林算法作为我们算法调整的主题。

随机森林不一定是这个数据集的最佳算法,但它是一个非常受欢迎的算法,毫无疑问,您会发现在自己的机器学习工作中,调整它是一个有用的练习。

在调整算法时,很好地理解您的算法非常重要,这样您就可以知道哪些参数会影响您正在创建的模型。

在本案例研究中,我们将坚持调整两个参数,即 mtryntree 参数,它们对我们的随机森林模型有以下影响。还有许多其他参数,但这两个参数可能是最有可能对您的最终准确率产生最大影响的。

直接从帮助页面获取 R:

  • mtry :每次分割时随机采样作为候选的变量数量。
  • ntree :要生长的树木数量。

让我们通过使用每个参数的推荐默认值和*mtry = floor(sqrt(ncol(x)))*或 mtry=7 和 ntree=500 来创建一个比较基线。

# Create model with default paramters
control <- trainControl(method="repeatedcv", number=10, repeats=3)
seed <- 7
metric <- "Accuracy"
set.seed(seed)
mtry <- sqrt(ncol(x))
tunegrid <- expand.grid(.mtry=mtry)
rf_default <- train(Class~., data=dataset, method="rf", metric=metric, tuneGrid=tunegrid, trControl=control)
print(rf_default)

我们可以看到我们的估计准确率为 81.3%。

Resampling results

  Accuracy   Kappa      Accuracy SD  Kappa SD 
  0.8138384  0.6209924  0.0747572    0.1569159

1.使用 Caret 调谐

R 中的 caret 包为调整机器学习算法参数提供了极好的工具。

并非所有的机器学习算法都可以在 caret 中进行调整。参数的选择留给包的开发者,即 Max Khun。只有那些具有较大影响的算法参数(例如,在 Khun 看来确实需要调整)才可在 Caret 中进行调整。

因此,Caret 中只有 mtry 参数可用于调谐。原因是它对最终准确率的影响,并且它必须根据经验为数据集找到。

ntree 参数的不同之处在于,它可以随您的喜好而变大,并在某种程度上继续提高准确率。它不太难调整,也不太重要,可能比任何东西都更受可用计算时间的限制。

随机搜索

我们可以使用的一种搜索策略是尝试一定范围内的随机值。

如果我们不确定值可能是多少,并且想要克服设置参数时可能存在的任何偏差(如上面建议的等式),这可能是件好事。

让我们尝试使用 Caret 随机搜索 mtry :

# Random Search
control <- trainControl(method="repeatedcv", number=10, repeats=3, search="random")
set.seed(seed)
mtry <- sqrt(ncol(x))
rf_random <- train(Class~., data=dataset, method="rf", metric=metric, tuneLength=15, trControl=control)
print(rf_random)
plot(rf_random)

注意,我们使用的测试工具类似于我们用来抽查算法的工具。10 倍交叉验证和 3 次重复都会减慢搜索过程,但目的是限制和减少训练集的过拟合。它不会完全消除过拟合。如果你有多余的数据,保留一个用于最终检查的验证集是个好主意。

Resampling results across tuning parameters:

  mtry  Accuracy   Kappa      Accuracy SD  Kappa SD 
  11    0.8218470  0.6365181  0.09124610   0.1906693
  14    0.8140620  0.6215867  0.08475785   0.1750848
  17    0.8030231  0.5990734  0.09595988   0.1986971
  24    0.8042929  0.6002362  0.09847815   0.2053314
  30    0.7933333  0.5798250  0.09110171   0.1879681
  34    0.8015873  0.5970248  0.07931664   0.1621170
  45    0.7932612  0.5796828  0.09195386   0.1887363
  47    0.7903896  0.5738230  0.10325010   0.2123314
  49    0.7867532  0.5673879  0.09256912   0.1899197
  50    0.7775397  0.5483207  0.10118502   0.2063198
  60    0.7790476  0.5513705  0.09810647   0.2005012

我们可以看到,mtry 的最准确值是 11,准确率为 82.1%。

Tune Random Forest Parameters in R Using Random Search

使用随机搜索调整随机森林参数

网格搜索

另一种搜索是定义一个算法参数网格来尝试。

网格的每个轴都是一个算法参数,网格中的点是参数的特定组合。因为我们只调整一个参数,所以网格搜索是通过候选值向量的线性搜索。

control <- trainControl(method="repeatedcv", number=10, repeats=3, search="grid")
set.seed(seed)
tunegrid <- expand.grid(.mtry=c(1:15))
rf_gridsearch <- train(Class~., data=dataset, method="rf", metric=metric, tuneGrid=tunegrid, trControl=control)
print(rf_gridsearch)
plot(rf_gridsearch)

我们可以看到,mtry 的最准确值是 2,准确率为 83.78%。

Resampling results across tuning parameters:

  mtry  Accuracy   Kappa      Accuracy SD  Kappa SD 
   1    0.8377273  0.6688712  0.07154794   0.1507990
   2    0.8378932  0.6693593  0.07185686   0.1513988
   3    0.8314502  0.6564856  0.08191277   0.1700197
   4    0.8249567  0.6435956  0.07653933   0.1590840
   5    0.8268470  0.6472114  0.06787878   0.1418983
   6    0.8298701  0.6537667  0.07968069   0.1654484
   7    0.8282035  0.6493708  0.07492042   0.1584772
   8    0.8232828  0.6396484  0.07468091   0.1571185
   9    0.8268398  0.6476575  0.07355522   0.1529670
  10    0.8204906  0.6346991  0.08499469   0.1756645
  11    0.8073304  0.6071477  0.09882638   0.2055589
  12    0.8184488  0.6299098  0.09038264   0.1884499
  13    0.8093795  0.6119327  0.08788302   0.1821910
  14    0.8186797  0.6304113  0.08178957   0.1715189
  15    0.8168615  0.6265481  0.10074984   0.2091663

Tune Random Forest Parameters in R Using Grid Search.png

使用网格 Search.png 调整随机森林参数

2.使用算法工具进行调整

一些算法提供了调整算法参数的工具。

例如,random forest 包中的随机森林算法实现提供了 tuneRF() 函数,该函数在给定数据的情况下搜索最佳 mtry 值。

# Algorithm Tune (tuneRF)
set.seed(seed)
bestmtry <- tuneRF(x, y, stepFactor=1.5, improve=1e-5, ntree=500)
print(bestmtry)

可以看到 mtry 最准确的值是 10,OOBError 为 0.1442308。

这与我们在上面的 Caret 重复交叉验证实验中看到的不太匹配,其中 mtry=10 给出的准确率为 82.04%。然而,这是调整算法的另一种方法。

       mtry  OOBError
5.OOB     5 0.1538462
7.OOB     7 0.1538462
10.OOB   10 0.1442308
15.OOB   15 0.1682692

Tune Random Forest Parameters in R using tuneRF

使用调谐射频调谐随机森林参数

3.创建自己的参数搜索

通常,您希望搜索必须调整的参数(由 Caret 处理)和需要针对数据集进行更一般的缩放或调整的参数。

你必须精心设计自己的参数搜索。

我推荐的两个流行选项是:

  1. 手动调整:编写 R 代码来创建大量模型,并使用 Caret 比较它们的准确性
  2. 扩展 Caret:为 Caret 创建一个扩展,为要调整的算法向 Caret 添加附加参数。
手动调谐

我们希望继续使用 Caret,因为它提供了与我们以前模型的直接比较点(苹果对苹果,甚至相同的数据分割),并且因为我们喜欢重复的交叉验证测试工具,因为它降低了过拟合的严重性。

一种方法是为我们的算法创建许多 Caret 模型,并手动将不同的参数直接传递给算法。让我们看一个例子,在保持 mtry 不变的情况下,这样做是为了评估 ntree 的不同值。

# Manual Search
control <- trainControl(method="repeatedcv", number=10, repeats=3, search="grid")
tunegrid <- expand.grid(.mtry=c(sqrt(ncol(x))))
modellist <- list()
for (ntree in c(1000, 1500, 2000, 2500)) {
	set.seed(seed)
	fit <- train(Class~., data=dataset, method="rf", metric=metric, tuneGrid=tunegrid, trControl=control, ntree=ntree)
	key <- toString(ntree)
	modellist[[key]] <- fit
}
# compare results
results <- resamples(modellist)
summary(results)
dotplot(results)

你可以看到 ntree 最准确的值可能是 2000 年,平均准确率为 82.02%(比我们第一次使用默认 mtry 值的实验提高了一倍)。

这个结果也许暗示了 ntree 在 2000 到 2500 之间的最佳值。还要注意,我们将 mtry 保持在默认值。我们可以用上面实验中可能更好的 mtry=2 重复实验,或者尝试 ntree 和 mtry 的组合,以防它们有交互作用。

Models: 1000, 1500, 2000, 2500 
Number of resamples: 30 

Accuracy 
      Min. 1st Qu. Median   Mean 3rd Qu.   Max. NA's
1000 0.600  0.8024 0.8500 0.8186  0.8571 0.9048    0
1500 0.600  0.8024 0.8095 0.8169  0.8571 0.9500    0
2000 0.619  0.8024 0.8095 0.8202  0.8620 0.9048    0
2500 0.619  0.8000 0.8095 0.8201  0.8893 0.9091    0

Tune Random Forest Parameters in R Manually

手动调整随机森林参数

扩展 Caret

另一种方法是为 caret 创建一个“新”算法来支持。

这与您正在使用的随机森林算法相同,只是进行了修改,使其支持多个参数的多次调整。

这种方法的一个风险是,对算法的 caret 本地支持有额外的或花哨的代码包装它,微妙但重要的是改变它的行为。您可能需要在自定义算法支持下重复之前的实验。

我们可以通过定义一个列表来定义自己的算法,以便在 caret 中使用,该列表包含 caret 包要查找的许多自定义命名元素,例如如何适应和如何预测。下面是自定义随机森林算法的定义,该算法与同时接受 mtry 和 ntree 参数的 caret 一起使用。

customRF <- list(type = "Classification", library = "randomForest", loop = NULL)
customRF$parameters <- data.frame(parameter = c("mtry", "ntree"), class = rep("numeric", 2), label = c("mtry", "ntree"))
customRF$grid <- function(x, y, len = NULL, search = "grid") {}
customRF$fit <- function(x, y, wts, param, lev, last, weights, classProbs, ...) {
  randomForest(x, y, mtry = param$mtry, ntree=param$ntree, ...)
}
customRF$predict <- function(modelFit, newdata, preProc = NULL, submodels = NULL)
   predict(modelFit, newdata)
customRF$prob <- function(modelFit, newdata, preProc = NULL, submodels = NULL)
   predict(modelFit, newdata, type = "prob")
customRF$sort <- function(x) x[order(x[,1]),]
customRF$levels <- function(x) x$classes

现在,让我们在对 Caret 训练函数的调用中使用这个自定义列表,并尝试为 ntree 和 mtry 调整不同的值。

# train model
control <- trainControl(method="repeatedcv", number=10, repeats=3)
tunegrid <- expand.grid(.mtry=c(1:15), .ntree=c(1000, 1500, 2000, 2500))
set.seed(seed)
custom <- train(Class~., data=dataset, method=customRF, metric=metric, tuneGrid=tunegrid, trControl=control)
summary(custom)
plot(custom)

这可能需要一两分钟来运行。

可以看到 ntreemtry 最准确的数值是 2000 和 2,准确率为 84.43%。

我们也许确实看到了树的数量和树的价值之间的一些交互作用。然而,如果我们选择了使用网格搜索 2 找到的最佳值 mtry (上图)和使用网格搜索 2000 找到的最佳值 ntree (上图),在这种情况下,我们将会达到在这个组合搜索中找到的相同的调优水平。这是一个很好的证实。

  mtry  ntree  Accuracy   Kappa      Accuracy SD  Kappa SD 
   1    1000   0.8442424  0.6828299  0.06505226   0.1352640
   1    1500   0.8394805  0.6730868  0.05797828   0.1215990
   1    2000   0.8314646  0.6564643  0.06630279   0.1381197
   1    2500   0.8379654  0.6693773  0.06576468   0.1375408
   2    1000   0.8313781  0.6562819  0.06909608   0.1436961
   2    1500   0.8427345  0.6793793  0.07005975   0.1451269
   2    2000   0.8443218  0.6830115  0.06754346   0.1403497
   2    2500   0.8428066  0.6791639  0.06488132   0.1361329
   3    1000   0.8350216  0.6637523  0.06530816   0.1362839
   3    1500   0.8347908  0.6633405  0.06836512   0.1418106
   3    2000   0.8428066  0.6800703  0.06643838   0.1382763
   3    2500   0.8365296  0.6668480  0.06401429   0.1336583
   4    1000   0.8316955  0.6574476  0.06292132   0.1317857
   4    1500   0.8331241  0.6605244  0.07543919   0.1563171
   4    2000   0.8378860  0.6699428  0.07147459   0.1488322
   4    2500   0.8315368  0.6568128  0.06981259   0.1450390
   5    1000   0.8284343  0.6505097  0.07278539   0.1516109
   5    1500   0.8283622  0.6506604  0.07166975   0.1488037
   5    2000   0.8219336  0.6375155  0.07548501   0.1564718
   5    2500   0.8315440  0.6570792  0.07067743   0.1472716
   6    1000   0.8203391  0.6341073  0.08076304   0.1689558
   6    1500   0.8186797  0.6302188  0.07559694   0.1588256
   6    2000   0.8187590  0.6310555  0.07081621   0.1468780
   6    2500   0.8153463  0.6230495  0.07728249   0.1623253
   7    1000   0.8217027  0.6367189  0.07649651   0.1606837
   7    1500   0.8282828  0.6503808  0.06628953   0.1381925
   7    2000   0.8108081  0.6147563  0.07605609   0.1573067
   7    2500   0.8250361  0.6437397  0.07737756   0.1602434
   8    1000   0.8187590  0.6314307  0.08378631   0.1722251
   8    1500   0.8201876  0.6335679  0.07380001   0.1551340
   8    2000   0.8266883  0.6472907  0.06965118   0.1450607
   8    2500   0.8251082  0.6434251  0.07745300   0.1628087
   9    1000   0.8121717  0.6177751  0.08218598   0.1709987
   9    1500   0.8184488  0.6300547  0.08077766   0.1674261
   9    2000   0.8247980  0.6429315  0.07260439   0.1513512
   9    2500   0.8186003  0.6302674  0.07356916   0.1547231
  10    1000   0.8235209  0.6407121  0.07991334   0.1656978
  10    1500   0.8125541  0.6183581  0.06851683   0.1421993
  10    2000   0.8187518  0.6308120  0.08538951   0.1782368
  10    2500   0.8169336  0.6263682  0.07847066   0.1649216
  11    1000   0.8203463  0.6341158  0.07222587   0.1497558
  11    1500   0.8153463  0.6235878  0.09131621   0.1904418
  11    2000   0.8234416  0.6402906  0.07586609   0.1576765
  11    2500   0.8154906  0.6236875  0.07485835   0.1576576
  12    1000   0.8201948  0.6336913  0.08672139   0.1806589
  12    1500   0.8139105  0.6206994  0.08638618   0.1804780
  12    2000   0.8137590  0.6204461  0.07771424   0.1629707
  12    2500   0.8201876  0.6333194  0.07799832   0.1636237
  13    1000   0.8123232  0.6173280  0.09299062   0.1936232
  13    1500   0.8108802  0.6142721  0.08416414   0.1760527
  13    2000   0.8154257  0.6236191  0.08079923   0.1693634
  13    2500   0.8106566  0.6138814  0.08074394   0.1687437
  14    1000   0.8171645  0.6270292  0.08608806   0.1799346
  14    1500   0.8139033  0.6207263  0.08522205   0.1781396
  14    2000   0.8170924  0.6276518  0.08766645   0.1822010
  14    2500   0.8137590  0.6207371  0.08353328   0.1746425
  15    1000   0.8091486  0.6110154  0.08455439   0.1745129
  15    1500   0.8109668  0.6154780  0.08928549   0.1838700
  15    2000   0.8059740  0.6047791  0.08829659   0.1837809
  15    2500   0.8122511  0.6172771  0.08863418   0.1845635

Custom Tuning of Random Forest parameters in R

随机森林参数的自定义调整

有关在 Caret 中定义自定义算法的更多信息,请参见:

要查看 caret 使用的随机林的实际包装,您可以将其用作起点,请参见:

摘要

在这篇文章中,您发现了调整表现良好的机器学习算法以获得最佳表现的重要性。

您在 R 中完成了一个调优随机森林算法的示例,并发现了三种调优表现良好的算法的方法。

  1. 使用 Caret R 包。
  2. 使用算法自带的工具。
  3. 设计自己的参数搜索。

你现在有一个工作的例子和模板,你可以用它来调整你当前或下一个项目中的机器学习算法。

下一步

完成这篇文章中的例子。

  1. 打开你的 R 交互环境。
  2. 键入或复制粘贴上面的示例代码。
  3. 慢慢来,了解发生了什么,使用帮助阅读函数。

你有什么问题吗?在评论中提问,我会尽力回答。

使用 Caret 包调整机器学习模型

原文:machinelearningmastery.com/tuning-mach…

最后更新于 2019 年 8 月 22 日

机器学习算法是参数化的,因此它们可以最好地适应给定的问题。一个困难是,为给定问题配置算法本身可能是一个项目。

就像为一个问题选择“最佳”算法一样,你不可能事先知道哪个算法参数最适合一个问题。最好的办法是用对照实验进行实证研究。

caret R 包旨在使寻找算法的最佳参数变得非常容易。它提供了搜索参数的网格搜索方法,并结合了各种方法来估计给定模型的表现。

在这篇文章中,你将发现 5 个方法,你可以用它来调整机器学习算法,使用 caret 包为你的问题找到最佳参数。

用我的新书用 R 启动你的项目,包括一步一步的教程和所有例子的 R 源代码文件。

我们开始吧。

模型调整

caret 包提供了一个网格搜索,您可以在其中指定参数来解决您的问题。它将尝试所有组合,并找到一个给出最佳结果的组合。

这篇文章中的例子将演示如何使用 Caret R 包来调整机器学习算法。

学习矢量量化(LVQ) 因其简单性将用于所有示例。它就像 k 近邻,只是样本数据库更小,并基于训练数据进行调整。它有两个要调整的参数,模型中被称为大小的实例数量(代码本),以及进行预测时要检查的被称为 k 的实例数量。

每一个例子也将使用鸢尾花数据集,该类别数据集为三种鸢尾花及其花瓣和萼片提供了 150 个观察值,单位为厘米。

每个示例还假设我们对分类准确率感兴趣,因为我们正在优化度量,尽管这是可以改变的。此外,每个示例使用重复的 n 折叠交叉验证来估计给定模型(大小和 k 参数组合)的表现,重复 10 次和 3 次。如果你愿意,这也可以改变。

网格搜索:自动网格

在 Caret R 包中有两种方法来调整算法,第一种是允许系统自动进行。这可以通过设置 tuneLength 来完成,以指示每个算法参数要尝试的不同值的数量。

这仅支持整数和分类算法参数,并且它粗略地猜测要尝试什么值,但是它可以让您非常快地启动和运行。

下面的方法演示了 LVQ 的大小和 k 属性的自动网格搜索,每个(总共 25 个模型)有 5 个(tunelement = 5)值。

# ensure results are repeatable
set.seed(7)
# load the library
library(caret)
# load the dataset
data(iris)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# train the model
model <- train(Species~., data=iris, method="lvq", trControl=control, tuneLength=5)
# summarize the model
print(model)

模型使用的最终值是 size = 10 和 k = 1。

网格搜索:手动网格

搜索算法参数的第二种方法是手动指定优化网格。在网格中,每个算法参数可以被指定为可能值的向量。这些向量组合在一起,定义了所有可能尝试的组合。

下面的配方演示了手动调谐网格的搜索,其中大小参数有 4 个值,k 参数有 5 个值(20 种组合)。

# ensure results are repeatable
set.seed(7)
# load the library
library(caret)
# load the dataset
data(iris)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# design the parameter tuning grid
grid <- expand.grid(size=c(5,10,20,50), k=c(1,2,3,4,5))
# train the model
model <- train(Species~., data=iris, method="lvq", trControl=control, tuneGrid=grid)
# summarize the model
print(model)

模型使用的最终值是 size = 50 和 k = 5。

数据预处理

数据集可以作为参数调整的一部分进行预处理。重要的是在用于评估每个模型的样本中这样做,以确保结果考虑到测试中的所有可变性。如果数据集在调优过程之前被规范化或标准化,它将获得额外的知识(偏差),而不会给出对未看到的数据的表现的准确估计。

虹膜数据集中的属性都是以相同的单位表示的,并且通常具有相同的比例,因此规范化和标准化并不是真正必要的。然而,下面的例子演示了调整 LVQ 的大小和 k 参数,同时使用*prepare = " scale "*归一化数据集。

# ensure results are repeatable
set.seed(7)
# load the library
library(caret)
# load the dataset
data(iris)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# train the model
model <- train(Species~., data=iris, method="lvq", preProcess="scale", trControl=control, tuneLength=5)
# summarize the model
print(model)

模型使用的最终值是 size = 8 和 k = 6。

并行处理

caret 包支持并行处理,以减少给定实验的计算时间。只要进行了配置,就会自动支持。在这个例子中,我们加载了 doMC 包,并将核心数设置为 4,这样在调优模型时就可以为 Caret 提供 4 个工作线程。这用于每个参数组合的重复交叉验证循环。

# ensure results are repeatable
set.seed(7)
# configure multicore
library(doMC)
registerDoMC(cores=4)
# load the library
library(caret)
# load the dataset
data(iris)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# train the model
model <- train(Species~., data=iris, method="lvq", trControl=control, tuneLength=5)
# summarize the model
print(model)

结果和第一个例子一样,只是完成得更快。

绩效可视化

绘制不同算法参数组合的表现图以寻找趋势和模型的灵敏度可能是有用的。Caret 支持直接绘制模型,这将比较不同算法组合的准确性。

在下面的配方中,定义了一个更大的算法参数手动网格,并绘制了结果。该图显示了 x 轴上的尺寸和 y 轴上的模型准确率。画了两条线,一条对应一个 k 值。该图显示了表现随大小增加的一般趋势,较大的 k 值可能是首选。

# ensure results are repeatable
set.seed(7)
# load the library
library(caret)
# load the dataset
data(iris)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# design the parameter tuning grid
grid <- expand.grid(size=c(5,10,15,20,25,30,35,40,45,50), k=c(3,5))
# train the model
model <- train(Species~., data=iris, method="lvq", trControl=control, tuneGrid=grid)
# summarize the model
print(model)
# plot the effect of parameters on accuracy
plot(model)

模型使用的最终值是 size = 35 和 k = 5。

Grid Search using the Caret R Package

使用 Caret R 包的网格搜索 显示了 LVQ 的大小和 k 与模型准确率的关系

摘要

在这篇文章中,您发现了 caret R 包中通过使用网格搜索来调整算法参数的支持。

您已经看到了 5 个使用脱字号 R 包为 LVQ 算法调整大小和 k 参数的方法。

这篇文章中的每一个配方都是独立的,可以复制粘贴到你自己的项目中,并适应你的问题。

将 R 用于机器学习

原文:machinelearningmastery.com/use-r-for-m…

最后更新于 2019 年 8 月 22 日

你应该用 R 进行机器学习。

r 是最强大的机器学习平台之一,被世界顶级数据科学家使用。

在这篇文章中,你将了解为什么你应该使用 R 进行机器学习。

用我的新书用 R 启动你的项目,包括一步一步的教程和所有例子的 R 源代码文件。

我们开始吧。

R Platform For Machine Learning

机器学习的 r 平台 图片由 Christopher Woo 提供,保留部分权利。

为什么你应该关心 R

R 被世界上最好的数据科学家使用。在 Kaggle (竞争机器学习平台)上的调查中,R 是迄今为止使用最多的机器学习工具。2015 年对专业机器学习从业者进行调查时,同样最受欢迎的机器学习工具是 r。

R 之所以强大,是因为它提供了广泛的技术。你能想到的任何用于数据分析、可视化、采样、监督学习和模型评估的技术都在 r 中提供。该平台比你会遇到的任何其他技术都多。

R 是最先进的,因为它被学者使用。R 之所以有这么多技术,其中一个原因是因为开发新算法的学者正在 R 中开发它们,并将其作为 R 包发布。这意味着您可以比其他平台更早地获得 R 中最先进的算法。这也意味着你只能访问 R 中的一些算法,直到有人将它们移植到其他平台。

R 是免费的,因为是开源软件。您现在可以免费下载它,它可以在您可能使用的任何工作站平台上运行。

深信不疑?

那么什么是 R 呢?

r 是一种语言,一个解释器,一个平台。

R 是计算机语言。它可能很难学,但很熟悉,如果您使用过其他脚本语言,如 Python、Ruby 或 BASH,您会很快理解它。

R 是解释者。您可以编写脚本并将其保存为文件。像其他脚本语言一样,您可以随时使用解释器来运行这些脚本。r 还提供了一个 REPL 环境,在这里你可以输入命令并立即看到输出。

R 也是平台。您可以使用它来创建和显示图形,保存和加载状态,以及与其他系统交互。如果你愿意,你可以在 REPL 环境中进行所有的探索和开发。

想要更多,查看我之前的帖子什么是 R?

电源在包装中

R 的力量就在包装里。

r 本身很简单。它提供了用于基本统计和数据处理的内置命令。您将使用的 R 的机器学习功能来自第三方软件包。包是 R 平台的插件。您可以在 R 环境中搜索、下载和安装它们。

因为包是由第三方创建的,所以它们的质量可能会有所不同。搜索提供您想要使用的特定技术的最佳包是一个好主意。包以帮助的形式为每个包功能提供文档,并经常提供演示如何使用包的小插图。

在你写一行代码之前,一定要搜索一下是否有一个包可以满足你的需求。

可以在综合 R 档案网或 CRAN 上搜索包裹。

如何使用 R 进行机器学习?

R 平台并不适合所有类型的机器学习项目。最棒的地方是使用 R 进行探索和构建一次性模型。

探索的互动环境

R 交互环境对于探索和学习如何使用包和函数非常有用。刚开始的时候,你应该花很多时间在互动环境中。

如果你在探索一个新的问题,环境也很好。不是系统地解决问题,而是更多地尝试假设情景。

如果你想使用一个系统化的过程,并且在没有冗长的程序的情况下很快得出一个原型模型,这也是很棒的。

R Interactive Environment

互动环境

您可以通过键入以下命令在命令行上启动交互式环境:

$ R

您可以通过键入以下内容获得任何功能的帮助:

help(function_name)

您可以通过调用退出功能来关闭交互式环境:

q()

将脚本用于一次性模型

我建议如果你有一个开发脚本的机器学习项目。

项目中的每个任务都可以用一个新的脚本来描述,这个脚本可以在修订控制中被记录、更新和跟踪。

r 脚本可以从命令行运行,可以从 shell 脚本调用,也可以(我个人最喜欢的)从 Makefile 中的目标调用。

例如,下面是如何从命令行、shell 脚本或 make 文件调用 R 可执行文件来运行脚本文件:

R CMD BATCH your_script.R your_script.log

这将运行脚本 your_script。R 在批处理模式下使用 R(非迭代),并将脚本的任何结果保存在文件 your_script.log 中

不是为了生产

r 可能不是构建生产模型的最佳解决方案。

这些技术可能是最先进的,但是它们可能没有使用最好的软件工程原理,没有测试,或者不能扩展到您可能需要处理的数据集的大小。

也就是说,R 可能是发现在生产中实际使用什么模型的最佳解决方案。

环境正在发生变化,人们正在编写可操作运行的 R 脚本,服务正在出现,以支持更大的数据集。

使用 R 的一般提示

以下是充分利用 R 进行机器学习的技巧。

  • 坚持基本 R 。在你适应环境之前,不要写函数和严肃的代码。坚持在包中调用函数。
  • 从帮助和小插曲中学习。软件包以文档的形式为每个功能提供帮助,并提供使用信息。如果有疑问,可以在自己喜欢的搜索引擎中搜索该套餐,在 CRAN 上找到该套餐的主页。从插图中运行例子可以教会你很多关于函数的预期用法。
  • 表格数据。因为 R 是由统计学家为统计学家构建的,所以它适合于表格数据,例如,你会在电子表格中看到的数据矩阵。
  • 小数据。r 更适合较小的数据集,例如几十或几十万行,但不是几百万行。
  • 不要编程。关注包和函数以及如何很好地使用它们。我不建议学习“如何在 R 中编程”,除非你想创建自己的包。

你可以用 R 进行机器学习

不需要做 R 程序员。如果你知道如何用另一种编程语言如 Java、C#、JavaScript 或 Python 编程,那么你可以使用 r。你会很快学会语法。

你不需要成为一名优秀的程序员。善于使用 R 并不是要成为一个好的程序员,而是要知道使用哪些包以及如何使用好它们。仔细阅读这些包并练习使用它们。不要研究如何在 R 中编程好,那是浪费时间。

不需要成为机器学习专家。有数百个机器学习包和数千种技术可供您使用。慢慢来,阅读文档并练习。

摘要

在这篇文章中,你发现你应该使用 R 进行机器学习。

它是专业人士和世界上最好的数据科学家最广泛使用的机器学习平台之一。

你发现了 R 的最佳位置:

  • 在交互环境中使用 R 进行探索和原型制作。
  • 用 R 写脚本开发一次性模型。

你的下一步

你想用 R 进行机器学习吗?

马上开始!

你有问题吗?给我发邮件或者在下面发表评论。

什么是 R

原文:machinelearningmastery.com/what-is-r/

最后更新于 2019 年 8 月 22 日

r 也许是统计编程和应用机器学习最强大和最受欢迎的平台之一。

当你认真对待机器学习时,你会找到进入 r 的方法。

在这篇文章中,你会发现 R 是什么,它来自哪里,以及它的一些最重要的特性。

用我的新书用 R 启动你的项目,包括一步一步的教程和所有例子的 R 源代码文件。

我们开始吧。

R Logo

r 很快

什么是 R?

r 是一个用于统计编程和可视化的开源环境。

r 是很多东西,刚开始可能会很混乱。

  • R 是计算机语言。它是 Lisp 的变体,你可以用它编写程序。
  • R 是解释者。它可以解析和执行直接键入或从扩展名为. R 的文件中加载的 R 脚本(程序)。
  • R 为平台。它可以创建图形显示在屏幕上或保存到文件中。它还可以准备可以查询和更新的模型。

您可能希望在文件中编写 R 脚本,并使用 R 解释器以批处理模式运行它们,以获得表格或图形等结果。您可能希望打开 R 解释器并键入命令来加载数据,以特定的方式探索和建模数据。

有图形环境,但最简单和最常见的使用是从 R 控制台(像一个 REPL )。如果你刚开始学习 R,我建议你在控制台上学习 R。

R 从何而来

r 是由罗斯·伊哈卡和罗伯特·绅士在新西兰奥克兰大学创建的,作为 T2 编程语言 T3 的实现。发展始于 1993 年。1995 年,在 GNU 图形处理器下发布的文件传输协议上提供了一个版本。更大的核心小组和开源项目成立于 1997 年。

它最初是作者的一个实验,使用类似于 S 中提供的语法在 Lisp 中实现一个统计测试平台。随着它的发展,它采用了更多的 S 的语法和特性,最终在能力和范围上超越了它。

关于 R 的历史有趣而详细的介绍,请查看技术报告 R:过去和未来的历史 (PDF)。

R 的主要特征

当您需要分析数据、绘制数据图或为数据建立统计模型时,r 是一个可以使用的工具。它非常适合一次性分析原型和学术工作,但不适合构建要部署在可扩展或操作环境中的模型。

重组的好处

R 有三个主要好处:

  • 开源 : R 是自由开源的。您可以立即下载并开始免费使用。您可以阅读源代码,从中学习并修改它以满足您的需求。简直太神奇了。
  • Packages : R 之所以受欢迎,是因为它有大量非常强大的算法被实现为称为 Packages 的第三方库。统计领域的学者以 R 包的形式发布他们的方法是很常见的,这意味着你可以直接访问一些最先进的方法。
  • 成熟度 : R 的灵感来源于专有统计语言 S,使用并改进了统计计算中有用的习惯用法和隐喻,比如在矩阵、向量和数据帧中工作。

更多关于 R 包的信息,请查看 CRAN (综合 R 档案网。)并通过视图进行浏览。列出机器学习软件包的机器学习&统计学习视图将会非常有趣。

R 的困难

该平台的三个主要困难是:

  • 不一致性:每个算法都是用自己的参数、命名约定和参数来实现的。有些人试图坚持粗略的约定(比如预测函数进行预测),但即使是标准函数名的结果也可能在复杂性上有所不同。这可能非常令人沮丧,需要深入阅读您使用的每个新包的文档。
  • 文档:文档很多,但一般比较直接简洁。内置的帮助很少对您的需求有足够的帮助,它不断地驱使您到网络上获取完整的工作示例,您必须从这些示例中获得您的用例。
  • 可扩展性 : R 用于可放入一台机器内存的数据。它不适用于流数据、大数据或跨多台机器工作。

这种语言有点迟钝,但作为一名程序员,你会毫不费力地学会它,并根据自己的需要修改例子。许多包利用用 C、C++、FORTRAN 和 Java 编写的数学代码,在 R 环境中提供了一个纵容接口。

谁在用 R?

商业公司现在支持 R。例如,Revolution R 是一个商业支持的 R 版本,其扩展对企业有用,例如集成开发环境。甲骨文、IBM、Mathematica、MATLAB、SPSS、SAS 等提供与 R 及其平台的集成。

Revolution Analytics 博客还提供了一长串公开宣布采用该平台的公司名单。

数据科学竞赛的卡格尔平台kd 掘金民调都指出 R 是成功实践数据科学家最受欢迎的平台。在文章机器学习的最佳编程语言中了解更多信息。

摘要

在这篇文章中,你得到了 R 是什么的概述,它的关键特性,它来自哪里,谁在使用它。

这是一个令人兴奋和强大的平台。如果你正在考虑开始使用 R 进行应用机器学习,你可能想看看这个关于 R 进行机器学习的 7 本书的列表

更多关于 R 的信息,请查看统计计算的 R 项目主页。在那里你可以找到下载链接、文档和手册、电子邮件列表等等。