您的位置:

鸢尾花数据集分析

一、数据集简介

鸢尾花数据集(Iris Dataset)是常用的分类实验数据集,由Fisher于1936年发表,包含150个样本,分为3个品种:Iris setosa,Iris versicolor,Iris virginica,其中每个品种各50个样本。

每个样本包含了4个特征:花萼长度(sepal length)、花萼宽度(sepal width)、花瓣长度(petal length)、花瓣宽度(petal width),基于这些特征来识别不同品种的鸢尾花,这被认为是一个经典的机器学习问题。

from sklearn.datasets import load_iris

iris = load_iris()
print(iris.DESCR) # 输出数据集的描述信息

二、数据预处理

在使用数据集进行机器学习模型训练之前,需要进行数据预处理,以保证数据的质量。

2.1 缺失值处理

首先,我们需要检查数据集是否存在缺失值。如果存在,需要进行缺失值处理。

import pandas as pd

df = pd.DataFrame(iris.data, columns=iris.feature_names)
print(df.isnull().sum()) # 检查是否存在缺失值

2.2 数据标准化

为了保证特征之间具有可比性,需要对数据进行标准化处理,将每个特征的数据转换为标准正态分布。

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
iris_scaled = scaler.fit_transform(iris.data)

三、数据可视化

在完成数据预处理后,对数据进行可视化可以更好地帮助我们了解数据的规律。

3.1 特征相关性分析

借助散点图可以帮助我们快速了解每个特征之间的相关性。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.scatter(df['sepal length (cm)'], df['sepal width (cm)'])
ax.set_title('Sepal length vs Sepal width')
ax.set_xlabel('Sepal length')
ax.set_ylabel('Sepal width')

fig, ax = plt.subplots()
ax.scatter(df['petal length (cm)'], df['petal width (cm)'])
ax.set_title('Petal length vs Petal width')
ax.set_xlabel('Petal length')
ax.set_ylabel('Petal width')

3.2 数据聚类可视化

通过对数据进行聚类分析,可以将数据分成不同的簇,这有助于我们更好地理解数据的分布规律。

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(iris_scaled)
y_kmeans = kmeans.predict(iris_scaled)

fig, ax = plt.subplots()
ax.scatter(iris_scaled[y_kmeans == 0, 0], iris_scaled[y_kmeans == 0, 1], s=100, c='red', label='Cluster 1')
ax.scatter(iris_scaled[y_kmeans == 1, 0], iris_scaled[y_kmeans == 1, 1], s=100, c='blue', label='Cluster 2')
ax.scatter(iris_scaled[y_kmeans == 2, 0], iris_scaled[y_kmeans == 2, 1], s=100, c='green', label='Cluster 3')
ax.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='yellow', label='Centroids')
ax.set_title('Cluster Visualization')
ax.set_xlabel('Sepal length')
ax.set_ylabel('Sepal width')
ax.legend()

四、机器学习模型训练

根据数据集的特点,我们选择使用支持向量机(Support Vector Machine, SVM)模型来进行分类预测。

from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

X_train, X_test, y_train, y_test = train_test_split(iris_scaled, iris.target, random_state=0)
svm_clf = SVC(kernel='linear', C=1, probability=True) # 线性 SVM 模型
svm_clf.fit(X_train, y_train)

y_pred = svm_clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: {:.2f}%".format(accuracy*100))

五、总结

通过对鸢尾花数据集的分析,我们了解了数据集的特点和处理方法,学习了数据可视化方法,以及如何使用支持向量机模型进行分类预测。