玉溪市网站建设_网站建设公司_加载速度优化_seo优化
2025/12/26 13:30:31 网站建设 项目流程

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.datasets import make_classification

-------------------------- 1. 模拟手写汉字数据集(模拟"一到十、年月日"共13个汉字) --------------------------

说明:实际场景中可替换为真实手写汉字数据集(如HWDB1.0),这里用模拟数据保证代码可运行

特征数模拟手写汉字图像展平后的维度(28x28=784),样本数1300(每个汉字100个样本)

X, y = make_classification(
n_samples=1300, # 13个汉字 × 100个样本
n_features=784, # 模拟28x28手写汉字图像展平
n_informative=200,
n_redundant=0,
n_classes=13, # 13个目标汉字:一、二、三、四、五、六、七、八、九、十、年、月、日
random_state=42
)

划分训练集和测试集(7:3)

X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42, stratify=y
)

特征标准化(提升算法性能)

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

-------------------------- 2. 定义并训练多种识别算法 --------------------------

算法1:K近邻(KNN)

knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train_scaled, y_train)
knn_pred = knn.predict(X_test_scaled)
knn_acc = accuracy_score(y_test, knn_pred)

算法2:支持向量机(SVM)

svm = SVC(kernel='rbf', random_state=42)
svm.fit(X_train_scaled, y_train)
svm_pred = svm.predict(X_test_scaled)
svm_acc = accuracy_score(y_test, svm_pred)

算法3:随机森林(Random Forest)

rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train_scaled, y_train)
rf_pred = rf.predict(X_test_scaled)
rf_acc = accuracy_score(y_test, rf_pred)

-------------------------- 3. 结果可视化(柱状图) --------------------------

设置中文字体(避免乱码)

plt.rcParams['font.sans-serif'] = ['SimHei'] # 黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题

准备绘图数据

algorithms = ['K近邻(KNN)', '支持向量机(SVM)', '随机森林(RF)']
accuracies = [knn_acc, svm_acc, rf_acc]
colors = ['#1f77b4', '#ff7f0e', '#2ca02c']

绘制柱状图

plt.figure(figsize=(10, 6))
bars = plt.bar(algorithms, accuracies, color=colors, width=0.6)

添加数值标签

for bar in bars:
height = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2., height + 0.01,
f'{height:.3f}', ha='center', va='bottom', fontsize=12)

设置图表样式

plt.title('不同算法手写汉字识别准确率对比(一到十、年月日)', fontsize=14)
plt.xlabel('识别算法', fontsize=12)
plt.ylabel('识别准确率', fontsize=12)
plt.ylim(0, 1.0) # 准确率范围0-1
plt.grid(axis='y', linestyle='--', alpha=0.7)

保存图片(可选)

plt.savefig('汉字识别算法对比.png', dpi=300, bbox_inches='tight')
plt.show()

打印详细结果

print("各算法识别准确率:")
print(f"K近邻(KNN):{knn_acc:.3f}")
print(f"支持向量机(SVM):{svm_acc:.3f}")
print(f"随机森林(RF):{rf_acc:.3f}")

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询