我们将要讨论的最后一种分类任务称为多输出-多分类分类[multioutput multiclass classification](或简单称为多输出分类[multioutput classification])。它只是一个多标签分类的泛化,每个标签都可以是多分类的(它可能有两种以上的值)。、
为了说明这一点,让我们构建一个从图像中移除噪声的系统。它将一个噪声数字图像作为输入,它将(希望)输出一个干净的数字图像,表示为一个像素强度的数组,就像MNIST图像一样。注意,分类器的输出是多标签(每个像素一个标签),每个标签可以有多个值(像素强度范围从0到255)。这就是多输出分类系统的一个例子。
分类和回归之间的界限有时是模糊的,例如在这个例子中。可以说,预测像素强度更类似于回归而不是分类。此外,多输出系统不限于分类任务;您甚至可以使用一个系统来为每个样本输出多个标签,包括分类标签和值标签。
让我们从创建训练集和测试集开始,通过使用MNIST图像,并使用NumPy的randint()函数为像素强度增加噪声。目标图像将是原始图像:
noise = rnd.randint(0, 100, (len(X_train), 784))
noise = rnd.randint(0, 100, (len(X_test), 784))
X_train_mod = X_train + noise
X_test_mod = X_test + noise
y_train_mod = X_train
y_test_mod = X_test
让我们看一下测试集中的图像(是的,我们在窥探测试数据,所以你现在应该皱着眉头)。
左边是输入的噪声图像,右边是清晰的目标图像。现在 让我们来训练分类器,让它整理这个图像:
knn_clf.fit(X_train_mod, y_train_mod)
clean_digit = knn_clf.predict([X_test_mod[some_index]])
plot_digit(clean_digit)
看起来离我们的目标很近!这就结束了我们的分类之旅。希望您现在应该知道如何为分类任务选择良好的度量标准,选择适当的精度/召回权衡,来比较分类器,更一般地为各种任务构建良好的分类系统。