一、数据集简介
鸢尾花数据集(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))
五、总结
通过对鸢尾花数据集的分析,我们了解了数据集的特点和处理方法,学习了数据可视化方法,以及如何使用支持向量机模型进行分类预测。