Scikit-learn是Python中一个流行的机器学习库,包含有各种各样的机器学习算法和数据集。本文将介绍Scikit-learn中的鸢尾花数据集,展示如何使用该数据集进行分类任务。
一、鸢尾花数据集介绍
鸢尾花数据集是一个非常经典的分类问题,使用该数据集广泛地用于机器学习教育和研究。该数据集包含有3种不同种类的鸢尾花:Setosa、Versicolour和Virginica,分别对应3个不同的品种。每个样本有4个特征:花萼(sepal)长度、花萼宽度、花瓣(petal)长度和花瓣宽度,共计150个样本。 在Scikit-learn中,可以方便地加载该数据集:
from sklearn.datasets import load_iris
data = load_iris()
X = data.data
y = data.target
其中`X`是一个(n_samples, n_features)的数组,代表着所有样本的特征,`y`是一个(n_samples,)的一维数组,代表着每个样本所属的类别。
二、数据可视化
我们首先使用Matplotlib包对数据集进行可视化。由于数据集有4个特征,我们无法将其在2D的平面直观地展示。我们可以使用散点图(scatter plot)来展示其中的两个特征。
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
colors = ['blue', 'red', 'green']
for i in range(len(colors)):
x = X[y == i][:, 0]
y_geq_0 = X[y != i][:, 1]
ax.scatter(x, y_geq_0, c=colors[i])
ax.set_xlabel('Sepal Length')
ax.set_ylabel('Sepal Width')
ax.set_title('Scatter plot of Iris dataset')
上述代码将长度和宽度作为横坐标和纵坐标,展示了3种鸢尾花品种的关系。结果如下图所示。
我们可以发现,在这两个特征的空间中,Setosa品种分布得比较开,而Versicolour和Virginica品种更加相似。这说明了使用花萼的长度和宽度,我们能够区分不同品种之间的一些差异。
三、分类器的训练和测试
我们可以使用Scikit-learn中的各种各样的机器学习算法作为分类器,对鸢尾花数据集进行分类任务。在此,我们使用逻辑回归(Logistic Regression)算法进行分类任务,这是一个非常常用的二分类算法。 我们首先将数据集划分为训练集和测试集:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
上述代码中,使用了`train_test_split`函数将数据集划分成3:7比例的训练集和测试集。 接着我们定义并训练一个逻辑回归分类器:
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(random_state=0).fit(X_train, y_train)
然后使用该分类器对测试集进行预测:
y_pred = clf.predict(X_test)
最后,我们可以使用Scikit-learn提供的`accuracy_score`函数计算分类器的准确率:
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
经过训练和测试,我们得到了逻辑回归分类器在测试集上的准确率为93.3%。这表明使用这个简单的分类器,我们能够有效地分类鸢尾花数据集。
四、特征选择与降维
对于许多机器学习任务来说,特征选择和降维是非常重要的步骤。在鸢尾花数据集中,我们最初使用了4个特征进行分类任务。但是这4个特征中,一些特征可能是冗余的,或者对于分类任务并没有太大的贡献。 在Scikit-learn中,我们可以使用各种各样的特征选择和降维方法。此处举例使用PCA(principal component analysis)方法对特征进行降维。PCA是一种线性变换技术,可以将高维的特征空间映射到较低维的空间。在此处,我们将4维的鸢尾花数据集降至2维进行可视化。
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
fig, ax = plt.subplots()
colors = ['blue', 'red', 'green']
for i in range(len(colors)):
x = X_pca[y == i][:, 0]
y_geq_0 = X_pca[y == i][:, 1]
ax.scatter(x, y_geq_0, c=colors[i])
ax.set_xlabel('PC1')
ax.set_ylabel('PC2')
ax.set_title('PCA Scatter plot of Iris dataset')
上述代码中,我们使用`PCA`函数将4维鸢尾花数据降至2维,然后使用Matplotlib包将2维数据进行散点图可视化,结果如下图所示。
可以看到,经过2维PCA降维,我们在2维空间中仍然能够区分不同品种的鸢尾花。这表明,对于鸢尾花数据集来说,仅使用这两个PCA维度可能足够对样本进行分类。但是请注意,PCA维度并不是在所有数据集上都有类似的效果,所以在实际应用中需要较好的特征工程技能。
五、总结
本文展示了如何使用Scikit-learn加载和可视化鸢尾花数据集,使用逻辑回归等算法对其进行分类任务,以及如何使用特征选择和降维技术对数据集进行预处理。Scikit-learn提供了丰富的功能,使得机器学习任务更加简单和高效。