"""标签:SVM,img,train,test,import,手写,识别,data From: https://www.cnblogs.com/zeliangzhang/p/18502591
https://mp.weixin.qq.com/s/SL57KglCbNDoONSKFmXRtA
支持向量机(SVM)
支持向量机用于分类和回归问题。比如,识别手写数字。
"""
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_digits
from matplotlib import pyplot as plt
import cv2
# 加载数据集:load_digits为sklearn中自带的数据集(MNIST)
data = load_digits()
X = data.data
y = data.target
# 展示前十个数据的图像
# https://blog.csdn.net/m0_59611146/article/details/136797721
fig, ax = plt.subplots(
nrows=2,
ncols=5,
sharex=True,
sharey=True, )
ax = ax.flatten()
for i in range(10):
ax[i].imshow(data.data[i].reshape((8, 8)), cmap='Greys', interpolation='nearest')
ax[i].set_title(data.target[i])
plt.show()
# 划分训练集和测试集
"""
Code 意义
train_data 待划分的样本特征集合
X_train 划分出的训练数据集数据
X_test 划分出的测试数据集数据
y_train 划分出的训练数据集的标签
y_test 划分出的测试数据集的标签
test_size 若在0~1之间,为测试集样本数目与原始样本数目之比;若为整数,则是测试集样本的数目
random_state 随机数种子,不同的随机数种子划分的结果不同
stratify stratify是为了保持split前类的分布,例如训练集和测试集数量的比例是 A:B= 4:1,等同于split前的比例(80:20)。通常在这种类分布不平衡的情况下会用到stratify。
原文链接:https://blog.csdn.net/weixin_42888180/article/details/133644922
"""
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建模型
model = SVC()
# 训练模型
model.fit(X_train, y_train)
# 预测
predictions = model.predict(X_test)
print(predictions[0])
# 模型评估
accuracy = accuracy_score(y_test, predictions)
print(f"Accuracy: {accuracy * 100:.2f}%")
# 预测单张图片
"""
img = cv2.imread('digit.jpg')
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img = cv2.resize(img,(8,8))
#data = img.reshape(1,-1)
r= model.predict(img.reshape(1,-1))
print(r[0])
"""
"""
opencv也有SVM的算法
"""
"""
SVM全称是Supported Vector Machine(支持向量机)
即寻找到一个超平面使样本分成两类,并且间隔最大。
是一种监督学习算法,主要用于分类,也可用于回归
与逻辑回归和决策树等其他分类器相比,SVM 提供了非常高的准确度
优缺点
优点:
适合小样本、高纬度数据,比较强泛化能力
可有效地处理高维数据;可使用不同的核函数来适应不同的数据类型
缺点:
计算复杂度较高,对于大规模数据的处理可能会存在困难
原文链接:https://blog.csdn.net/m0_60916732/article/details/143006521
"""