Machine Learning Mastery R 机器学习教程(三)
R 中的机器学习项目模板
最后更新于 2019 年 8 月 22 日
应用机器学习是一种经验技能。
你不能通过阅读书籍和博客文章来变得更好。你必须练习。
在这篇文章中,你将发现简单的 6 步机器学习项目模板,你可以用它来启动你的 r 项目。
用我的新书用 R 启动你的项目,包括一步一步的教程和所有例子的 R 源代码文件。
我们开始吧。
R 图片中的机器学习项目模板由捷豹 MENA 提供,保留部分权利。
通过端到端项目练习机器学习
从头到尾解决机器学习问题至关重要。
你可以阅读机器学习。你也可以尝试小的一次性秘籍。但是应用机器学习在你从头到尾研究一个数据集之前不会对你有意义。
完成一个项目迫使你思考如何使用这个模型,挑战你的假设,并擅长项目的所有部分,而不仅仅是你喜欢的部分。
实践预测建模机器学习项目的最佳方式是使用来自 UCI 机器学习存储库的标准化数据集。有关这种练习方法的更多信息,请参见帖子:
一旦你有了一个练习数据集和一堆 R 秘籍,你如何把它们放在一起,并从头到尾解决这个问题?
使用结构化的逐步过程
任何预测建模机器学习项目都可以分解为大约 6 个常见任务:
- 定义问题
- 汇总数据
- 准备数据
- 评估计法
- 改善结果
- 呈现结果
任务可以组合或进一步分解,但这是一般结构。关于这种结构的更多信息,请参见帖子:
为了解决 R 中的预测建模机器学习问题,您需要将 R 映射到这个过程中。它们可能需要稍加修改或重命名,以适应“R 做事方式”(例如 caret 包)。
下一节将提供这种映射,并详细说明每个任务以及您可以使用的子任务和 Caret 包的类型。
R 中的机器学习项目模板
本节介绍了一个项目模板,您可以使用它来解决 R 端对端的机器学习问题。
模板摘要
以下是您可以在 r 中的机器学习项目中使用的项目模板。
# R Project Template
# 1\. Prepare Problem
# a) Load libraries
# b) Load dataset
# c) Split-out validation dataset
# 2\. Summarize Data
# a) Descriptive statistics
# b) Data visualizations
# 3\. Prepare Data
# a) Data Cleaning
# b) Feature Selection
# c) Data Transforms
# 4\. Evaluate Algorithms
# a) Test options and evaluation metric
# b) Spot Check Algorithms
# c) Compare Algorithms
# 5\. Improve Accuracy
# a) Algorithm Tuning
# b) Ensembles
# 6\. Finalize Model
# a) Predictions on validation dataset
# b) Create standalone model on entire training dataset
# c) Save model for later use
如何使用项目模板
- 为您的项目创建一个新文件(例如 project_name。r)。
- 复制项目模板。
- 将其粘贴到您的空项目文件中。
- 开始填写,使用这个网站和其他网站的博客文章中的秘籍。
机器学习项目模板步骤
本节为您提供了模板每个步骤的更多详细信息。
1.准备问题
这一步是加载开始解决问题所需的所有内容。这包括:
- 你将使用的库像 Caret。
- 从 CSV 加载数据集。
- 使用 Caret 创建单独的训练和验证数据集。
这也是您可能需要进行的任何全局配置的所在地,例如为使用多核设置任何并行库和函数。
如果数据集太大而无法处理,您可能需要在这里对数据集进行缩减采样。理想情况下,您的数据集应该足够小,可以在一分钟内(理想情况下是 30 秒)构建一个模型或完成一个可视化。稍后,您总是可以扩展表现良好的模型。
2.汇总数据
这一步是为了更好地了解您现有的数据。
这包括使用以下方法了解您的数据:
- 描述性统计,如摘要。
- 数据可视化,如图形和点阵包中的图。
慢慢来,使用结果来提示许多问题、假设和假设,您可以稍后使用专门的模型进行调查。
3.准备数据
这一步是准备数据,使其最好地揭示问题的结构以及输入属性和输出变量之间的关系。
这包括以下任务:
- 通过删除重复项、标记缺失值甚至输入缺失值来清理数据。
- 可移除冗余特征的特征选择。
- 数据转换,其中属性被缩放或重新分布,以便在以后向学习算法最好地展示问题的结构。
从简单开始。经常重温这一步,并与下一步循环,直到您在算法子集和数据表示上达成一致,从而产生精确或足够精确的模型来继续。
4.评估计法
这一步是关于找到一个机器学习算法的子集,它擅长利用你的数据结构(例如,拥有比一般人更好的技能)。
这包括以下步骤:
- 使用 Caret 定义测试选项,如交叉验证和要使用的评估指标。
- 抽查一套线性和非线性机器学习算法。
- 比较算法的估计准确率。
实际上,在给定的问题上,你可能会把大部分时间花在这一步和前一步上,直到你收敛到一组 3 到 5 个表现良好的机器学习算法。
5.提高准确性
一旦你有了一个机器学习算法的简短列表,你就需要充分利用它们。有两种不同的方法可以提高模型的准确性:
- 使用产生最佳结果的 Caret 搜索每个算法的参数组合。
- 使用独立算法或 caretEnsemble 包将多个模型的预测合并到一个集成预测中。
当一个项目变得具体时,这一步和前一步之间的界限会变得模糊。上一步可能会有一点算法调整。在集成的情况下,你可能会带来不仅仅是一个简短的算法列表来组合它们的预测。
6.最终确定模型
一旦你找到了一个你认为可以根据看不见的数据做出准确预测的模型,你就准备好完成它了。
最终确定模型可能涉及子任务,例如:
- 使用由 Caret 调整的最佳模型对看不见的数据进行预测。
- 使用 Caret 调整的参数创建独立模型。
- 将最佳模型保存到文件中以备后用。
一旦你走了这么远,你就准备好向利益相关者展示结果和/或部署你的模型,开始对看不见的数据进行预测。
良好使用模板的技巧
下面是一些小技巧,你可以利用它们来充分利用 r。
- 快速第一遍。尽可能快地完成项目的第一步。这将让你有信心,你有你需要的所有部分,并有一个底线来提高。
- 周期。这个过程不是线性的,而是循环的。你会在步骤之间循环,并且可能会在步骤 3-4 或 3-4-5 之间的紧密循环中花费你的大部分时间,直到你达到足够的准确率水平或者你没有时间了。
- 尝试每一步。跳过步骤很容易,尤其是如果你对该步骤的任务不自信或不熟悉的话。试着在过程的每一步做一些事情,即使它不能提高准确性。你可以以后再继续。不要跳过步骤,只是减少他们的贡献。
- 棘轮准确率。该项目的目标是模型的准确性。每一步都有助于实现这个目标。把你所做的改变和增加准确性的实验视为过程中的黄金路径,并重新组织围绕它们的其他步骤。准确性是一个只能朝一个方向移动的棘轮(更好,而不是更差)。
- 按需调整。根据项目需要修改步骤,尤其是当您对模板越来越有经验时。模糊任务的边缘,例如 4-5,以最好地服务于模型准确率。
你可以用 R 解决机器学习问题
不需要做 R 程序员。你可以使用这个博客和其他博客上的秘籍来启动你的机器学习项目,并依靠 R 帮助系统来理解所使用的功能和参数。
不需要成为机器学习专家。机器学习是一种经验技能,只有通过练习才能提高。现在就开始在内存中的小数据集上练习。
不需要成为机器学习算法的高手。机器算法太多了,不可能精通所有的算法。专注于擅长将机器学习算法应用于数据的目标要容易得多。使用上面的模板开始练习。
摘要
在这篇文章中,你发现了一个机器学习项目模板
它以最大化模型准确率为目标,列出了预测建模机器学习项目的步骤。
您可以复制并粘贴模板,并使用它在 r 中启动当前或下一个机器学习项目。
下一步
在项目中使用模板。
- 如果您目前正在或即将开始从事机器学习项目,请使用该模板。报告你如何使用模板和你需要做的任何修改。
- 没有项目?使用来自 UCI 机器学习资源库的标准小型内存机器学习数据集,从今天开始练习。如果可能的话就现在。
你对机器学习项目模板有疑问吗?在评论里问,我会尽力回答。
R 中的决策树非线性分类
最后更新于 2019 年 8 月 22 日
在这篇文章中,你将会发现 7 个非线性分类的方法
本文所有秘籍均使用数据集包中提供的鸢尾花数据集。该数据集描述了鸢尾花的测量结果,并要求对三种花卉中的一种进行分类。
用我的新书用 R 启动你的项目,包括一步一步的教程和所有例子的 R 源代码文件。
我们开始吧。
决策树分类 图片由 stwn 提供,保留部分权利
分类和回归树
分类和回归树(CART)根据最小化损失函数的值(如误差平方和)分割属性。
下面的方法演示了虹膜数据集的递归分割决策树方法。
# load the package
library(rpart)
# load data
data(iris)
# fit model
fit <- rpart(Species~., data=iris)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, iris[,1:4], type="class")
# summarize accuracy
table(predictions, iris$Species)
了解更多关于 rpart 功能和 rpart 包的信息。
C4.5
C4.5 算法是 ID3 算法的扩展,它构建了一个决策树来最大化信息增益(熵差)。
下面的方法演示了虹膜数据集上的 C4.5(在 Weka 中称为 J48)决策树方法。
# load the package
library(RWeka)
# load data
data(iris)
# fit model
fit <- J48(Species~., data=iris)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, iris[,1:4])
# summarize accuracy
table(predictions, iris$Species)
了解更多关于 J48 功能和 RWeka 集成的信息。
部分
PART 是一个规则系统,它为数据集创建剪枝的 C4.5 决策树,并提取规则,规则覆盖的那些实例将从训练数据中移除。重复该过程,直到所有实例都被提取的规则覆盖。
以下配方演示了虹膜数据集上的零件规则系统方法。
# load the package
library(RWeka)
# load data
data(iris)
# fit model
fit <- PART(Species~., data=iris)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, iris[,1:4])
# summarize accuracy
table(predictions, iris$Species)
了解更多关于零件功能和 RWeka 集成的信息。
装袋车
自举聚合(Bagging)是一种集成方法,它从同一数据集的不同子样本创建多个相同类型的模型。来自每个单独模型的预测被组合在一起以提供更好的结果。这种方法对于像决策树这样的高方差方法特别有效。
下面的方法演示了 bagging 在 iris 数据集递归分割决策树中的应用。
# load the package
library(ipred)
# load data
data(iris)
# fit model
fit <- bagging(Species~., data=iris)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, iris[,1:4], type="class")
# summarize accuracy
table(predictions, iris$Species)
了解更多关于装袋功能和智能包装的信息。
随机森林
随机森林是决策树装袋的变体,它通过将每个决策点的树的可用属性减少为随机子样本。这进一步增加了树的方差,需要更多的树。
下面的方法演示了应用于 iris 数据集的随机森林方法。
# load the package
library(randomForest)
# load data
data(iris)
# fit model
fit <- randomForest(Species~., data=iris)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, iris[,1:4])
# summarize accuracy
table(predictions, iris$Species)
了解更多关于随机森林功能和随机森林集成的信息。
梯度增压机
Boosting 是一种集成方法,开发用于分类以减少偏差,其中添加模型来学习现有模型中的错误分类错误。它以梯度提升机(GBM)的形式进行了推广和调整,用于 CART 决策树的分类和回归。
以下配方演示了虹膜数据集中的梯度提升机(GBM)方法。
# load the package
library(gbm)
# load data
data(iris)
# fit model
fit <- gbm(Species~., data=iris, distribution="multinomial")
# summarize the fit
print(fit)
# make predictions
predictions <- predict(fit, iris)
# summarize accuracy
table(predictions, iris$Species)
了解更多关于 gbm 功能和 gbm 包的信息。
增压 C5.0
C5.0 方法是 C4.5 的进一步扩展,也是该系列方法的巅峰。它很长一段时间都是私有的,尽管代码是最近发布的,并且在 C50 包中提供。
下面的方法演示了应用于虹膜数据集的 C5.0 增强方法。
# load the package
library(C50)
# load data
data(iris)
# fit model
fit <- C5.0(Species~., data=iris, trials=10)
# summarize the fit
print(fit)
# make predictions
predictions <- predict(fit, iris)
# summarize accuracy
table(predictions, iris$Species)
了解更多关于 C50 集成中 C5.0 功能的信息。
摘要
在这篇文章中,你发现了 7 个非线性分类的方法,它们使用了 R 中的决策树,使用了鸢尾花数据集。
每个配方都是通用的,可以根据自己的问题进行复制、粘贴和修改。
R 中的非线性分类
最后更新于 2019 年 8 月 22 日
在这篇文章中,你将发现 r 中的 8 种非线性分类方法。每种方法都可以为你自己的问题复制、粘贴和修改。
本文所有秘籍均使用数据集包中提供的鸢尾花数据集。该数据集描述了鸢尾花的测量结果,并要求对三种花卉中的一种进行分类。
用我的新书用 R 启动你的项目,包括一步一步的教程和所有例子的 R 源代码文件。
我们开始吧。
鸢尾花 dottieg 2007 摄影,版权所有
混合判别分析
这个方法演示了虹膜数据集上的 MDA 方法。
# load the package
library(mda)
data(iris)
# fit model
fit <- mda(Species~., data=iris)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, iris[,1:4])
# summarize accuracy
table(predictions, iris$Species)
了解更多关于 mda 包中 mda 功能的信息。
二次判别分析
QDA 寻求属性之间的二次关系,使类之间的距离最大化。
这个方法演示了虹膜数据集上的 QDA 方法。
# load the package
library(MASS)
data(iris)
# fit model
fit <- qda(Species~., data=iris)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, iris[,1:4])$class
# summarize accuracy
table(predictions, iris$Species)
了解更多关于质量包中 qda 功能的信息。
正则化判别分析
这个配方演示了虹膜数据集上的 RDA 方法。
# load the package
library(klaR)
data(iris)
# fit model
fit <- rda(Species~., data=iris, gamma=0.05, lambda=0.01)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, iris[,1:4])$class
# summarize accuracy
table(predictions, iris$Species)
了解更多关于 klaR 包中 rda 功能的信息。
神经网络
神经网络(NN)是一个计算单元的图形,这些计算单元接收输入并将结果转换成输出并传递出去。这些单元被排序成层,以将输入向量的特征连接到输出向量的特征。通过训练,例如反向传播算法,可以设计和训练神经网络来模拟数据中的潜在关系。
这个秘籍展示了虹膜数据集上的神经网络。
# load the package
library(nnet)
data(iris)
# fit model
fit <- nnet(Species~., data=iris, size=4, decay=0.0001, maxit=500)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, iris[,1:4], type="class")
# summarize accuracy
table(predictions, iris$Species)
了解更多关于网络包中网络功能的信息。
灵活判别分析
这个配方展示了美国食品和药物管理局在虹膜数据集上的方法。
# load the package
library(mda)
data(iris)
# fit model
fit <- fda(Species~., data=iris)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, iris[,1:4])
# summarize accuracy
table(predictions, iris$Species)
了解更多关于 mda 包中 fda 功能的信息。
支持向量机
支持向量机(SVM)是一种方法,它使用转换后的问题空间中的点来最好地将类分成两组。一对全方法支持多类分类。SVM 还通过用最小的容许误差量对函数建模来支持回归。
这个方法演示了虹膜数据集上的 SVM 方法。
# load the package
library(kernlab)
data(iris)
# fit model
fit <- ksvm(Species~., data=iris)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, iris[,1:4], type="response")
# summarize accuracy
table(predictions, iris$Species)
了解更多关于 kernlab 软件包中 ksvm 功能的信息。
k-最近邻
k-近邻(kNN)方法通过定位给定数据实例的相似案例(使用相似性函数)并返回最相似数据实例的平均值或大部分来进行预测。
这个方法演示了虹膜数据集上的 kNN 方法。
# load the package
library(caret)
data(iris)
# fit model
fit <- knn3(Species~., data=iris, k=5)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, iris[,1:4], type="class")
# summarize accuracy
table(predictions, iris$Species)
了解更多关于caret 包中 knn3 功能的信息。
朴素贝叶斯
朴素贝叶斯使用贝叶斯定理来建模每个属性与类变量的条件关系。
这个方法演示了虹膜数据集上的朴素贝叶斯。
# load the package
library(e1071)
data(iris)
# fit model
fit <- naiveBayes(Species~., data=iris)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, iris[,1:4])
# summarize accuracy
table(predictions, iris$Species)
了解更多关于 e1071 集成中天真贝氏功能的信息。
摘要
在这篇文章中,你发现了 8 个使用鸢尾花数据集进行非线性分类的方法。
每个配方都是通用的,可以根据自己的问题进行复制、粘贴和修改。
R 中的决策树非线性回归
最后更新于 2020 年 8 月 15 日
在这篇文章中,你将发现 8 个非线性回归的方法,决策树在 r。
本文中的每个示例都使用了 r 附带的数据集包中提供的 longley 数据集
longley 数据集描述了从 1947 年到 1962 年观察到的 7 个经济变量,用于预测每年的就业人数。
用我的新书用 R 启动你的项目,包括一步一步的教程和所有例子的 R 源代码文件。
我们开始吧。
决策树 图片作者凯蒂·沃克,版权所有
分类和回归树
分类和回归树(CART)根据最小化损失函数的值(如误差平方和)分割属性。
下面的方法演示了 longley 数据集上的递归分区决策树方法。
# load the package
library(rpart)
# load data
data(longley)
# fit model
fit <- rpart(Employed~., data=longley, control=rpart.control(minsplit=5))
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, longley[,1:6])
# summarize accuracy
mse <- mean((longley$Employed - predictions)²)
print(mse)
了解更多关于 rpart 功能和 rpart 包的信息。
条件决策树
条件决策树是使用统计测试来选择属性上的分割点而不是损失函数来创建的。
下面的方法演示了 longley 数据集上的条件推理树方法。
# load the package
library(party)
# load data
data(longley)
# fit model
fit <- ctree(Employed~., data=longley, controls=ctree_control(minsplit=2,minbucket=2,testtype="Univariate"))
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, longley[,1:6])
# summarize accuracy
mse <- mean((longley$Employed - predictions)²)
print(mse)
了解更多关于携程功能和派对套餐的信息。
模型树
模型树创建决策树,并在每个节点使用线性模型进行预测,而不是使用平均值。
下面的方法演示了 longley 数据集上的 M5P 模型树方法。
# load the package
library(RWeka)
# load data
data(longley)
# fit model
fit <- M5P(Employed~., data=longley)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, longley[,1:6])
# summarize accuracy
mse <- mean((longley$Employed - predictions)²)
print(mse)
了解更多关于 M5P 功能和 RWeka 集成的信息。
规则系统
可以通过从决策树中提取和简化规则来创建规则系统。
下面的方法演示了 longley 数据集上的 M5Rules 规则系统。
# load the package
library(RWeka)
# load data
data(longley)
# fit model
fit <- M5Rules(Employed~., data=longley)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, longley[,1:6])
# summarize accuracy
mse <- mean((longley$Employed - predictions)²)
print(mse)
了解更多关于 M5Rules 功能和 RWeka 集成的信息。
装袋车
自举聚合(Bagging)是一种集成方法,它从同一数据集的不同子样本创建多个相同类型的模型。来自每个单独模型的预测被组合在一起以提供更好的结果。这种方法对于像决策树这样的高方差方法特别有效。
下面的方法演示了将 bagging 应用于递归分区决策树。
# load the package
library(ipred)
# load data
data(longley)
# fit model
fit <- bagging(Employed~., data=longley, control=rpart.control(minsplit=5))
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, longley[,1:6])
# summarize accuracy
mse <- mean((longley$Employed - predictions)²)
print(mse)
了解更多关于装袋功能和智能包装的信息。
随机森林
随机森林是决策树装袋的变体,它通过将每个决策点的树的可用属性减少为随机子样本。这进一步增加了树的方差,需要更多的树。
# load the package
library(randomForest)
# load data
data(longley)
# fit model
fit <- randomForest(Employed~., data=longley)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, longley[,1:6])
# summarize accuracy
mse <- mean((longley$Employed - predictions)²)
print(mse)
了解更多关于随机森林功能和随机森林集成的信息。
梯度增压机
Boosting 是一种集成方法,开发用于分类以减少偏差,其中添加模型来学习现有模型中的错误分类错误。它以梯度提升机(GBM)的形式进行了推广和调整,用于 CART 决策树的分类和回归。
# load the package
library(gbm)
# load data
data(longley)
# fit model
fit <- gbm(Employed~., data=longley, distribution="gaussian")
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, longley)
# summarize accuracy
mse <- mean((longley$Employed - predictions)²)
print(mse)
了解更多关于 gbm 功能和 gbm 包的信息。
立体派的
立体决策树是另一种集成方法。它们像模型树一样构建,但是包含一个类似提升的过程,叫做委员会,它是类似规则的模型。
# load the package
library(Cubist)
# load data
data(longley)
# fit model
fit <- cubist(longley[,1:6], longley[,7])
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, longley[,1:6])
# summarize accuracy
mse <- mean((longley$Employed - predictions)²)
print(mse)
了解更多关于立体书功能和立体书集成的信息。
摘要
在这篇文章中,你发现了 r 中非线性回归决策树的 8 个方法。每个方法都可以复制粘贴到你自己的工作空间中,并根据你的需要进行修改。
有关更多信息,请参见库恩和约翰逊的应用预测建模第八章,该章为初学者提供了关于带有 R 的决策树的非线性回归的出色介绍。
R 中的非线性回归
最后更新于 2020 年 8 月 15 日
在这篇文章中,你将发现 r 中非线性回归的 4 个方法。
有许多高级方法可以用于非线性回归,这些方法只是您可以使用的方法的一个示例。
用我的新书用 R 启动你的项目,包括一步一步的教程和所有例子的 R 源代码文件。
我们开始吧。
非线性回归 史蒂夫·朱韦森摄,版权所有
本文中的每个示例都使用了 r 附带的数据集包中提供的 longley 数据集。longley 数据集描述了从 1947 年到 1962 年观察到的 7 个经济变量,用于预测每年的就业人数。
多元自适应回归样条
多元自适应回归样条(MARS)是一种非参数回归方法,它使用铰链函数(其中带有扭结的函数)对数据中的多种非线性进行建模。
# load the package
library(earth)
# load data
data(longley)
# fit model
fit <- earth(Employed~., longley)
# summarize the fit
summary(fit)
# summarize the importance of input variables
evimp(fit)
# make predictions
predictions <- predict(fit, longley)
# summarize accuracy
mse <- mean((longley$Employed - predictions)²)
print(mse)
了解更多关于接地功能和接地包的信息。
支持向量机
支持向量机(SVM) 是一类方法,最初是为分类而开发的,它可以找到最好地分离类别的支持点。用于回归的 SVM 称为支持向量回归(SVM)。
# load the package
library(kernlab)
# load data
data(longley)
# fit model
fit <- ksvm(Employed~., longley)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, longley)
# summarize accuracy
mse <- mean((longley$Employed - predictions)²)
print(mse)
了解更多关于 ksvm 功能和 kernlab 软件包的信息。
k-最近邻
k-近邻(kNN)并不创建模型,而是在需要预测时,根据需要从接近的数据创建预测。相似性度量(如欧几里德距离)用于定位接近的数据,以便进行预测。
# load the package
library(caret)
# load data
data(longley)
# fit model
fit <- knnreg(longley[,1:6], longley[,7], k=3)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, longley[,1:6])
# summarize accuracy
mse <- mean((longley$Employed - predictions)²)
print(mse)
了解更多关于 knnreg 功能和caret 包的信息。
神经网络
神经网络(NN)是一个计算单元的图形,它接收输入并将结果转换成输出并传递出去。这些单元被排序成层,以将输入向量的特征连接到输出向量的特征。通过训练,例如反向传播算法,可以设计和训练神经网络来模拟数据中的潜在关系。
# load the package
library(nnet)
# load data
data(longley)
x <- longley[,1:6]
y <- longley[,7]
# fit model
fit <- nnet(Employed~., longley, size=12, maxit=500, linout=T, decay=0.01)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, x, type="raw")
# summarize accuracy
mse <- mean((y - predictions)²)
print(mse)
了解更多关于连接功能和连接包的信息。
摘要
在这篇文章中,你发现了 4 种非线性回归方法,你可以复制粘贴它们来解决你自己的问题。
有关更多信息,请参见库恩和约翰逊的应用预测建模第七章,该章为初学者提供了非线性回归的优秀介绍。
R 中的惩罚回归
最后更新于 2020 年 8 月 15 日
在这篇文章中,你将发现 3 个 R 平台的惩罚回归方法。
你可以复制粘贴这篇文章中的秘籍,在自己的问题上做一个跳跃性的开始,或者用 r 中的线性回归来学习和练习。
用我的新书用 R 启动你的项目,包括一步一步的教程和所有例子的 R 源代码文件。
我们开始吧。
处罚回归 图片由湾区偏差提供,保留部分权利
本文中的每个示例都使用了 r 附带的数据集包中提供的 longley 数据集。longley 数据集描述了从 1947 年到 1962 年观察到的 7 个经济变量,用于预测每年的就业人数。
里脊回归
岭回归创建了一个线性回归模型,用平方系数之和的 L2 范数进行惩罚。这具有缩小系数值(以及模型的复杂性)的效果,允许对响应贡献较小的一些系数接近于零。
# load the package
library(glmnet)
# load data
data(longley)
x <- as.matrix(longley[,1:6])
y <- as.matrix(longley[,7])
# fit model
fit <- glmnet(x, y, family="gaussian", alpha=0, lambda=0.001)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, x, type="link")
# summarize accuracy
mse <- mean((y - predictions)²)
print(mse)
了解 glmnet 包中的 glmnet 功能。
最小绝对收缩和选择算子
最小绝对收缩和选择算子(LASSO)创建一个回归模型,用绝对系数之和的 L1 范数进行惩罚。这具有缩小系数值的效果(以及模型的复杂性),允许对响应影响较小的一些变为零。
# load the package
library(lars)
# load data
data(longley)
x <- as.matrix(longley[,1:6])
y <- as.matrix(longley[,7])
# fit model
fit <- lars(x, y, type="lasso")
# summarize the fit
summary(fit)
# select a step with a minimum error
best_step <- fit$df[which.min(fit$RSS)]
# make predictions
predictions <- predict(fit, x, s=best_step, type="fit")$fit
# summarize accuracy
mse <- mean((y - predictions)²)
print(mse)
了解 lars 包中的 lars 功能。
弹性网
弹性网创建了一个回归模型,该模型同时受到 L1 范数和 L2 范数的惩罚。这具有有效收缩系数(如在岭回归中)和将一些系数设置为零(如在 LASSO 中)的效果。
# load the package
library(glmnet)
# load data
data(longley)
x <- as.matrix(longley[,1:6])
y <- as.matrix(longley[,7])
# fit model
fit <- glmnet(x, y, family="gaussian", alpha=0.5, lambda=0.001)
# summarize the fit
summary(fit)
# make predictions
predictions <- predict(fit, x, type="link")
# summarize accuracy
mse <- mean((y - predictions)²)
print(mse)
了解 glmnet 包中的 glmnet 功能。
摘要
在这篇文章中,你发现了 3 个 r 中惩罚回归的方法。
惩罚是属性选择和提高预测模型准确率的有力方法。有关更多信息,请参见库恩和约翰逊的应用预测建模第六章,该章为初学者提供了关于 R 线性回归的出色介绍。
通过预处理为机器学习准备好数据
最后更新于 2019 年 8 月 22 日
为了从机器学习算法中获得最佳结果,需要准备数据。
在这篇文章中,您将发现如何转换您的数据,以便最好地使用 caret 包将其结构暴露给 R 中的机器学习算法。
你将通过 8 个流行和强大的数据转换与秘籍,你可以研究或复制和粘贴到你当前或下一个机器学习项目。
用我的新书用 R 启动你的项目,包括一步一步的教程和所有例子的 R 源代码文件。
我们开始吧。
预处理你的机器学习数据集在 R 照片由弗雷泽凯恩斯,一些权利保留。
数据预处理的需求
您希望从数据集上的机器学习算法中获得最佳准确率。
一些机器学习算法要求数据具有特定的形式。而如果数据是以特定的方式准备的,其他算法可以表现得更好,但并不总是如此。最后,您的原始数据可能不是最好的格式,无法最好地向预测变量展示底层结构和关系。
重要的是准备好你的数据,让它给各种不同的机器学习算法最好的机会来解决你的问题。
作为机器学习项目的一部分,您需要预处理原始数据。
数据预处理方法
很难知道使用哪些数据预处理方法。
您可以使用经验法则,例如:
- 如果输入属性具有相同的比例,基于实例的方法更有效。
- 回归方法可以更好地工作的输入属性是标准化的。
这些都是试探法,但并不是机器学习的硬性规律,因为有时候如果你忽略它们,你可以得到更好的结果。
你应该尝试一系列不同机器学习算法的数据转换。这将帮助您发现数据的良好表示和更好地利用这些表示公开的结构的算法。
一个好主意是单独抽查多个转换以及转换的组合。
在下一节中,您将发现如何应用数据转换,以便使用 Caret 包在 R 中准备数据。
R 语言中 Caret 的数据预处理
R 中的 Caret 包提供了许多有用的数据转换。
这些转换可以通过两种方式使用。
- 独立:变换可以从训练数据建模并应用于多个数据集。使用*预处理()函数准备变换模型,并使用预测()*函数将其应用于数据集。
- 训练:模型评估时可以自动准备和应用变换。在训练期间应用的变换使用*预处理()准备,并通过预处理参数传递给训练()*函数。
本节介绍了一些数据预处理示例。它们是使用独立的方法呈现的,但是您可以在模型训练过程中轻松地使用准备好的预处理模型。
本节中的所有预处理示例都是针对数值数据的。请注意,预处理函数将跳过非数字数据而不会产生错误。
您可以通过键入以下内容来阅读 preference 函数的帮助,从而了解 caret 包提供的数据转换的更多信息?通过阅读Caret 预处理页面,进行预处理。
所呈现的数据转换更可能对算法有用,例如回归算法、基于实例的方法(如 kNN 和 LVQ)、支持向量机和神经网络。它们不太可能对基于树和规则的方法有用。
变换方法综述
以下是 caret 中*prepare()*函数的方法参数支持的所有转换方法的快速摘要。
- " BoxCox ":应用 Box–Cox 变换,值必须非零且为正。
- " YeoJohnson ":应用一个 Yeo-Johnson 变换,像一个 BoxCox,但是值可以是负数。
- ”export trans”:应用像 BoxCox 和 YeoJohnson 这样的电源变换。
- “ zv ”:移除方差为零的属性(均为相同值)。
- " nzv ":移除方差接近于零(接近于相同值)的属性。
- “中心”:从数值中减去平均值。
- "刻度":用标准差除数值。
- “范围”:归一化值。
- “ pca ”:将数据转换为主成分。
- “ ica ”:将数据转换为独立的分量。
- “空间符号”:将数据投影到单位圆上。
以下几节将演示一些更流行的方法。
1.规模
比例变换计算属性的标准偏差,并将每个值除以该标准偏差。
# load libraries
library(caret)
# load the dataset
data(iris)
# summarize data
summary(iris[,1:4])
# calculate the pre-process parameters from the dataset
preprocessParams <- preProcess(iris[,1:4], method=c("scale"))
# summarize transform parameters
print(preprocessParams)
# transform the dataset using the parameters
transformed <- predict(preprocessParams, iris[,1:4])
# summarize the transformed dataset
summary(transformed)
运行配方,您将看到:
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Created from 150 samples and 4 variables
Pre-processing:
- ignored (0)
- scaled (4)
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :5.193 Min. : 4.589 Min. :0.5665 Min. :0.1312
1st Qu.:6.159 1st Qu.: 6.424 1st Qu.:0.9064 1st Qu.:0.3936
Median :7.004 Median : 6.883 Median :2.4642 Median :1.7055
Mean :7.057 Mean : 7.014 Mean :2.1288 Mean :1.5734
3rd Qu.:7.729 3rd Qu.: 7.571 3rd Qu.:2.8890 3rd Qu.:2.3615
Max. :9.540 Max. :10.095 Max. :3.9087 Max. :3.2798
2.中心
中心变换计算属性的平均值,并从每个值中减去它。
# load libraries
library(caret)
# load the dataset
data(iris)
# summarize data
summary(iris[,1:4])
# calculate the pre-process parameters from the dataset
preprocessParams <- preProcess(iris[,1:4], method=c("center"))
# summarize transform parameters
print(preprocessParams)
# transform the dataset using the parameters
transformed <- predict(preprocessParams, iris[,1:4])
# summarize the transformed dataset
summary(transformed)
运行配方,您将看到:
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Created from 150 samples and 4 variables
Pre-processing:
- centered (4)
- ignored (0)
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :-1.54333 Min. :-1.05733 Min. :-2.758 Min. :-1.0993
1st Qu.:-0.74333 1st Qu.:-0.25733 1st Qu.:-2.158 1st Qu.:-0.8993
Median :-0.04333 Median :-0.05733 Median : 0.592 Median : 0.1007
Mean : 0.00000 Mean : 0.00000 Mean : 0.000 Mean : 0.0000
3rd Qu.: 0.55667 3rd Qu.: 0.24267 3rd Qu.: 1.342 3rd Qu.: 0.6007
Max. : 2.05667 Max. : 1.34267 Max. : 3.142 Max. : 1.3007
3.使标准化
将规模和中心转换结合起来将使您的数据标准化。属性的平均值为 0,标准偏差为 1。
# load libraries
library(caret)
# load the dataset
data(iris)
# summarize data
summary(iris[,1:4])
# calculate the pre-process parameters from the dataset
preprocessParams <- preProcess(iris[,1:4], method=c("center", "scale"))
# summarize transform parameters
print(preprocessParams)
# transform the dataset using the parameters
transformed <- predict(preprocessParams, iris[,1:4])
# summarize the transformed dataset
summary(transformed)
请注意,当在 caret 中定义 PRofile 过程时,我们如何在列表中列出多个方法。运行配方,您将看到:
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Created from 150 samples and 4 variables
Pre-processing:
- centered (4)
- ignored (0)
- scaled (4)
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :-1.86378 Min. :-2.4258 Min. :-1.5623 Min. :-1.4422
1st Qu.:-0.89767 1st Qu.:-0.5904 1st Qu.:-1.2225 1st Qu.:-1.1799
Median :-0.05233 Median :-0.1315 Median : 0.3354 Median : 0.1321
Mean : 0.00000 Mean : 0.0000 Mean : 0.0000 Mean : 0.0000
3rd Qu.: 0.67225 3rd Qu.: 0.5567 3rd Qu.: 0.7602 3rd Qu.: 0.7880
Max. : 2.48370 Max. : 3.0805 Max. : 1.7799 Max. : 1.7064
4.使标准化
数据值可以缩放到[0,1]的范围内,这称为规范化。
# load libraries
library(caret)
# load the dataset
data(iris)
# summarize data
summary(iris[,1:4])
# calculate the pre-process parameters from the dataset
preprocessParams <- preProcess(iris[,1:4], method=c("range"))
# summarize transform parameters
print(preprocessParams)
# transform the dataset using the parameters
transformed <- predict(preprocessParams, iris[,1:4])
# summarize the transformed dataset
summary(transformed)
运行配方,您将看到:
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Created from 150 samples and 4 variables
Pre-processing:
- ignored (0)
- re-scaling to [0, 1] (4)
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.00000
1st Qu.:0.2222 1st Qu.:0.3333 1st Qu.:0.1017 1st Qu.:0.08333
Median :0.4167 Median :0.4167 Median :0.5678 Median :0.50000
Mean :0.4287 Mean :0.4406 Mean :0.4675 Mean :0.45806
3rd Qu.:0.5833 3rd Qu.:0.5417 3rd Qu.:0.6949 3rd Qu.:0.70833
Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :1.00000
5.Box-Cox 变换
当一个属性具有类似高斯的分布但被移动时,这被称为偏斜。属性的分布可以移动,以减少偏斜,使其更具高斯性。BoxCox 转换可以执行此操作(假设所有值都是正数)。
# load libraries
library(mlbench)
library(caret)
# load the dataset
data(PimaIndiansDiabetes)
# summarize pedigree and age
summary(PimaIndiansDiabetes[,7:8])
# calculate the pre-process parameters from the dataset
preprocessParams <- preProcess(PimaIndiansDiabetes[,7:8], method=c("BoxCox"))
# summarize transform parameters
print(preprocessParams)
# transform the dataset using the parameters
transformed <- predict(preprocessParams, PimaIndiansDiabetes[,7:8])
# summarize the transformed dataset (note pedigree and age)
summary(transformed)
注意,我们只对两个看起来有倾斜的属性应用了转换。运行配方,您将看到:
pedigree age
Min. :0.0780 Min. :21.00
1st Qu.:0.2437 1st Qu.:24.00
Median :0.3725 Median :29.00
Mean :0.4719 Mean :33.24
3rd Qu.:0.6262 3rd Qu.:41.00
Max. :2.4200 Max. :81.00
Created from 768 samples and 2 variables
Pre-processing:
- Box-Cox transformation (2)
- ignored (0)
Lambda estimates for Box-Cox transformation:
-0.1, -1.1
pedigree age
Min. :-2.5510 Min. :0.8772
1st Qu.:-1.4116 1st Qu.:0.8815
Median :-0.9875 Median :0.8867
Mean :-0.9599 Mean :0.8874
3rd Qu.:-0.4680 3rd Qu.:0.8938
Max. : 0.8838 Max. :0.9019
有关该转换的更多信息,请参见 Box-Cox 转换维基百科。
6.约-约翰逊变换
另一种幂变换,如 Box-Cox 变换,但它支持等于零和负值的原始值。
# load libraries
library(mlbench)
library(caret)
# load the dataset
data(PimaIndiansDiabetes)
# summarize pedigree and age
summary(PimaIndiansDiabetes[,7:8])
# calculate the pre-process parameters from the dataset
preprocessParams <- preProcess(PimaIndiansDiabetes[,7:8], method=c("YeoJohnson"))
# summarize transform parameters
print(preprocessParams)
# transform the dataset using the parameters
transformed <- predict(preprocessParams, PimaIndiansDiabetes[,7:8])
# summarize the transformed dataset (note pedigree and age)
summary(transformed)
运行配方,您将看到:
pedigree age
Min. :0.0780 Min. :21.00
1st Qu.:0.2437 1st Qu.:24.00
Median :0.3725 Median :29.00
Mean :0.4719 Mean :33.24
3rd Qu.:0.6262 3rd Qu.:41.00
Max. :2.4200 Max. :81.00
Created from 768 samples and 2 variables
Pre-processing:
- ignored (0)
- Yeo-Johnson transformation (2)
Lambda estimates for Yeo-Johnson transformation:
-2.25, -1.15
pedigree age
Min. :0.0691 Min. :0.8450
1st Qu.:0.1724 1st Qu.:0.8484
Median :0.2265 Median :0.8524
Mean :0.2317 Mean :0.8530
3rd Qu.:0.2956 3rd Qu.:0.8580
Max. :0.4164 Max. :0.8644
7.主成分分析
将数据转换成主成分。变换使分量保持在方差阈值以上(默认值=0.95),或者可以指定分量的数量(pcaComp)。结果是属性是不相关的,对于像线性和广义线性回归这样的算法很有用。
# load the libraries
library(mlbench)
# load the dataset
data(iris)
# summarize dataset
summary(iris)
# calculate the pre-process parameters from the dataset
preprocessParams <- preProcess(iris, method=c("center", "scale", "pca"))
# summarize transform parameters
print(preprocessParams)
# transform the dataset using the parameters
transformed <- predict(preprocessParams, iris)
# summarize the transformed dataset
summary(transformed)
请注意,当我们运行配方时,只选择了两个主要成分。
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Created from 150 samples and 5 variables
Pre-processing:
- centered (4)
- ignored (1)
- principal component signal extraction (4)
- scaled (4)
PCA needed 2 components to capture 95 percent of the variance
Species PC1 PC2
setosa :50 Min. :-2.7651 Min. :-2.67732
versicolor:50 1st Qu.:-2.0957 1st Qu.:-0.59205
virginica :50 Median : 0.4169 Median :-0.01744
Mean : 0.0000 Mean : 0.00000
3rd Qu.: 1.3385 3rd Qu.: 0.59649
Max. : 3.2996 Max. : 2.64521
8.独立成分分析
将数据转换为独立的组件。与主成分分析不同,独立成分分析保留了那些独立的成分。您必须使用 n.comp 参数指定所需独立组件的数量。对朴素贝叶斯等算法有用。
# load libraries
library(mlbench)
library(caret)
# load the dataset
data(PimaIndiansDiabetes)
# summarize dataset
summary(PimaIndiansDiabetes[,1:8])
# calculate the pre-process parameters from the dataset
preprocessParams <- preProcess(PimaIndiansDiabetes[,1:8], method=c("center", "scale", "ica"), n.comp=5)
# summarize transform parameters
print(preprocessParams)
# transform the dataset using the parameters
transformed <- predict(preprocessParams, PimaIndiansDiabetes[,1:8])
# summarize the transformed dataset
summary(transformed)
运行配方,您将看到:
pregnant glucose pressure triceps insulin mass pedigree
Min. : 0.000 Min. : 0.0 Min. : 0.00 Min. : 0.00 Min. : 0.0 Min. : 0.00 Min. :0.0780
1st Qu.: 1.000 1st Qu.: 99.0 1st Qu.: 62.00 1st Qu.: 0.00 1st Qu.: 0.0 1st Qu.:27.30 1st Qu.:0.2437
Median : 3.000 Median :117.0 Median : 72.00 Median :23.00 Median : 30.5 Median :32.00 Median :0.3725
Mean : 3.845 Mean :120.9 Mean : 69.11 Mean :20.54 Mean : 79.8 Mean :31.99 Mean :0.4719
3rd Qu.: 6.000 3rd Qu.:140.2 3rd Qu.: 80.00 3rd Qu.:32.00 3rd Qu.:127.2 3rd Qu.:36.60 3rd Qu.:0.6262
Max. :17.000 Max. :199.0 Max. :122.00 Max. :99.00 Max. :846.0 Max. :67.10 Max. :2.4200
age
Min. :21.00
1st Qu.:24.00
Median :29.00
Mean :33.24
3rd Qu.:41.00
Max. :81.00
Created from 768 samples and 8 variables
Pre-processing:
- centered (8)
- independent component signal extraction (8)
- ignored (0)
- scaled (8)
ICA used 5 components
ICA1 ICA2 ICA3 ICA4 ICA5
Min. :-5.7213 Min. :-4.89818 Min. :-6.0289 Min. :-2.573436 Min. :-1.8815
1st Qu.:-0.4873 1st Qu.:-0.48188 1st Qu.:-0.4693 1st Qu.:-0.640601 1st Qu.:-0.8279
Median : 0.1813 Median : 0.05071 Median : 0.2987 Median : 0.007582 Median :-0.2416
Mean : 0.0000 Mean : 0.00000 Mean : 0.0000 Mean : 0.000000 Mean : 0.0000
3rd Qu.: 0.6839 3rd Qu.: 0.56462 3rd Qu.: 0.6941 3rd Qu.: 0.638238 3rd Qu.: 0.7048
Max. : 2.1819 Max. : 4.25611 Max. : 1.3726 Max. : 3.761017 Max. : 2.9622
数据转换技巧
以下是充分利用数据转换的一些技巧。
- 实际使用它们。如果您正在考虑并使用数据转换来准备数据,那么您就领先了一步。这是一个容易忘记或跳过的步骤,通常会对最终模型的准确性产生巨大影响。
- 使用品种。使用一套不同的机器学习算法,在您的数据上尝试多种不同的数据转换。
- 回顾总结。最好总结一下转换前后的数据,以了解其效果。*总结()*功能非常有用。
- 可视化数据。可视化前后数据的分布也是一个好主意,这样可以对变换的效果有一个空间直觉。
摘要
在本节中,您发现了 8 种数据预处理方法,可以通过 caret 包对 R 中的数据使用这些方法:
- 数据缩放
- 数据居中
- 数据标准化
- 数据标准化
- 盒子-考克斯变换
- 约-约翰逊变换
- 主成分分析变换
- 独立分量分析变换
你可以用本节介绍的方法进行练习,或者将它们应用到你当前或下一个机器学习项目中。
下一步
你试过这些秘籍吗?
- 开始你的互动环境。
- 键入或复制粘贴上面的秘籍并试用。
- 使用 R 中的内置帮助来了解有关所用函数的更多信息。
你有问题吗?在评论里问,我会尽力回答。
R 的超快速成班(面向开发者)
最后更新于 2020 年 8 月 15 日
作为一名开发人员,你可以超快地获得 R。
如果你已经是一名开发人员,你不需要对一门新语言有太多的了解,就能阅读和理解代码片段,并编写自己的小脚本和程序。
在这篇文章中,您将发现开始读写 R 脚本所需了解的基本语法、数据结构和控制结构。
用我的新书用 R 启动你的项目,包括一步一步的教程和所有例子的 R 源代码文件。
我们开始吧。
r 开发者速成班 图片由hackNY.org提供,保留部分权利。
语法不同,但相同
R 中的语法看起来很混乱,但仅仅是开始。
这是一种更古老的 LISP 风格的语言,灵感来自一种更古老的语言。赋值语法可能是你会看到的最奇怪的东西。赋值使用箭头 ( < - ) 而不是单个等号(=)。
r 拥有所有你熟悉的控制流结构,比如 if-else,for-loops 和 while 循环。
您可以为脚本创建自己的函数和助手函数库。
如果你以前做过任何脚本,比如 JavaScript、Python、Ruby、BASH 或类似的,那么你会很快学会 R。
你已经可以编程了,只需要学习 R 语法
作为开发人员,你已经知道如何编程了。
你可以解决一个问题,想出你需要的过程和数据结构的类型。你使用的语言只是一个细节。您只需要将您对解决方案的想法映射到您正在使用的语言的细节上。
这就是如何快速开始使用 R 的方法。
要开始,你需要知道绝对的基础知识。基础知识,例如:
- 我们如何将数据分配给变量?
- 我们如何处理不同的数据类型?
- 我们如何使用数据结构来处理数据?
- 我们如何使用标准的流量控制结构?
- 如何使用函数和第三方包?
您可以通过查看代码示例来了解这些问题的答案。然后,您可以:
- 将您正在阅读的第三方代码映射到这些示例上,以便更好地理解它们。
- 根据示例对您从零开始编写的代码进行模式化。
让我们快速浏览一下 R 的基本语法
开发者速成班(从这里开始)
在本节中,我们将快速了解 r 中使用的基本语法
在阅读完(并且理想情况下是通读)本节中的示例后,作为开发人员,您将有足够的背景来开始阅读和理解其他人的 R 代码。
你也会有信心开始写自己的小 R 脚本。
本节中的示例分为以下几个部分:
- 分配
- 数据结构
- 流控制
- 功能
- 包装
启动 R 交互环境(在命令行上键入 R),让我们开始吧。
1.分配
R 中赋值的关键是赋值的箭头运算符(
下面是分配一个整数、双准确率、字符串和一个布尔值,并依次打印到控制台的例子。
> # integer
> i <- 23
> i
[1] 23
> # double
> d <- 2.3
> d
[1] 2.3
> # string
> s <- 'hello world'
> s
[1] "hello world"
> # boolean
> b <- TRUE
> b
[1] TRUE
记住,不要用等号(=)赋值。这是新 R 程序员犯的最大错误。
2.数据结构
有三种数据结构是你在 R 中最常用的:
- 向量
- 列表
- 矩阵
- 数据帧
列表
列表提供了一组命名项,这与地图并无不同。
# create a list of named items
a <- list(aa=1, bb=2, cc=3)
a
a$aa
# add a named item to a list
a$dd=4
a
您可以使用 list()函数定义一个新列表。列表可以用值初始化,也可以为空。请注意,可以使用美元运算符($)访问列表中的命名值。一旦被引用,它们就可以被读取或写入。这也是新项目可以添加到列表中的方式。
向量
向量是相同或不同类型的数据列表:
> # create a vector using the c() function
> v <- c(98, 99, 100)
> v
[1] 98 99 100
> v[1:2]
[1] 98 99
> # create a vector from a range of integers
> r <- (1:10)
> r
[1] 1 2 3 4 5 6 7 8 9 10
> r[5:10]
[1] 5 6 7 8 9 10
> # add a new item to the end of a vector
> v <- c(1, 2, 3)
> v[4] <- 4
> v
[1] 1 2 3 4
请注意,向量是 1 索引(索引从 1 开始,而不是从 0 开始)。
您将经常使用 c() 函数将变量连接成一个向量。
矩阵
矩阵是一个数据表。它有维度(行和列),列可以命名。
# Create a 2-row, 3-column matrix with named headings
> data <- c(1, 2, 3, 4, 5, 6)
> headings <- list(NULL, c("a","b","c"))
> m <- matrix(data, nrow=2, ncol=3, byrow=TRUE, dimnames=headings)
> m
a b c
[1,] 1 2 3
[2,] 4 5 6
> m[1,]
a b c
1 2 3
> m[,1]
[1] 1 4
许多有用的绘图和机器学习算法要求数据以矩阵形式提供。
请注意索引矩阵的行[1]和列[1]的语法。
数据帧
数据框对于在 r 中实际表示数据表非常有用
# create a new data frame
years <- c(1980, 1985, 1990)
scores <- c(34, 44, 83)
df <- data.frame(years, scores)
df[,1]
df$years
矩阵是更简单的结构,用于数学运算。数据帧更适合于表示数据表,并且是机器学习算法在 r
请注意,您可以像对矩阵一样对数据框的行和列进行索引。还要注意,您可以使用列名引用列( df$years )
其他一些你可以继续学习的数据结构是列表和数组。
3.流控制
r 支持所有你已经习惯的流量控制结构。
- 如果-那么-否则
- 用于循环
- 当循环
作为开发者,这些都是不言自明的。
如果-那么-否则
# if then else
a <- 66
if (a > 55) {
print("a is more than 55")
} else {
print("A is less than or equal to 55")
}
[1] "a is more than 55"
用于循环
# for loop
mylist <- c(55, 66, 77, 88, 99)
for (value in mylist) {
print(value)
}
[1] 55
[1] 66
[1] 77
[1] 88
[1] 99
当循环
# while loop
a <- 100
while (a < 500) {
a <- a + 100
}
a
[1] 500
4.功能
函数允许您对代码进行分组,并使用参数重复调用该代码。
关于功能的两个主要问题是:
- 调用函数
- 函数帮助
- 编写自定义函数
调用函数
您已经使用了一个函数,c()函数将对象连接成一个向量。
r 有很多内置功能,可以通过安装和加载第三方包来提供额外的功能。
下面是一个使用统计函数计算数字向量平均值的例子:
# call function to calculate the mean on a vector of integers
numbers <- c(1, 2, 3, 4, 5, 6)
mean(numbers)
[1] 3.5
函数帮助
您可以使用问号运算符(?)后跟函数名。
# help with the mean() function
?mean
help(mean)
或者,您可以调用 help() 函数,并将需要帮助的函数名作为参数传递(例如 help(mean) )。
您可以通过调用 example()函数并将函数的名称作为参数传递来获取函数的用法示例。
# example usage of the mean function
example(mean)
自定义函数
您可以定义自己的函数,这些函数可以接受也可以不接受参数或返回结果。
下面是一个计算和返回三个数字之和的自定义函数示例:
# define custom function
mysum <- function(a, b, c) {
sum <- a + b + c
return(sum)
}
# call custom function
mysum(1,2,3)
[1] 6
5.包装
包是第三方代码分发的方式。综合 R 档案网 (CRAN)提供托管和列表的第三方 R 包,你可以下载。
安装软件包
您可以通过调用一个函数来安装一个托管在 CRAN 上的包。然后,它会弹出一个对话框,询问您希望从哪个镜像下载软件包。
例如,下面是如何安装在机器学习中非常有用的 caret 包:
# install the caret package
install.packages("caret")
# load the package
library(caret)
软件包帮助
一个包可以提供很多新功能。你可以在一个包的 CRAN 页面上阅读它,但是你也可以使用库函数在 R 中获得这个包的帮助。
# help for the caret package
library(help="caret")
需要记住的 5 件事
以下是开始使用 R 时需要记住的五个快速提示:
- 分配。r 使用箭头运算符(< -),而不是一个等号(=)。
- 区分大小写。R 语言区分大小写,这意味着 C()和 C()是两个不同的函数调用。
- 帮助。您可以使用 help()函数或?运算符和使用双问号运算符(??).
- 如何退出。可以通过调用 q()函数退出 R 交互环境。
- 文件。r 安装有很多有用的文档。您可以在浏览器中通过键入: help.start() 进行查看
拿一本参考书
网上有很多很好的资源可以学习更多关于如何使用 r。
我建议抓住一个好的参考文本,并把它放在附近。我用推荐 R 简单说。
简而言之
摘要
在这篇文章中,你参加了一个基本的 R 语法速成班。
作为一名开发人员,你现在已经足够了解阅读其他人的 R 脚本了。
您还拥有在 R 交互环境中开始编写自己的小脚本的工具。
下一步
你看完所有的例子了吗?
- 开头的人
- 完成教程。
- 让我知道你怎么样了(留下评论)
你有什么问题吗?你还想吃点什么吗?
留言告诉我。
R 机器学习迷你课程
最后更新于 2019 年 8 月 22 日
14 天从开发者到机器学习实践者
在这个迷你课程中,您将发现如何在 14 天内使用 R 开始、构建准确的模型并自信地完成预测建模机器学习项目。
这是一个又大又重要的岗位。你可能想把它做成书签。
用我的新书用 R 启动你的项目,包括一步一步的教程和所有例子的 R 源代码文件。
我们开始吧。
这个迷你课程是给谁的?
在我们开始之前,让我们确保你在正确的地方。下面的列表提供了一些关于本课程是为谁设计的一般指南。
不要惊慌,如果你没有完全匹配这些点,你可能只需要在一个或另一个领域刷起来就能跟上。
- 懂得写一点代码的开发者。这意味着一旦你知道了基本的语法,再去学一门像 R 这样的新编程语言也不是什么大不了的事情。这并不意味着你是一个向导式的程序员,只是意味着你可以不费吹灰之力就能掌握一门基本的 C 语言。
- 懂一点机器学习的开发者。这意味着你知道机器学习的基础知识,比如交叉验证、一些算法和偏差方差权衡。这并不意味着你是一个机器学习博士,只是你知道地标或知道在哪里可以找到它们。
这门迷你课程既不是关于 R 的教科书,也不是关于机器学习的教科书。
它会带你从一个懂一点机器学习的开发者,变成一个能用 R 这个最强大、最受欢迎的机器学习平台得到结果的开发者。
迷你课程概述(期待什么)
这门迷你课程分为 14 节课,我称之为“日子”。
你可以每天完成一节课(推荐)或者一天内完成所有的课(硬核!).这真的取决于你有多少时间和你的热情程度。
以下是 14 节课,将让你开始在 R:
- 第 1 天:下载并安装 r
- 第二天:用基本语法在 R 中走动。
- 第 3 天:加载数据和标准机器学习数据集。
- 第 4 天:用描述性统计理解数据。
- 第 5 天:用可视化理解数据。
- 第 6 天:通过预处理数据为建模做准备。
- 第 7 天:采用重采样方法的算法评估。
- 第 8 天:算法评估指标。
- 第 9 天:抽查算法。
- 第 10 天:车型对比选择。
- 第 11 天:通过算法调整提高准确率。
- 第 12 天:通过集合预测提高准确性。
- 第 13 天:完成并保存您的模型。
- 第 14 天:你好世界端到端项目。
每节课可能需要你 60 秒或 30 分钟。慢慢来,按照自己的节奏完成课程。提问,甚至在下面的评论中发布结果。
这些课程期望你去发现如何做事。我会给你提示,但每节课的一部分要点是强迫你学会去哪里寻找关于 R 平台的帮助(提示,我所有的答案都直接在这个博客上,使用搜索)。
我确实在早期课程中提供了更多的帮助,因为我想让你建立一些信心和惰性。坚持住,不要放弃!
第一天:下载并安装 R
在进入该平台之前,您无法在 R 中开始机器学习。
今天的课很简单,你必须在你的电脑上下载并安装 R 平台。
- 访问 R 主页下载你的操作系统(Linux、OS X 或 Windows)的 R。
- 在计算机上安装 R。
- 通过键入“R”,第一次从命令行启动 R。
如果您需要安装 R 的帮助,请查看帖子:
第二天:用基本语法在休息时间四处走动
你需要能够读写基本的 R 脚本。
作为一名开发人员,你可以很快学会新的编程语言。r 区分大小写,对注释使用哈希(#),对赋值使用箭头运算符(
今天的任务是在 R 交互环境中练习 R 编程语言的基本语法。
- 用箭头运算符(
- 练习使用基本数据结构,如向量、列表和数据框。
- 练习使用流控制结构,如 If-Then-Else 和循环。
- 练习调用函数、安装和加载包。
例如,下面是一个创建数字列表并计算平均值的示例。
numbers <- c(1, 2, 3, 4, 5, 6)
mean(numbers)
如果你需要基本的 R 语法方面的帮助,请看帖子:
- R中的超快速成班。
第 3 天:加载数据和标准机器学习数据集
机器学习算法需要数据。您可以从 CSV 文件中加载自己的数据,但是当您在 R 中开始机器学习时,您应该在标准机器学习数据集上练习。
今天课程的任务是轻松地将数据加载到 R 中,并查找和加载标准机器学习数据集。
R 自带的数据集包有很多标准数据集,包括著名的鸢尾花数据集。 mlbench 包还包含标准的机器学习数据集。
- 练习使用 read.csv() 功能将 CSV 文件加载到 R 中。
- 练习从数据集和 mlbench 包加载标准机器学习数据集。
帮助:输入可以获得某个功能的帮助?函数名或者调用*帮助()*函数,并传递需要帮助的函数名作为参数。
为了让您开始,下面的代码片段将安装并加载 mlbench 包,列出它提供的所有数据集,并将 PimaIndiansDiabetes 数据集附加到您的环境中供您使用。
install.packages("mlbench")
library(mlbench)
data(package="mlbench")
data(PimaIndiansDiabetes)
head(PimaIndiansDiabetes)
干得好,走到这一步!坚持住。
到目前为止还有问题吗?在评论中提问。
第 4 天:用描述性统计数据理解数据
一旦你把数据加载到 R 中,你需要能够理解它。
你越能理解你的数据,你能建立的模型就越好、越准确。理解数据的第一步是使用描述性统计。
今天你的课程是学习如何使用描述性统计来理解你的数据。
- 使用 head() 函数查看前几行,了解您的数据。
- 使用 dim() 功能查看数据的尺寸。
- 使用*汇总()*功能查看您的数据分布。
- 使用 cor() 函数计算变量之间的成对相关性。
以下示例加载 iris 数据集并总结每个属性的分布。
data(iris)
summary(iris)
试试看!
第 5 天:通过可视化理解数据
从昨天的课程继续,你必须花时间更好地理解你的数据。
提高对数据理解的第二种方法是使用数据可视化技术(例如绘图)。
今天,您的课程是学习如何使用 R 中的绘图来单独理解属性及其交互。
- 使用 hist() 函数创建每个属性的直方图。
- 使用*方框图()*功能创建每个属性的方框图和触须图。
- 使用 pairs() 功能创建所有属性的成对散点图。
例如,下面的代码片段将加载 iris 数据集,并创建数据集的散点图矩阵。
data(iris)
pairs(iris)
第 6 天:通过预处理数据为建模做准备
您的原始数据可能没有设置为建模的最佳状态。
有时,您需要预处理数据,以便向建模算法最好地呈现数据中问题的固有结构。在今天的课程中,您将使用 caret 包提供的预处理功能。
Caret 包提供了*预处理()*函数,该函数使用方法参数来指示要执行的预处理类型。从数据集中准备好预处理参数后,可以对您可能拥有的每个数据集应用相同的预处理步骤。
请记住,您可以按如下方式安装和加载 Caret 包:
install.packages("caret")
library(caret)
- 使用刻度和中心选项标准化数值数据(例如,0 的平均值和 1 的标准偏差)。
- 使用范围选项标准化数值数据(例如 0-1 的范围)。
- 使用 BoxCox 选项探索更高级的电源转换,如 Box-Cox 电源转换。
例如,下面的代码片段加载 iris 数据集,计算标准化数据所需的参数,然后创建数据的标准化副本。
# load caret package
library(caret)
# load the dataset
data(iris)
# calculate the pre-process parameters from the dataset
preprocessParams <- preProcess(iris[,1:4], method=c("range"))
# transform the dataset using the pre-processing parameters
transformed <- predict(preprocessParams, iris[,1:4])
# summarize the transformed dataset
summary(transformed)
第 7 天:使用重采样方法的算法评估
用于训练机器学习算法的数据集称为训练数据集。用于训练算法的数据集不能用于为您提供新数据模型准确性的可靠估计。这是一个大问题,因为创建模型的整个想法是对新数据进行预测。
您可以使用称为重采样方法的统计方法将训练数据集划分为子集,一些子集用于训练模型,另一些子集被保留下来,用于根据看不见的数据估计模型的准确性。
今天课程的目标是练习使用 caret 包中可用的不同重采样方法。在 r 中查找 createDataPartition() 、 trainControl() 和 train() 函数的帮助
- 将数据集拆分为训练集和测试集。
- 使用 k 倍交叉验证估计算法的准确性。
- 使用重复的 k 倍交叉验证来估计算法的准确性。
下面的代码片段使用 Caret 包,使用 10 倍交叉验证来估计朴素贝叶斯算法在虹膜数据集上的准确性。
# load the library
library(caret)
# load the iris dataset
data(iris)
# define training control
trainControl <- trainControl(method="cv", number=10)
# estimate the accuracy of Naive Bayes on the dataset
fit <- train(Species~., data=iris, trControl=trainControl, method="nb")
# summarize the estimated accuracy
print(fit)
这一步需要更多帮助吗?
看看关于重采样方法的帖子:
- 如何使用 caret 包估计 R 中的模型准确率。
你意识到这是中途点了吗?干得好!
第 8 天:算法评估指标
有许多不同的度量可以用来评估数据集上机器学习算法的技能。
您可以在 train() 函数中的 Caret 中指定用于测试线束的度量,默认值可用于回归和分类问题。今天课程的目标是练习使用 caret 包中可用的不同算法表现指标。
- 练习在分类问题(例如虹膜数据集)上使用准确度和卡帕度量。
- 练习在回归问题上使用 RMSE 和 RSquared 度量(例如 longley 数据集)。
- 练习在二进制分类问题上使用 ROC 度量(例如, mlbench 包中的 PimaIndiansDiabetes 数据集)。
下面的代码片段演示了在 iris 数据集上计算 LogLoss 度量。
# load caret library
library(caret)
# load the iris dataset
data(iris)
# prepare 5-fold cross validation and keep the class probabilities
control <- trainControl(method="cv", number=5, classProbs=TRUE, summaryFunction=mnLogLoss)
# estimate accuracy using LogLoss of the CART algorithm
fit <- train(Species~., data=iris, method="rpart", metric="logLoss", trControl=control)
# display results
print(fit)
第 9 天:抽查算法
你不可能事先知道哪种算法对你的数据效果最好。
你必须通过反复试验来发现它。我称之为抽查算法。caret 包提供了许多机器学习算法和工具的接口,以比较这些算法的估计准确率。
在本课中,您必须练习抽查不同的机器学习算法。
- 抽查数据集上的线性算法(例如线性回归、逻辑回归和线性判别分析)。
- 抽查数据集上的一些非线性算法(例如 KNN、SVM 和 CART)。
- 抽查数据集上的一些复杂集成算法(例如随机森林和随机梯度提升)。
帮助:您可以通过键入:*名称(getmodeinfo())*获得可以在 Caret 中使用的模型列表
例如,下面的片段抽查了来自 mlbench 包的 Pima Indians 糖尿病数据集上的两个线性算法。
# load libraries
library(caret)
library(mlbench)
# load the Pima Indians Diabetes dataset
data(PimaIndiansDiabetes)
# prepare 10-fold cross validation
trainControl <- trainControl(method="cv", number=10)
# estimate accuracy of logistic regression
set.seed(7)
fit.lr <- train(diabetes~., data=PimaIndiansDiabetes, method="glm", trControl=trainControl)
# estimate accuracy of linear discriminate analysis
set.seed(7)
fit.lda <- train(diabetes~., data=PimaIndiansDiabetes, method="lda", trControl=trainControl)
# collect resampling statistics
results <- resamples(list(LR=fit.lr, LDA=fit.lda))
# summarize results
summary(results)
第 10 天:模型比较和选择
现在,您已经知道如何在数据集上抽查机器学习算法,您需要知道如何比较不同算法的估计表现,并选择最佳模型。
谢天谢地,caret 包提供了一套工具来绘制和总结模型之间的表现差异。
在今天的课程中,您将练习在 r
- 使用 summary() caret 函数创建结果表(提示,上一课有一个例子)
- 使用*点绘图()*Caret 函数比较结果。
- 使用 bwplot() Caret 函数比较结果。
- 使用 diff() Caret 函数计算结果之间的统计显著性。
下面的代码片段扩展了昨天的示例,并创建了抽查结果的图表。
# load libraries
library(caret)
library(mlbench)
# load the Pima Indians Diabetes dataset
data(PimaIndiansDiabetes)
# prepare 10-fold cross validation
trainControl <- trainControl(method="cv", number=10)
# estimate accuracy of logistic regression
set.seed(7)
fit.lr <- train(diabetes~., data=PimaIndiansDiabetes, method="glm", trControl=trainControl)
# estimate accuracy of linear discriminate analysis
set.seed(7)
fit.lda <- train(diabetes~., data=PimaIndiansDiabetes, method="lda", trControl=trainControl)
# collect resampling statistics
results <- resamples(list(LR=fit.lr, LDA=fit.lda))
# plot the results
dotplot(results)
第 11 天:通过算法调整提高准确性
一旦您找到一两个在数据集上表现良好的算法,您可能希望提高这些模型的表现。
提高算法表现的一种方法是根据您的特定数据集调整其参数。
caret 包提供了三种方法来搜索机器学习算法的参数组合。你今天课的目标是练习每一个。
- 自动调整算法的参数(例如参见列车()的调整长度参数)。
- 使用您指定的网格搜索来调整算法的参数。
- 使用随机搜索调整算法的参数。
查看列车控制()和列车()功能的帮助,注意方法和调谐网格参数。
下面使用的代码片段是在 iris 数据集上使用网格搜索随机森林算法的示例。
# load the library
library(caret)
# load the iris dataset
data(iris)
# define training control
trainControl <- trainControl(method="cv", number=10)
# define a grid of parameters to search for random forest
grid <- expand.grid(.mtry=c(1,2,3,4,5,6,7,8,10))
# estimate the accuracy of Random Forest on the dataset
fit <- train(Species~., data=iris, trControl=trainControl, tuneGrid=grid, method="rf")
# summarize the estimated accuracy
print(fit)
你快完了!再来几堂课。
第 12 天:提高集合预测的准确性
提高模型表现的另一种方法是组合多个模型的预测。
一些模型内置了这种功能,例如随机森林用于装袋,随机梯度提升用于提升。另一种称为堆叠(或混合)的集合类型可以学习如何最好地组合来自多个模型的预测,并在软件包Carestensemble中提供。
在今天的课程中,你将练习使用集成法。
- 用 caret 中的随机森林和装袋 CART 算法练习装袋集成。
- 在 caret 中使用梯度提升机和 C5.0 算法练习提升集成。
- 使用carestensemble包和 caretStack() 功能练习堆叠集成。
下面的代码片段演示了如何使用堆叠来组合来自多个模型的预测。
# Load packages
library(mlbench)
library(caret)
library(caretEnsemble)
# load the Pima Indians Diabetes dataset
data(PimaIndiansDiabetes)
# create sub-models
trainControl <- trainControl(method="cv", number=5, savePredictions=TRUE, classProbs=TRUE)
algorithmList <- c('knn', 'glm')
set.seed(7)
models <- caretList(diabetes~., data=PimaIndiansDiabetes, trControl=trainControl, methodList=algorithmList)
print(models)
# learn how to best combine the predictions
stackControl <- trainControl(method="cv", number=5, savePredictions=TRUE, classProbs=TRUE)
set.seed(7)
stack.glm <- caretStack(models, method="glm", trControl=stackControl)
print(stack.glm)
第 13 天:完成并保存您的模型
一旦你在你的机器学习问题上找到了一个表现良好的模型,你就需要完成它。
在今天的课程中,您将练习与最终确定模型相关的任务。
- 练习使用 predict() 函数,通过使用 Caret 训练的模型进行预测。
- 练习训练表现良好的模型的独立版本。
- 使用 saveRDS() 和 readRDS() 功能练习将训练好的模型保存到文件中并再次加载。
例如,下面的代码片段显示了如何在整个数据集上创建一个随机的森林算法。
# load package
library(randomForest)
# load iris data
data(iris)
# train random forest model
finalModel <- randomForest(Species~., iris, mtry=2, ntree=2000)
# display the details of the final model
print(finalModel)
第 14 天:你好世界端到端项目
您现在知道如何完成预测建模机器学习问题的每一项任务。
在今天的课程中,您需要练习将各个部分组合在一起,并通过标准的机器学习数据集进行端到端的工作。
- 端到端地处理 iris 数据集(机器学习的 hello 世界)
这包括以下步骤:
- 使用描述性统计和可视化来理解您的数据。
- 对数据进行预处理,以最好地揭示问题的结构。
- 使用您自己的测试工具抽查一些算法。
- 使用算法参数调整改善结果。
- 使用集成方法改进结果。
- 最终确定模型以备将来使用。
末日!(看看你已经走了多远)
你成功了。干得好!
花一点时间,回头看看你已经走了多远。
- 你开始时对机器学习很感兴趣,并强烈希望能够使用 r 练习和应用机器学习。
- 你下载、安装并启动了 R,也许是第一次,并开始熟悉语言的语法。
- 在大量的课程中,您慢慢地、稳定地了解了预测建模机器学习项目的标准任务是如何映射到 R 平台上的。
- 根据常见机器学习任务的秘籍,您使用 r 端到端地解决了第一个机器学习问题
- 使用一个标准模板,你已经收集的秘籍和经验,你现在能够自己解决新的和不同的预测建模机器学习问题。
不要轻视这一点,你在短时间内已经取得了很大的进步。
这只是你用 r 进行机器学习旅程的开始,继续练习和发展你的技能。
你觉得迷你课程怎么样?
你喜欢这个迷你课程吗?
你有什么问题吗?有什么症结吗?
让我知道。请在下面留言。
R 机器学习回顾
最后更新于 2020 年 8 月 16 日
如何在 R 中开始机器学习?
在这篇文章中,你会发现由布雷特·兰茨所著的《用 R 进行机器学习》一书,该书的目标是告诉你如何在 R 中开始练习机器学习。
我们覆盖了这本书的读者,对内容进行了深刻的细分,并总结了好的和坏的方面。
用我的新书用 R 启动你的项目,包括一步一步的教程和所有例子的 R 源代码文件。
我们开始吧。
注:我们在这篇评论中谈论的是第二版
带 R 的机器学习
谁应该读这本书?
有两种人应该读这本书:
- 机器学习实践者。你已经知道一些机器学习,你想学习如何使用 r 来练习机器学习。
- r 从业者。你是 R 的用户,你想学习足够的机器学习来用 R 练习。
从序言来看:
对基本的数学和编程概念有一点熟悉会很有帮助,但不需要以前的经验。
图书目录
本节将带您浏览本书涵盖的主题。
当我拿起一本新书时,我喜欢一步一步地读完每一章,看看它带给我的步骤或旅程。这本书的旅程如下:
- 什么是机器学习。
- 处理数据。
- 很多机器学习算法
- 评估模型准确性。
- 提高模型的准确性。
这涵盖了机器学习项目所需的许多任务,但确实遗漏了一些。
让我们浏览每一章,看看这本书提供了什么:
第一章:介绍机器学习
介绍机器学习、术语和(非常)高级的学习理论。
涵盖的主题包括:
- 机器学习的使用和滥用
- 机器是如何学习的
- 实践中的机器学习
- 带 R 的机器学习
有趣的是,机器学习伦理的话题被涵盖了,这是一个你不常看到的话题。
第二章:管理和理解数据
涵盖了 R 基础知识,但真正关注的是如何加载、总结和可视化数据。
主题包括:
- r 数据结构
- 用 R 管理数据
- 探索和理解数据
很多时间花在不同的图形类型上,我一般都喜欢。了解并使用一两个以上的图表是很好的。
第三章:懒惰学习-使用最近邻分类
本章介绍并演示了 k 近邻(kNN)算法。
涵盖的主题包括:
- 理解最近邻分类
- 示例–用 k-NN 算法诊断乳腺癌
我喜欢花在数据转换上的时间,这对 kNN 的准确性至关重要。
第四章:概率学习-使用朴素贝叶斯分类
本章介绍并演示了朴素贝叶斯分类算法。
涵盖的主题包括:
- 理解朴素贝叶斯
- 示例–使用朴素贝叶斯算法过滤手机垃圾邮件
我喜欢使用的有趣的案例研究问题。
第五章:分而治之——使用决策树和规则进行分类
本章介绍决策树和规则系统的算法 C5.0,1R 和 RIPPER。
涵盖的主题包括:
- 理解决策树
- 示例–使用 C5.0 决策树识别高风险银行贷款
- 理解分类规则
- 示例-与规则学习器一起识别毒蘑菇
我喜欢 C5.0 被覆盖,因为它已经被优先考虑了很长时间,直到最近才作为开源发布,并在 r .中提供。我很惊讶 CART 没有被覆盖,决策树算法的 hello 世界。
第六章:预测数字数据-回归方法
这一章是关于回归的,展示了线性回归、CART 和 M5P。
涵盖的主题包括:
- 理解回归
- 示例-使用线性回归预测医疗费用
- 理解回归树和模型树
- 示例-使用回归树和模型树评估葡萄酒的质量
看到这里涵盖的经典线性回归和 CART 很不错。M5P 手感也不错。
第七章:黑盒方法——神经网络和支持向量机
本章介绍了人工神经网络和支持向量机。
涵盖的主题包括:
- 理解神经网络
- 示例–用人工神经网络模拟混凝土强度
- 理解支持向量机
- 示例–使用支持向量机执行光学字符识别
很高兴看到这些算法被涵盖,示例问题也很有趣。
第八章:寻找模式-使用关联规则的市场篮子分析
本章介绍并演示了关联规则算法,通常用于市场篮子分析。
涵盖的主题包括:
- 理解关联规则。
- 示例-使用关联规则识别经常购买的杂货
这不是一个我非常喜欢的话题,也不是一个我在项目中必须使用的算法。我会放弃这一章。
第九章:寻找数据组——用 k 均值聚类
本章介绍了 k-means 聚类算法,并在数据上进行了演示。
涵盖的主题包括:
- 理解聚类
- 示例–使用 k 均值聚类发现青少年细分市场
另一个我可能会放弃的深奥话题。聚类很有趣,但通常无监督学习算法在实践中很难很好地使用。这是一些集群。
第十章:评估模型表现
本章介绍评估模型技能的方法。
涵盖的主题包括:
- 测量分类表现
- 评估未来绩效
我喜欢表现测量和重采样方法被覆盖。很多短信都跳过了。我喜欢将大量时间花在更详细的分类准确性问题上(例如,触及卡帕和 F1 的分数)。
第十一章:提高模型表现
本章介绍了可以用来提高模型准确率的技术,即算法调整和集成。
涵盖的主题包括:
- 调整股票模型以获得更好的业绩
- 利用元学习提高模型表现
很好,但是太短了。算法调整和集成是现代机器学习中建立精确模型的一个重要部分。长度可能是合适的,因为它是一个介绍性的文本,但应该给 caret 包更多的时间。
如果你没有在 R 中使用 Caret 进行机器学习,那你就做错了。
第十二章:专用机器学习主题
本章包含一大堆其他主题,包括:
- 使用专有文件和数据库
- 使用在线数据和服务
- 使用特定于域的数据
- 提高 R 的表现
题目很专业。也许只有关于“提高 R 的表现”的最后一条对你的机器学习项目来说才是真正可行的。
机器学习算法
这本书涵盖了许多不同的机器学习算法。本节列出了所有涉及的算法,并在哪一章可以找到它们。
我注意到,这本书的第 21 页确实提供了章节的算法查找表,但它太高级了,掩盖了所用算法的实际名称。
- k 近邻(第三章)
- 朴素贝叶斯(第四章)
- C5.0(第五章)
- 1R(第五章)
- 裂土器(第五章)
- 线性回归(第六章)
- 分类和回归树(第六章)
- M5P(第六章)
- 人工神经网络(第七章)
- 支持向量机(第七章)
- 先验(第八章)
- k-means(第九章)
- 袋装手推车(第十章)
- AdaBoost(第十章)
- 随机森林(第十章)
我如何看待这本书?
我喜欢这本书作为如何在 R 平台上做机器学习的入门。
你必须知道如何编程。你必须懂一点 r .你必须对如何从头到尾驱动一个机器学习项目有所了解。这本书不会涵盖这些主题,但它将向您展示如何使用 r 完成常见的机器学习任务。
相应地设定你的期望:
- 这是一本实用的书,有工作实例和高级算法描述。
- 这不是一本有理论、有证明、有大量方程的机器学习教科书。
赞成的意见
- 我喜欢用不同的数据集演示每个算法的结构化示例。
- 我喜欢数据集内存小的例子,也许全部来自 UCI 机器学习资源库。
- 我喜欢在适当的地方提供研究论文的参考,以便进一步阅读。
- 我喜欢总结算法和其他关键技术使用信息的盒子。
- 我喜欢它实际上专注于机器学习的方式,而不是深层的原因。
骗局
- 我不喜欢它如此注重算法。它概括了大多数“应用书籍”的结构,并向您转储了大量算法,而不是扩展的项目生命周期。
- 我不喜欢没有端到端的例子(问题定义、模型选择、结果展示)。例子的形式结构很好,但我想我会有一个深入的案例研究章节。
- 我无法从 GitHub 存储库中或作为 zip 下载代码和数据集。我已经注册并完成了他们的流程。
- 那里有一些章节感觉它们只是在那里,因为类似的章节存在于其他机器学习书籍中(聚类和关联规则)。这些可能是机器学习方法,但没有核心预测建模方法(IMHO)使用频率高。
- 可能填料有点多。我喜欢少说多做。如果我想要长的算法描述,我会读一本算法教科书。告诉我大概的笔画,让我们开始吧。
一锤定音
如果你想找一本好的带 R 的机器学习应用书,这就是了。喜欢给懂一点机器学习和/或一点 R,想在 R 平台上练习机器学习的初学者。
尽管我认为奥莱利的书通常比帕克特更好的应用书籍,但我没有看到奥莱利能与之竞争的产品。
如果你想更深入一步,获得更多的理论和解释,我建议查看:应用预测建模。如果你想要更多的数学,我会建议统计学习导论:在 R 中的应用。
两本书都有 R 方面的例子,但较少关注 R,更多关注机器学习算法的细节。
资源
下一步
你读过这本书吗?让我知道你在评论中的想法。
你打算买这本书吗?有什么问题吗?评论里告诉我,我会尽力回答。