R 数据分析示例:利用 Iris 虹膜数据集学习分类和可视化
当您开始分析数据时,最先接触到的数据集之一就是虹膜数据。 虹膜数据集该数据集是一个经典的 R 数据分析示例,通常用于学习数据分析的基础知识。它要解决的问题是根据鸢尾花的几个特征(花瓣和萼片的长度和宽度)对每个样本所属的品种进行分类。

在本文章中,您将学习如何使用 Iris 数据集作为 R 数据分析示例来探索和可视化数据,并创建一个简单的分类模型。 继续阅读,了解有关分类和可视化的重要信息!
虹膜数据集概览
虹膜数据集该数据集包含有关鸢尾花形态的信息,有助于解决从数据中预测鸢尾花品种的问题。数据集由 150 个样本组成,每个样本有四个特征(萼片长度、萼片宽度、花瓣长度和花瓣宽度)。其中 数据分析示例我们将了解如何根据这些特征对三个鸢尾品种(Setosa、Versicolor 和 Virginica)进行分类。
加载和探索数据
让我们从使用 R 导入 Iris 数据开始,进行一些探索。 马兰花 数据集是内置的,因此无需安装。
从 R 中加载数据
导入 # 虹膜数据集
data(iris)
检查 # 数据结构
str(iris)
summary(iris)
head(iris)
马兰花 数据集分为五列,每列包含以下变量
萼片长度:花萼长度萼片宽度花萼宽度花瓣.长度花瓣长度花瓣宽度花瓣宽度物种鸢尾花:品种(Setosa、Versicolor、Virginica)
数据结构说明
上面的代码允许您创建一个 马兰花 您可以查看数据结构并探索汇总统计数据。 对于每个属性,您都可以查看平均值、中位数、最小值和最大值等基本统计数据,从而了解数据的总体分布情况。
R 数据分析示例 数据可视化
探索完数据后,重要的是将其可视化,以便直观地了解每个属性之间的关系。R 的 ggplot2 软件包使可视化操作变得简单。在此 数据分析示例我们将用散点图来表示花瓣和萼片的长度和宽度。
用 R 绘制散点图
# 安装并加载 ggplot2
# install.packages("ggplot2") #ggplot2 如果软件包未安装,请安装。
library(ggplot2)
# 可视化花瓣和萼片的长度和宽度
ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = Species)) +
geom_point(size = 3) +
labs(title = "按花瓣长度和宽度划分的品种分布", x = "花瓣长度", y = "花瓣宽度")运行该代码后,您将看到一个散点图,该图根据花瓣的长度和宽度直观地显示了鸢尾花品种的分布情况。我们给不同的品种涂上了不同的颜色,这样你就能一目了然地看到数据的分布情况。
在这个可视化图中,您可以看到 Setosa 与其他两个品种明显分开,而 Versicolor 和 Virginica 有一些重叠。
建立 K-NN 分类模型
现在添加一个简单的 分类模式这次,我们将使用 K 近邻(K-NN)算法来预测虹膜的种类。 K-NN 是一种简单直观的算法,在给定一个新数据点时,会参考其 K 个近邻的数据对其进行分类。
在 R 中构建 K-NN 模型
安装并加载 # 先决条件软件包
install.packages("class")
类库
将 # 数据集拆分为训练集和测试集
set.seed(123)
index <- sample(1:nrow(iris), 0.7 * nrow(iris))
train_data <- iris[index, ]
test_data <- iris[-index, ]
训练和预测 # K-NN 模型
train_labels <- train_data$Species
test_labels <- test_data$Species
knn_pred <- knn(train = train_data[, -5], test = test_data[, -5], cl = train_labels, k = 3)
检查 # 预测结果
table(knn_pred, test_labels)
# 执行结果数据 #
测试标签
knn_pred setosa versicolor virginica
setosa 14 0 0
versicolor 0 17 0
virginica 0 1 13上述代码相当于 K-NN 算法来预测虹膜数据集中的虹膜品种。将训练数据和测试数据分开后,它对测试数据进行品种预测,并将结果与实际值进行比较。
评估预测结果
评估预测结果的一种方法是使用 混淆矩阵通过混淆矩阵,您可以一目了然地看到模型预测的准确度,以及有多少样本被错误分类。在上面的代码中 表格() 函数来比较预测值和实际值,可以输出混淆矩阵,但很难立即分析其含义。
因此,在评估 K-NN 分类模型的性能时,我们通常使用 精确度, 回顾, F1 分数 来具体分析模型的性能。
蛩 包或 e1071 软件包可以轻松计算精确度、召回率和 F1 分数。在这里,我们将使用 蛩 我们将介绍如何使用软件包来获取它。
1. 安装并加载 Caret 软件包
首先,创建一个 蛩 让我们安装并加载软件包。
# 根据需要安装软件包
# install.packages("caret")
library(caret)2. 生成混淆矩阵并评估性能
表格() 功能,使用自己创建的混淆矩阵来评估性能,但 蛩 软件包的 混淆矩阵() 通过各种功能,您可以自动计算精确度、召回率、F1 分数等。
生成 # 混淆矩阵并评估其性能
confusion_matrix <- confusionMatrix(knn_pred, test_labels)
打印 # 结果
print(confusion_matrix)运行这段代码时,您会看到每个类的 精确度, 重现性, F1 分数以及 准确性到最后。
3. 解释结果
混淆矩阵() 函数返回一个包含各种性能指标的结果。我们将在此介绍主要指标:
- 精确度在某一类别的预测值中,实际属于该类别的数据比例。
- 回顾是正确预测的实际属于该类的数据的百分比。
- F1 分数精确度和召回率的调和平均值,可对这两个值进行均衡评估。
- 准确性:预测正确的数据占总数据的百分比。
4. 示例结果
混淆矩阵() 函数的结果大致如下
混淆矩阵和统计
参考文献
预报 setosa versicolor virginica
setosa 14 0 0
versicolor 0 17 0
virginica 0 1 13
总体统计
精确度 : 0.9778
95% ci : (0.8887, 0.9994)
无信息率 : 0.3556
P-Value [Acc > NIR] : < 2e-16
卡帕值 : 0.9662
麦克尼玛检验 P 值 : NA
班级统计
等级:setosa 等级:versicolor 等级:virginica
灵敏度 1.0000 0.9444 1.0000
特异性 1.0000 1.0000 0.9722
正预测值 1.0000 1.0000 0.9286
阴性预测值 1.0000 0.9667 1.0000
流行率 0.2889 0.3556 0.3556
检测率 0.2889 0.3333 0.3556
检测流行率 0.2889 0.3333 0.3833
平衡精度 1.0000 0.9722 0.9861每个关键指标的解释:
- 敏感性召回率。表示预测值与实际值的匹配程度。
- 特异性是对数据预测效果的衡量标准,而不是对具体类别的衡量标准。
- Pos Pred Value精度,即预测正确率。
- 负预测值指正确预测中未预测到的比例。
- 准确性预测正确率:预测正确率占预测总数的百分比。
这样,您就可以更具体地评估和分析模型的性能。
数据分析中的常见错误及纠正方法
这一次 数据分析示例以下是一些避免初学者常见错误的提示。
- 忽视数据预处理:在分析数据之前,必须处理缺失值、异常值等。虹膜数据没有缺失值,但其他数据集必须进行预处理。
- 选择适当的 K 值在 K-NN 模型中
k选择一个合适的值非常重要。K 值过小会导致过度拟合,而 K 值过大则会遗漏重要的模式。 - 不重视数据分区注意:在划分训练数据和测试数据时,确保随机抽样,否则模型可能会偏向某些数据。
常见问题
问题 1:在哪里可以下载虹膜数据集?
答:R 默认内置了虹膜数据集,因此您无需下载。 data(iris) 您可以用命令来调用它。
问题 2: 如何设置 K-NN 模型中的 K 值?
答:K 值通常设置为奇数,我们建议使用交叉验证来找到最佳 K 值。根据数据集的大小和分布情况,K 值可能会有所不同。
问题 3:我可以尝试其他分类算法吗?
答:当然!除 K-NN 外,您还将亲身体验其他各种分类算法,包括逻辑回归、决策树、随机森林等。
组织起来
在本帖中,我们将使用 数据分析示例虽然 Iris 数据集小而简单,但它是学习和分析分类问题的非常有用的资源。 我们希望这个示例能让您了解数据分析的基本概念,并为您解决更复杂的问题铺平道路。
您可以在此示例的基础上创建一个 其他数据集的挑战!






