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个样本之间的距离
这里仅展示部分结果。
通过计算距离矩阵,我们可以获得样本之间的相似性信息,进而用于聚类等分析。
我们可以观察到鸢尾花数据集中不同特征之间的分布情况、相关性以及样本之间的相似性。例如,花瓣长度和宽度与花种类具有很强的相关性。