对 digits 数据集中 10 种不同的手写数字进行分类,核支持向量机/随机森林/多层感知机,三种分类算法任选其一。打印分类精度、混淆矩阵,计算每个类别的准确率、召回率和 f分数。Python代码
时间: 2024-10-20 18:11:18 浏览: 64
digits.rar--DBRHD手写数字训练数据集与测试数据集
首先,让我们选择多层感知机 (Multilayer Perceptron, MLP) 进行10种手写数字的分类,因为它是深度学习模型,适用于图像数据。我们将使用Keras库(基于TensorFlow),MNIST数据集以及scikit-learn库来实现这个任务。以下是Python代码示例:
```python
# 导入所需的库
import numpy as np
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report, f1_score
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import to_categorical
# 加载digits数据集
digits = load_digits()
X = digits.data
y = digits.target
# 归一化数据
X = X.astype('float32') / 16.
# 将标签转换为one-hot编码
y = to_categorical(y)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建MLP模型
model = Sequential([
Dense(128, activation='relu', input_shape=(64,)), # 输入层和隐藏层
Dense(64, activation='relu'),
Dense(10, activation='softmax') # 输出层,使用Softmax激活处理多分类问题
])
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_test, y_test))
# 预测
y_pred = model.predict_classes(X_test)
# 计算并打印分类精度
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy * 100:.2f}%")
# 混淆矩阵
conf_mat = confusion_matrix(y_test.argmax(axis=1), y_pred)
print("Confusion Matrix:\n", conf_mat)
# 计算每个类别的准确率、召回率和F1分数
report = classification_report(y_test.argmax(axis=1), y_pred, target_names=digits.target_names)
print("\nClassification Report:\n", report)
# F1分数
f_scores = [f1_score(y_test[:, i], y_pred[:, i], average=None) for i in range(10)]
print("Per-class F1 Scores:", f_scores)
```
注意:在这个例子中,我们假设了你已经安装了Keras和TensorFlow。如果你还没有安装,可以分别使用`pip install keras tensorflow`命令安装。运行这段代码会输出相应的分类精度、混淆矩阵和评估指标。
阅读全文