优化这段代码from sklearn.neighbors import KNeighborsClassifier from sklearn.datasets import load_digits from sklearn import svm, metrics from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt from sklearn.metrics import confusion_matrix from sklearn.metrics import plot_confusion_matrix import numpy as np #使绘图支持中文字符 from matplotlib import rcParams rcParams['font.family'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False # In[2]: digits = load_digits() data = digits.data print(data[0]) print(digits.images[0]) print(digits.target[0]) plt.imshow(digits.images[0]) plt.show() # In[3]: train_x, test_x, train_y, test_y = train_test_split(data, digits.target, test_size=0.3, random_state=82) print(train_x) clf = svm.SVC(kernel='linear') clf.fit(train_x, train_y) print("svm训练集得分: %.4lf" % clf.score(train_x, train_y)) print("svm测试集得分: %.4lf" % clf.score(test_x, test_y)) print(clf.predict(data)) plot_confusion_matrix(clf, test_x, test_y) plt.show() # In[5]: ################################################################# fig = plt.figure(figsize=(6,13)) for i in range(40): y_pred = clf.predict([data[i]]) plt.subplot(8,5,i+1) plt.imshow(digits.images[i], interpolation='none') plt.title("%d---->%d"%(digits.target[i],y_pred)) plt.show()
时间: 2024-04-14 08:31:29 浏览: 130
这段代码看起来已经比较简洁了,但还是有一些可以优化的地方。以下是几点建议:
1. 将模块导入部分整理到一起,按照惯例的顺序导入。
2. 删除不需要的模块导入,比如`metrics`模块没有被使用到。
3. 在绘制混淆矩阵时,可以设置标题和颜色条,以提高可读性。
4. 使用`plt.subplots()`替代`plt.subplot()`以获得更好的子图布局和大小控制。
5. 在绘制数字和预测结果的子图时,可以添加轴标签,使图像更具可读性。
下面是优化后的代码:
```python
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_digits
from sklearn import svm
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
from sklearn.metrics import plot_confusion_matrix
import numpy as np
# 使绘图支持中文字符
from matplotlib import rcParams
rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 加载手写数字数据集
digits = load_digits()
data = digits.data
print(data[0])
print(digits.images[0])
print(digits.target[0])
plt.imshow(digits.images[0])
plt.show()
# 划分训练集和测试集
train_x, test_x, train_y, test_y = train_test_split(data, digits.target, test_size=0.3, random_state=82)
print(train_x)
# 使用支持向量机进行训练和预测
clf = svm.SVC(kernel='linear')
clf.fit(train_x, train_y)
print("svm训练集得分: %.4lf" % clf.score(train_x, train_y))
print("svm测试集得分: %.4lf" % clf.score(test_x, test_y))
print(clf.predict(data))
plot_confusion_matrix(clf, test_x, test_y, display_labels=digits.target_names)
plt.title("混淆矩阵")
plt.colorbar(label="样本数量")
plt.show()
# 绘制数字和预测结果的子图
fig, axes = plt.subplots(8, 5, figsize=(6, 13))
for i, ax in enumerate(axes.flat):
y_pred = clf.predict([data[i]])
ax.imshow(digits.images[i], interpolation='none')
ax.set_title("%d---->%d" % (digits.target[i], y_pred))
ax.axis('off')
plt.tight_layout()
plt.show()
```
希望能对你有所帮助!
阅读全文