你的数据集应该使用哪种算法?
这是应用机器学习中最常见的问题。这是一个只能通过反复试验来回答的问题,或者我称之为:抽查算法。
在这篇文章中,你将学习如何使用R在数据集上抽查算法。包括测试选项、评估指标和算法的选择。
你可以使用本文中的代码作为模板,在自己的问题上抽查机器学习算法。
通过我的新书《R语言机器学习精通》启动你的项目,书中包含分步教程和所有示例的R源代码文件。
让我们开始吧。

使用R评估机器学习算法
图片由Brian Townsley拍摄,保留部分权利。
针对特定问题的最佳算法
你希望为你的数据集获得最准确的模型。这就是预测建模的目标。
没有人能告诉你,在你的数据集上使用哪种算法能获得最佳结果。如果你或任何人知道哪种算法能为特定数据集提供最佳结果,那么你可能根本不需要使用机器学习,因为你对问题有深入的了解。
我们无法预先知道哪种最佳算法表示形式或用于该表示形式的学习算法。我们甚至不知道要用于我们可能尝试的算法的最佳参数。
我们需要一个策略来为我们的数据集找到最佳算法。
根据过往经验选择算法
选择问题算法的一种方法是依靠经验。
这可能是你过去处理类似问题的经验。它也可能是该领域的集体经验,你可以参考有关类似问题的论文、书籍和其他资源,以了解过去哪些算法效果良好。
这是一个好的开始,但你不应该止步于此。
通过反复试验选择算法
为你的数据集发现良好甚至最佳算法的最可靠方法是反复试验。在你的数据集上评估一系列不同的算法,看看哪些有效,哪些无效。
我将这个过程称为抽查算法。
一旦你确定了一组算法,它们能很好地识别你的问题结构,你就可以将精力集中在这些算法上。
你可以通过调整算法参数或使用集成方法组合多个模型的预测来改进候选算法的结果。
接下来,我们来看看如何在R中评估数据集上的多个机器学习算法。
需要更多关于R机器学习的帮助吗?
参加我为期14天的免费电子邮件课程,了解如何在您的项目中使用R(附带示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
在R中抽查算法
在本节中,你将通过一个案例研究,在R中评估一套算法解决测试问题。
此示例中使用的测试问题是一个二元分类数据集,称为Pima Indians数据集。数据描述了女性患者的医疗详细信息,以及她们在接受医疗评估后五年内是否出现糖尿病的布尔输出变量。
你可以在此处了解有关此数据集的更多信息:Pima Indians糖尿病数据集。
你可以在此处了解有关此数据集的更多信息
本案例研究分为3个部分
- 定义测试工具。
- 从数据构建多个预测模型。
- 比较模型并选择一个候选列表。
我们将使用R中的caret包,因为它提供了数百种不同机器学习算法的优秀接口以及用于评估和比较模型的有用工具。
有关caret的更多信息,请参阅文章
我们来定义测试工具
1. 测试工具
测试工具由三个关键要素组成
- 我们将用于训练模型的数据集。
- 用于评估模型的测试选项(例如,重采样方法)。
- 我们有兴趣测量和比较的指标。
测试数据集
我们用于抽查算法的数据集应该能代表我们的问题,但它不必包含我们所有的数据。
抽查算法必须快速。如果我们的数据集很大,可能会导致我们想要检查的一些计算密集型算法需要很长时间才能训练。
在抽查时,我使用的经验法则是每个算法应该在1-2分钟内训练完成(理想情况下在30秒内)。我发现少于10,000个实例(行)通常是一个不错的规模,但这会因数据集而异。
如果你有一个大型数据集,可以抽取一些不同的随机样本和一个简单的模型(glm),看看训练需要多长时间。选择一个落在最佳范围内的样本大小。
我们可以在以后研究样本大小对表现良好的算法候选列表的影响。
此外,一旦你有了更有前景的算法子集,你可以在以后用更大的数据集重复这个实验。
我们来加载库和我们的糖尿病数据集。它随mlbench包一起分发,所以我们可以直接加载它。
1 2 3 4 5 6 7 8 |
# 加载库 library(mlbench) library(caret) # 加载数据 data(PimaIndiansDiabetes) # 重命名数据集以使下面的代码通用 dataset <- PimaIndiansDiabetes |
只有768个实例,因此在本案例研究中,我们将使用所有这些数据来抽查我们的算法。
请注意,在一个完整的端到端项目中,我建议保留一个验证数据集,以便对表现最佳的模型进行客观的最终评估。
测试选项
测试选项是指用于评估模型在未见数据上的准确性的技术。在统计学中,它们通常被称为重采样方法。
我通常推荐的测试选项是
- 训练/测试分割:如果你有大量数据并确定需要大量数据来构建准确模型。
- 交叉验证:5折或10折提供了计算速度和通用误差估计之间常用的权衡。
- 重复交叉验证:5折或10折交叉验证并重复3次或更多次以提供更稳健的估计,仅当你的数据集很小且可以承担时间时。
在本案例研究中,我们将使用10折交叉验证并重复3次。
1 2 |
control <- trainControl(method="repeatedcv", number=10, repeats=3) seed <- 7 |
请注意,我们正在将一个随机数种子分配给一个变量,以便我们可以在训练每个算法之前重置随机数生成器。
这对于确保每个算法都在完全相同的数据分割上进行评估非常重要,以便以后进行真正的“苹果对苹果”的比较。
有关测试选项的更多信息,请参阅文章
有关在caret中使用所有三种推荐测试选项以及更多示例,请参阅文章
测试指标
有许多可能的评估指标可供选择。Caret提供了很好的选择,如果需要,你也可以使用自己的指标。
适用于不同问题类型的一些良好测试指标包括
分类
- 准确性:x个正确除以y个总实例。易于理解且广泛使用。
- Kappa:可以很容易地理解为考虑了类别基本分布的准确性。
回归
- RMSE:均方根误差。同样,易于理解且广泛使用。
- R平方:拟合优度或决定系数。
其他流行的衡量标准包括ROC和LogLoss。
评估指标在给定模型的train()函数调用中指定,因此我们现在将为所有后续模型训练定义该指标。
1 |
metric <- "Accuracy" |
在文章中了解有关测试指标的更多信息
2. 模型构建
选择要抽查的模型时有三个考虑因素
- 实际选择哪些模型。
- 如何配置它们的参数。
- 算法的数据预处理。
算法
重要的是要有一个良好的算法表示形式(线条、树、实例等)以及用于学习这些表示形式的算法的混合。
我使用的经验法则是“每种类型都有一些”,例如在二元分类的情况下
- 线性方法:线性判别分析和逻辑回归。
- 非线性方法:神经网络、支持向量机、kNN和朴素贝叶斯。
- 树和规则:CART、J48和PART
- 树的集成方法:C5.0、Bagged CART、随机森林和随机梯度提升
你需要一些低复杂度的易于解释的方法(如LDA和kNN),以防它们表现良好,你可以采用它们。你还需要一些复杂的方法(如随机森林),看看问题是否可以学习,并开始建立对准确性的期望。
有多少算法?至少10到20种不同的算法。
算法配置
几乎所有机器学习算法都是参数化的,需要你指定它们的参数。
好消息是,大多数算法参数都有启发式方法,你可以用来提供算法的首次配置,以启动工作。
当我们进行抽查时,我们不想尝试算法参数的许多变体,那是在以后改进结果时才进行。我们还希望给每个算法一个展示其能力的机会。
R中caret包的一个方面是它有助于调整算法参数。它还可以估计良好的默认值(通过自动调优功能和train()函数中的tunelength参数)。
我建议在抽查时对大多数(如果不是全部)算法使用默认值,除非你查找一些合理的默认值或对给定算法有一些经验。
数据预处理
一些算法在经过一些基本数据预处理后表现会好得多。
你需要给每个算法一个公平展示其优势的机会,因此对于那些需要预处理的算法,将其包含在训练中很重要。
例如,如果所有输入变量都具有相同的尺度,许多基于实例的算法会表现得好很多。
幸运的是,caret中的train()函数允许你指定在训练之前要执行的数据预处理。你需要的转换以列表形式提供给preProcess参数,并按顺序对数据执行。
最有用的转换是通过缩放和居中数据。例如
1 |
preProcess=c("center", "scale") |
算法抽查
以下是我们在此糖尿病案例研究中将要抽查的模型。
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 26 27 28 29 30 31 32 33 |
# 线性判别分析 set.seed(seed) fit.lda <- train(diabetes~., data=dataset, method="lda", metric=metric, preProc=c("center", "scale"), trControl=control) # 逻辑回归 set.seed(seed) fit.glm <- train(diabetes~., data=dataset, method="glm", metric=metric, trControl=control) # GLMNET set.seed(seed) fit.glmnet <- train(diabetes~., data=dataset, method="glmnet", metric=metric, preProc=c("center", "scale"), trControl=control) # 支持向量机(径向核) set.seed(seed) fit.svmRadial <- train(diabetes~., data=dataset, method="svmRadial", metric=metric, preProc=c("center", "scale"), trControl=control, fit=FALSE) # kNN set.seed(seed) fit.knn <- train(diabetes~., data=dataset, method="knn", metric=metric, preProc=c("center", "scale"), trControl=control) # 朴素贝叶斯 set.seed(seed) fit.nb <- train(diabetes~., data=dataset, method="nb", metric=metric, trControl=control) # CART set.seed(seed) fit.cart <- train(diabetes~., data=dataset, method="rpart", metric=metric, trControl=control) # C5.0 set.seed(seed) fit.c50 <- train(diabetes~., data=dataset, method="C5.0", metric=metric, trControl=control) # 袋装CART set.seed(seed) fit.treebag <- train(diabetes~., data=dataset, method="treebag", metric=metric, trControl=control) # 随机森林 set.seed(seed) fit.rf <- train(diabetes~., data=dataset, method="rf", metric=metric, trControl=control) # 随机梯度提升(广义提升建模) set.seed(seed) fit.gbm <- train(diabetes~., data=dataset, method="gbm", metric=metric, trControl=control, verbose=FALSE) |
你可以看到算法类型很好的混合。
你可以看到所有算法都使用了默认的(自动估计的)算法参数,没有调优网格(caret如何调优算法)。
你还可以看到那些受益于重新缩放数据的算法已设置了preProcess参数。
有关抽查算法的更多信息,请参阅文章
3. 模型选择
现在我们已经训练了大量且多样化的模型,我们需要评估和比较它们。
在此阶段,我们不是在寻找最佳模型。算法尚未进行调优,它们的所有结果可能都比你目前看到的好很多。
现在的目标是选择少数几个(可能2到5个)多样化且表现良好的算法,以便进一步研究。
1 2 3 4 5 |
results <- resamples(list(lda=fit.lda, logistic=fit.glm, glmnet=fit.glmnet, svm=fit.svmRadial, knn=fit.knn, nb=fit.nb, cart=fit.cart, c50=fit.c50, bagging=fit.treebag, rf=fit.rf, gbm=fit.gbm)) # 表格比较 summary(results) |
你可以看到我们已将算法结果汇总为表格。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Models: lda, logistic, glmnet, svm, knn, nb, cart, c50, bagging, rf, gbm Number of resamples: 30 准确度 Min. 1st Qu. Median Mean 3rd Qu. Max. NA's lda 0.6711 0.7532 0.7662 0.7759 0.8052 0.8701 0 logistic 0.6842 0.7639 0.7713 0.7781 0.8019 0.8701 0 glmnet 0.6842 0.7557 0.7662 0.7773 0.8019 0.8701 0 svm 0.6711 0.7403 0.7582 0.7651 0.7890 0.8961 0 knn 0.6753 0.7115 0.7386 0.7465 0.7785 0.8961 0 nb 0.6316 0.7305 0.7597 0.7569 0.7869 0.8571 0 cart 0.6234 0.7115 0.7403 0.7382 0.7760 0.8442 0 c50 0.6711 0.7273 0.7468 0.7586 0.7785 0.8831 0 bagging 0.6883 0.7246 0.7451 0.7530 0.7792 0.8571 0 rf 0.6711 0.7273 0.7516 0.7617 0.7890 0.8571 0 gbm 0.6974 0.7273 0.7727 0.7708 0.8052 0.8831 0 |
使用一些不同的可视化技术来审查结果也很有用,以便了解准确性的平均值和分布。
1 2 3 4 |
# 箱线图比较 bwplot(results) # 点图比较 dotplot(results) |
从这些结果来看,线性方法在这个问题上表现良好。我可能会进一步研究logistic、lda、glmnet和gbm。

R箱线图比较机器学习算法

R点图比较机器学习算法
如果我有更多数据,我可能会用更大的样本重复实验,看看大型数据集是否能提高任何树方法的性能(通常会)。
良好算法抽查的技巧
以下是一些可用于在R中更好地评估机器学习算法的技巧。
- 速度。快速获得结果。使用小样本数据和简单的算法参数估计。周转时间应为几分钟到一小时。
- 多样性。使用多样化的算法选择,包括表示形式和相同表示形式的不同学习算法。
- 规模扩大。不要害怕安排后续的抽查实验,使用更大的数据样本。这些可以在夜间或在更大的计算机上运行,并且有助于发现那些仅在大样本下表现良好的算法(例如树)。
- 候选列表。你的目标是创建一个算法候选列表,以便进一步研究,而不是优化准确性(还不是时候)。
- 启发式。最佳实践算法配置和已知适合你问题的算法是很好的起点。用它们来启动你的抽查实验。有些算法只有在特定的参数配置下才开始显示出准确性。
你可以在R中抽查算法
你不需要成为机器学习专家。你可以从运行上述案例研究并查看结果开始。你可以通过阅读案例研究中使用的R函数和机器学习算法来深入了解。
你不需要是R程序员。本文中的案例研究是完整的,将产生结果。你可以复制它,在你的工作站上运行它,并将其作为你当前或下一个项目的模板。
你不需要知道如何配置算法。R中的train()函数可以自动估计合理的默认值作为起点。你现在不需要指定算法参数。你可能稍后在调优期间需要,R中特定机器学习函数的帮助通常也提供你可以使用的示例参数,以及关于算法本身的研究论文。
你不需要收集自己的数据。有许多R包提供了小的、标准的、内存中的数据集,你可以用它们来练习分类和回归机器学习问题。在这个例子中,我们使用了mlbench包。
你不需要大量数据。你的小数据样本非常适合抽查算法。你想要快速获得结果,小数据样本是实现这一目标的最佳方式。
总结
在这篇文章中,你发现了在你的问题上抽查机器学习算法的重要性。
你发现抽查是找到给定数据集上良好甚至最佳机器学习算法的最佳方法。
你通过R中的caret包完成了一个案例研究,并评估了10多种不同的算法解决二元分类问题。
你现在拥有一个用于抽查算法的模板,可以在你当前或下一个机器学习项目中使用。
下一步
你完成案例研究了吗?
- 启动您的 R 交互式环境。
- 输入或复制粘贴每个代码片段。
- 花点时间理解正在发生的事情,并阅读所使用的函数。
你有什么问题吗?请在评论中提问,我将尽力回答。
嗨,Jason,
感谢你非常详细的解释。我一直在使用非常类似的方法来比较使用Caret的算法,但根据你的文章,我发现我需要对我的方法进行一些调整。我有几个问题
1. 我知道某些算法(SVM、神经网络模型等)没有内置的特征选择功能,而许多其他算法(如随机森林)有。我担心在算法选择过程中不包括特征选择步骤,我会不公平地对待那些在变量集较小的情况下表现更好的算法。将特征选择(基于变量重要性)整合到算法选择过程中的最佳方法是什么?
2. 你建议对回归使用哪10种算法?我的数据集通常有3000-5000个实例,每个实例有20-40个变量。
谢谢,
Jai
嗨,Jai,很好的问题!
我喜欢创建许多训练数据的“表示”或“视图”,然后对每个视图运行一套10-20个算法。有些视图将是转换后的,有些将应用了特征选择,等等。
抽查算法变成m个视图 * n个算法 * o个交叉验证折叠 * p次重复。
至于回归算法,我常用的方法有:线性回归、惩罚线性回归(例如lasso和elasticnet)、CART、SVM、神经网络、MARS、KNN、随机森林、梯度提升树以及最近的Cubist。
希望这能有所帮助。
谢谢你,Jason!这真的很有帮助!
嗨,Jason,感谢分享所有这些宝贵的信息!
目前我正在处理一个包含数值和分类输入以及数值目标变量的数据文件。大约50,000行和50个变量。请告诉我,在这种情况下你会使用哪种方法?你是否已经写过一篇关于类似情况的文章?谢谢!Sharon
这可能有帮助
https://machinelearning.org.cn/faq/single-faq/what-algorithm-config-should-i-use
我正在尝试重现你的代码。你能提供用于加载数据集和命名列的代码行吗?
我从https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes加载了csv文件
我猜你模型中的因变量“diabetes”在第7列。糖尿病谱系函数?
嗨,Paul,
加载数据集的行在第一个代码块中
# 加载数据
data(PimaIndiansDiabetes)
“PimaIndiansDiabetes”数据集是mlbench包的一部分,但我的系统上没有安装。我安装了它,现在我确实可以使用以下命令加载数据:
data(PimaIndiansDiabetes)
谢谢。
嗨,再次,
“算法抽查”部分中调用的大多数函数都返回以下消息
“错误:train.default(x, y, weights = w, …)
指标准确性不适用于回归模型”
你好,
我也有类似的问题,但解决方案很简单
dataset$diabetes= factor(dataset$diabetes, levels = c(0, 1))
(我认为从数据集中实际上是$Outcome)
棒极了!非常非常有用。谢谢。
diabetes~.是什么意思?
“diabetes~.”是R中数据框公式接口的一个例子。
它是一个方程,描述了一个模型,该模型根据“~”所有其他属性“.”来预测“diabetes”结果变量。
我将很快写一篇关于公式接口的文章。在此之前,这里有一些更多信息
https://stat.ethz.ch/R-manual/R-devel/library/stats/html/formula.html
嗨,我非常感谢这篇文章。写得非常好,解释也很清楚。但我还有几个技术问题...
Q1. 你正在用哪些特征来拟合模型?(使用所有特征子集可能不公平,因为有些模型在所有特征子集上可能表现不佳,但在特征选择后可能会给出更好的结果)
Q2. 接下来是什么?😛(我的意思是,在你选择了2-5个可以使用的模型之后,你如何在其中选择最佳模型?)
我使用全套特征,但在实践中你应该进行特征选择。
根据性能(最大化)和复杂性(最小化)选择模型。
调整表现最好的模型,集成结果,然后呈现模型/预测。
悖论来了。使用混合过滤-包装器模型进行特征选择,包括使用分类器来找到最佳特征。因此,每个机器学习算法的最佳特征子集将是不同的。例如,随机森林的最佳特征子集可能是{f1,f9,f17,f23},但随机森林可能是{f1,f9,f28,f46,f55}。运行包装器非常昂贵和缓慢,因此我需要决定将其应用于哪些算法。所以基本上,为了应用特征选择,我需要决定一个算法,而为了决定算法,我需要应用特征选择。你对此有什么看法?我的任务基本上是决定从10个算法中选择2个应用特征选择。使用完整的子集不会表明哪个算法在特征选择后会表现更好。例如,在你的例子中,logistic、gbm、lda在完整的子集上给出了良好的结果,但在为每个模型选择最佳特征子集后,c50或knn可能会给出最高的准确性。请告诉我如何处理这个问题。我非常感谢你抽出时间帮助我。谢谢。🙂
嗨,Raag,
一般来说,包装器特征选择方法会得到相似甚至相同的子集。考虑取一个更小的数据子集以提高速度,并尝试几个包装器,最终得到你的问题的几个不同“视图”。然后对这些视图尝试一套算法,以发现哪个视图+算法在你的问题上表现良好。
嗨,Jason!这是个好信息。但我有个问题。
在算法抽查中,我们要抽查的糖尿病案例研究模型。
你使用了11种算法。但在你的代码中,有些算法代码没有使用preProc参数。
你为什么没有在某些算法中使用preProc?
祝你有个美好的一天
一时兴起。有些算法受益于缩放,有些则不然。
嗨,Jason。我还有一个问题。
在第3章模型选择中,你说“在此阶段,我们不是在寻找最佳模型。算法尚未调优,它们的所有结果可能都比你目前看到的好很多”。
你的意思是“抽查算法”的目的是寻找合适的算法,而不是最佳算法。对吗??
那么,抽查算法的目的是寻找一些合适的算法。之后,我应该调优这些合适的算法吗??
祝你有美好的一天!
是的。其想法是快速找到一些表现良好的算法,你可以进行调整并充分利用它们。
这里的准确度0.80 = 80%的性能吗?
正确。
有什么提示可以让示例代码适用于回归吗?
> fit.lda # 逻辑回归
> set.seed(seed)
> fit.glm # GLMNET
> set.seed(seed)
> fit.glmnet # SVM径向核
> set.seed(seed)
> fit.svmRadial # kNN
> set.seed(seed)
> fit.knn # 朴素贝叶斯
> set.seed(seed)
> fit.nb # CART
> set.seed(seed)
> fit.cart # C5.0
> set.seed(seed)
> fit.c50 # 袋装CART
> set.seed(seed)
> fit.treebag # 随机森林
> set.seed(seed)
> fit.rf # 随机梯度提升(广义提升建模)
> set.seed(seed)
> fit.gbm results # 表格比较
> summary(results)
抱歉,文本被删除了……
我使用自己的数据集(列:date=日期,n2=数字)得到了模型的以下消息:
fit.lda
错误:回归模型类型错误
fit.glm
错误:指标准确性不适用于回归模型
fit.glmnet
错误:指标准确性不适用于回归模型
fit.svmRadial
错误:指标准确性不适用于回归模型
fit.knn
错误:指标准确性不适用于回归模型
fit.nb
错误:回归模型类型错误
fit.cart
错误:指标准确性不适用于回归模型
fit.c50
错误:回归模型类型错误
fit.treebag
错误:指标准确性不适用于回归模型
fit.rf
错误:指标准确性不适用于回归模型
fit.gbm
错误:指标准确性不适用于回归模型
这怎么可能呢?
这个实验中的预测变量是什么?
它们是自动从数据集中选择的吗?
你是指输出变量吗?它是最后一列。所有其他列都作为输入变量。
这显然是一个分类实验。
在非回归上下文中,“预测变量”可能是一个错误的术语。
你会将输入变量称为“预测变量”还是“特征”?
数据集的一行可以看作是:“x1,x2,x3,x4,x5,x6,x7,x8,y”吗?
我称它们为特征。预测变量也可以。如果是Excel,就称之为列。
类“diabetes”是否代表csv-only-version中的列标题?
假设我们找到了一个表现良好的模型。那么如何使用该拟合模型预测未见数据呢?
我找到了一些例子,但没什么真正有用的。
https://www.rdocumentation.org/packages/glmnet/versions/2.0-5/topics/predict.glmnet
在糖尿病示例的上下文中,我们如何定义所谓的“newx”?
predict(fit3,newx=x[1:3,],type=”response”,s=0.01)
请参阅这篇关于如何最终确定模型并在新数据上进行预测的文章
https://machinelearning.org.cn/finalize-machine-learning-models-in-r/
嗨,Jason,在这篇文章中,你似乎使用了数据集中的所有数据?我们不应该在运行训练模型之前将其分为训练/测试集,然后验证我们收到的结果摘要在新数据中是否成立吗?
也许我错过了什么
我们正在使用K折交叉验证,这是一种对未见数据模型技能进行估计的偏差较小的方法。
嗨,Jason,
fit.rf <- train(diabetes~., data=dataset, method="rf", metric=metric, trControl=control)
需要什么算法才能找出该过程中生成的树数量的详细信息?
它将使用默认的树数量,根据记忆可能是100。你可以在rf包中查看。
嗨,Jason,
我将不平衡数据分割为训练集和测试集,然后我使用训练数据进行K折验证以优化不平衡类模型,此外我还在优化平衡类模型(处理不平衡类之后)。我的问题是,为什么我的最终不平衡类模型的准确性比平衡类模型的准确性低(我使用测试数据对这些最终模型进行评估)?
谢谢你
我建议不要使用准确性作为不平衡数据的衡量标准,因为它无法有意义地报告模型的技能。
也许你可以使用AUC、logloss、kappa或F1?
嗨,Jason,
如果我使用F1来衡量最终模型和测试数据的评估结果,我是否不需要查看测试数据的比例?为什么?
抱歉,我不明白。也许你能重新陈述你的问题?
嗨,Jason,
你对多系列机器学习分类有什么想法吗?谢谢
神经网络可能是用于多个时间序列作为输入和/或输出的一个好的起点。
你好,先生
我如何估计不同分类器的运行时间??
进行预测?你为什么要对预测进行计时?
大多数分类器都非常高效地进行预测。
你可以对训练进行计时,但训练通常是一次性活动。
嗨,Jason,
当我执行rf算法时,为什么会显示此错误消息?
错误:指标Kappa不适用于回归模型
Kappa用于分类,而你正在尝试将其用于回归问题。
这非常有帮助,谢谢。
这可能是一个愚蠢的问题,如果冒犯了,我表示歉意:如果我使用重复交叉验证,我需要仅在数据的训练子集上运行我的模型,然后使用该模型预测测试数据,还是可以直接使用整个数据集运行模型?换句话说,重复交叉验证是否“处理”了重采样,以至于我不需要对数据进行分区?然后我将使用confusionMatrix之类的函数评估预测准确性?
另外,如果我的结果变量有3个级别,其中一个只对应约10%的观测值,那是不是个问题?
再次感谢!!
交叉验证用于整个数据集。
模型技能将是跨折叠和重复的平均分数,例如准确性。
嗨,Jason,
我有一个问题。如何独立检查每个模型的准确性。请告诉我。
例如
fit.lda <- train(diabetes~., data=dataset, method="lm", metric=metric, preProc=c("center", "scale"), trControl=control)
线性回归
如你所列。
你好。谢谢你的教程。我有两个问题。
在训练中,我们使用所有数据集吗?像这样
fit <- train(alldata[,-38], alldata[,38],method = "rpart",trControl = trainControl(method = "LOOCV"),parms = list(split = "information"))
另一个问题是:如何评估准确性?
方法1:打印fit,可以看到一个准确性。
方法2
pred <- predict(fit,newdata=alldata[,-38])
confusionMatrix(fit2pred,x$Abandonou) #从这里获取准确性?
在R中,从训练好的模型中获取准确性、kappa、混淆矩阵的正确形式是什么?
是的。
报告平均准确率。
你可以使用其他指标,文档中解释了更多内容
http://topepo.github.io/caret/index.html
谢谢你...我从这个网站学到了很多东西...我有一个问题,你能告诉我如何将2个机器学习算法一起用于训练模型吗?
具体是哪方面?集成模型?
嗨,Jason,
感谢以上内容。
您建议如何在使用测试数据后确定模型的准确性?
我知道如何计算拟合模型的 R 平方,但我发现预测值后很难为测试数据计算。
我的模型是连续的(回归)
谢谢
当我在分类问题中使用它时,它显示错误