在本贴中,您将发现 R 中 3 种线性分类算法的实现方法。
本帖中的所有实现都使用了 R 随附的 鸢尾花数据集,该数据集包含在 datasets 包中。该数据集描述了鸢尾花的测量值,并需要将每个观测值分类到三个鸢尾花物种之一。
使用我的新书 Machine Learning Mastery With R 启动您的项目,其中包含分步教程和所有示例的R 源代码文件。
让我们开始吧。

红与蓝
图片由 Robert Couse-Baker 拍摄,部分权利保留
逻辑回归
逻辑回归是一种分类方法,用于建模一个观测值属于两个类别之一的概率。因此,通常逻辑回归会用二元分类问题(2 个类别)来演示。在本例中,逻辑回归也可用于具有两个以上类别(多项式)的问题。
此实现演示了在鸢尾花数据集上使用多项逻辑回归方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 加载包 library(VGAM) # 加载数据 data(iris) # 拟合模型 fit <- vglm(Species~., family=multinomial, data=iris) # 总结拟合 summary(fit) # 进行预测 probabilities <- predict(fit, iris[,1:4], type="response") predictions <- apply(probabilities, 1, which.max) predictions[which(predictions=="1")] <- levels(iris$Species)[1] predictions[which(predictions=="2")] <- levels(iris$Species)[2] predictions[which(predictions=="3")] <- levels(iris$Species)[3] # 总结准确度 table(predictions, iris$Species) |
在 VGAM 包中详细了解 vglm 函数。
需要更多关于R机器学习的帮助吗?
参加我为期14天的免费电子邮件课程,了解如何在您的项目中使用R(附带示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
线性判别分析
LDA 是一种分类方法,它找到数据属性的最佳线性组合来区分数据到不同的类别。
此实现演示了在鸢尾花数据集上使用 LDA 方法。
1 2 3 4 5 6 7 8 9 10 11 |
# 加载包 library(MASS) data(iris) # 拟合模型 fit <- lda(Species~., data=iris) # 总结拟合 summary(fit) # 进行预测 predictions <- predict(fit, iris[,1:4])$class # 总结准确度 table(predictions, iris$Species) |
在 MASS 包中详细了解 lda 函数。
偏最小二乘判别分析
偏最小二乘判别分析(PLSDA)是将 LDA 应用于输入数据的降维投影(偏最小二乘)。
此实现演示了在鸢尾花数据集上使用 PLSDA 方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 加载包 library(caret) data(iris) x <- iris[,1:4] y <- iris[,5] # 拟合模型 fit <- plsda(x, y, probMethod="Bayes") # 总结拟合 summary(fit) # 进行预测 predictions <- predict(fit, iris[,1:4]) # 总结准确度 table(predictions, iris$Species) |
在 caret 包中详细了解 plsda 函数。
总结
在本帖中,您发现了 3 种可以复制粘贴到您自己的项目中使用的线性分类算法的实现。
嗨 Jason
我对这个研究领域还很陌生,您激励了我开始写关于我学习内容的博客帖子。快速问一下,您是如何在帖子中显示代码块的?
谢谢
Anne-Marie
这是一个很棒的赞美,谢谢 Anne-Marie。
我使用 Crayon Syntax Highlighter WordPress 插件在我的博客上提供代码片段。
祝您博客一切顺利,我很想看看您会写出什么!
您的网站还在使用 WordPress 吗?
Andrew 你好……是的,还在用。
嗨,Jason,
我现在正在学习 R 中的朴素贝叶斯分类,但我之前也多次使用过逻辑回归。这两种方法似乎都将概率应用于分类——有什么理由说明哪一种更好,或者一种方法在特定情况下会更好吗?
谢谢!
Taylor,你说得很对。这很难提前判断。最好的建议是尝试并抽查每种算法,以了解哪种算法最能把握问题的结构。
即使了解了这些方法的假设,在实践中也帮助不大——朴素贝叶斯(NaiveBayes)及其严格的独立性假设,即使在某些具有紧密耦合属性的情况下也能做得很好。
嗨 Jasson 😀
谢谢分享 . . . 😀
你好
如果我的问题太简单,请原谅。您在代码中使用了“Species~.”,我不确定它的意思。我的理解是您正在使用物种作为预测的特征。您能否详细解释一下代码,好吗?
感谢您的教程。
Neg,“Species~.”的意思是“Species”是结果,而数据集中所有其他变量是输入协变量。
谢谢 Jason 的分享!
这是什么解释?
‘There were 20 warnings (use warnings() to see them)
In checkwz(wz, M = M, trace = trace, wzepsilon = control$wzepsilon)
2 elements replaced by 1.819e-12’
我可以忽略这些警告吗?
是的,您可以忽略这些警告。
我尝试了逻辑回归,但为什么输出有两个不同的值,例如 Length1、Length2、Width1、Width2?哪个是准确的?它是什么意思?