给出相应的代码加注释
时间: 2024-12-28 20:01:33 浏览: 6
以下是根据您提供的实验样例文档编写的代码,并加上了详细的注释:
```python
import time
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
# 载入训练数据
start_time = time.time()
digits = datasets.load_digits() # 加载手写数字数据集
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, train_size=0.8, random_state=1)
end_time = time.time()
print(f"载入训练数据...载入完成,耗时{end_time - start_time:.6f}秒")
print(f"训练集形状: {X_train.shape}, 测试集形状: {X_test.shape}")
print(f"图片个数:{len(digits.images)}, 图片像素数目:{digits.images[0].size}, 图像尺寸:{digits.images[0].shape}")
# SVM 开始训练
svm_start_time = time.time()
clf = SVC(C=1000, kernel='rbf', gamma=1e-10) # 设置 SVM 参数
clf.fit(X_train, y_train) # 训练模型
svm_end_time = time.time()
print(f"SVM开始训练...SVM训练结束,耗时{int((svm_end_time - svm_start_time) % 60:.3f}秒")
# 输出 SVM 训练集和测试集准确率
train_accuracy = accuracy_score(y_train, clf.predict(X_train))
test_accuracy = accuracy_score(y_test, clf.predict(X_test))
print(f"SVM训练集准确率:{train_accuracy * 100:.3f}%")
print(f"SVM测试集准确率:{test_accuracy * 100:.3f}%")
# 输出分类错误的图片与结果
predictions = clf.predict(X_test)
errors = (predictions != y_test)
for i in range(len(predictions)):
if errors[i]:
plt.figure()
plt.imshow(X_test[i].reshape(8, 8), cmap=plt.cm.gray_r, interpolation='nearest')
plt.title(f"预测: {predictions[i]}, 实际: {y_test[i]}")
plt.show()
```
### 代码说明
1. **导入必要的库**:
- `time`:用于计算时间。
- `datasets`:加载数据集。
- `train_test_split`:将数据集分为训练集和测试集。
- `SVC`:支持向量机分类器。
- `accuracy_score`:计算准确率。
- `matplotlib.pyplot`:绘制图像。
2. **载入训练数据**:
- 使用 `datasets.load_digits()` 加载手写数字数据集。
- 使用 `train_test_split` 将数据集分为训练集和测试集,比例为 80% 和 20%。
- 打印数据集的基本信息,包括载入时间和数据集形状。
3. **SVM 开始训练**:
- 创建 `SVC` 模型并设置参数 `C=1000`, `kernel='rbf'`, `gamma=1e-10`。
- 使用 `fit` 方法训练模型。
- 计算并打印训练时间。
4. **输出 SVM 训练集和测试集准确率**:
- 使用 `predict` 方法对训练集和测试集进行预测。
- 使用 `accuracy_score` 计算并打印准确率。
5. **输出分类错误的图片与结果**:
- 找出分类错误的样本。
- 使用 `matplotlib` 绘制这些样本的图像及其预测值和实际值。
阅读全文