鸢尾花数据集分析

1. 引言

鸢尾花数据集是一个广泛使用的机器学习数据集,由著名的统计学家和生物学家伊尔斯(R.A. Fisher)于1936年引入。该数据集用于测试分类算法,是机器学习和统计学习领域的重要基准。本报告是对鸢尾花数据集进行全面分析,包括数据对象与特征、统计描述、可视化、相关性与相似性度量。

 2. 数据对象与特征

       鸢尾花数据集(Iris dataset)是一个经典的机器学习数据集,包含150个样本,每个样本有4个特征,分别是:
- 花萼长度(sepal length)单位:厘米
- 花萼宽度(sepal width)单位:厘米
- 花瓣长度(petal length)单位:厘米
- 花瓣宽度(petal width)单位:厘米

此外,每个样本还有一个目标变量,代表鸢尾花的种类,共3类:
- 山鸢尾(Iris-setosa)
- 杂色鸢尾(Iris-versicolor)
- 维吉尼亚鸢尾(Iris-virginica)

  2.2 数据预处理

使用Python中的`scikit-learn`库加载鸢尾花数据集,并将其转换为Pandas DataFrame,以便于后续分析。

import pandas as pd
from sklearn.datasets import load_iris

# 加载鸢尾花数据集
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df['target'] = iris.target

# 查看数据的前5行
print(df.head())

输出结果显示每个样本的四个特征值及其对应的类别标签。

3. 数据统计描述

为了深入了解数据的分布情况,我们需要对数据集进行描述性统计分析。这将帮助我们识别出每个特征的中心趋势、离散程度及其分布形态。

        3.1 描述性统计

statistics = df.describe()
print(statistics)

输出结果包括以下统计信息:
- 计数(count):每个特征的样本数量(150)。
- 均值(mean):每个特征的平均值。
- 标准差(std):每个特征的标准差,反映数据的离散程度。
- 最小值(min)和最大值(max):每个特征的最小和最大值。
- 四分位数(25%、50%、75%):反映数据分布的百分位数。

例如,花萼长度的均值为5.84,标准差为0.83,而花瓣宽度的均值为1.20,标准差为0.76。

        3.2 类别分布

我们可以通过查看目标变量的分布,了解每个类别的样本数量。

# 类别分布
class_counts = df['target'].value_counts()
print(class_counts)

输出结果显示三类鸢尾花的样本数均为50,数据集平衡良好。

4. 数据可视化

数据可视化是数据分析中重要的环节,有助于更直观地理解数据的特征分布及类别之间的关系。

        4.1 散点图矩阵

使用散点图矩阵可以观察不同特征之间的关系,并按类别进行着色。

import seaborn as sns
import matplotlib.pyplot as plt

# 绘制散点图矩阵
sns.pairplot(df, hue='target', markers=["o", "s", "D"], palette='husl')
plt.title('Pairplot of Iris Dataset')
plt.show()

散点图矩阵展示了四个特征之间的关系。可以观察到,花瓣长度与花瓣宽度之间的分布明显区别于其他特征,有助于分类。此外,山鸢尾(类别0)与其他两类鸢尾花在特征空间中的分离程度较高。

        4.2 箱线图

箱线图用于展示各特征的分布情况及异常值。

plt.figure(figsize=(12, 6))
sns.boxplot(data=df.drop(columns='target'))
plt.title('Boxplot of Features in Iris Dataset')
plt.show()

箱线图显示了每个特征的中位数、四分位数及异常值。花瓣长度和花瓣宽度的分布较为集中,而花萼长度和花萼宽度的分布则略有较大差异,特别是花萼宽度的最大值和最小值相差较大。

5. 相关性和相似性度量

在分析特征之间的关系时,我们需要计算相关性,了解不同特征之间的线性关系。

        5.1 相关性矩阵

计算特征之间的相关性并绘制热力图。

# 计算相关性矩阵
correlation_matrix = df.corr()

# 绘制热力图
plt.figure(figsize=(8, 6))
sns.heatmap(correlation_matrix, annot=True, fmt='.2f', cmap='coolwarm')
plt.title('Correlation Matrix of Iris Dataset')
plt.show()


通过热力图,我们可以清楚地看到:
- 花瓣长度与花瓣宽度之间的相关性达到0.96,表明它们之间有很强的线性关系。
- 花萼长度与花萼宽度之间的相关性较低,约为-0.37。

        5.2 相似性度量

为了计算样本之间的相似性,我们可以使用马哈拉诺比斯距离。 

# 计算协方差矩阵
cov_matrix = np.cov(df.iloc[:, :-1].T)  # 只考虑特征,不包括目标变量
inv_cov_matrix = np.linalg.inv(cov_matrix)  # 协方差矩阵的逆

# 计算马哈拉诺比斯距离
def mahalanobis_distance(x, y, inv_cov):
    diff = x - y
    return np.sqrt(np.dot(np.dot(diff, inv_cov), diff.T))

# 创建距离矩阵
num_samples = df.shape[0]
mahalanobis_distances = np.zeros((num_samples, num_samples))

for i in range(num_samples):
    for j in range(num_samples):
        mahalanobis_distances[i, j] = mahalanobis_distance(df.iloc[i, :-1].values, df.iloc[j, :-1].values, inv_cov_matrix)

# 打印部分马哈拉诺比斯距离
print(mahalanobis_distances[:5, :5])  # 查看前5个样本之间的距离

这里仅展示部分结果。

通过计算距离矩阵,我们可以获得样本之间的相似性信息,进而用于聚类等分析。

我们可以观察到鸢尾花数据集中不同特征之间的分布情况、相关性以及样本之间的相似性。例如,花瓣长度和宽度与花种类具有很强的相关性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值