您的位置:首页 > 房产 > 建筑 > 沈阳流产手术哪家比较好_咨询公司简介_seo优化培训课程_成都关键词优化排名

沈阳流产手术哪家比较好_咨询公司简介_seo优化培训课程_成都关键词优化排名

2025/1/8 18:14:38 来源:https://blog.csdn.net/a2001444/article/details/144972780  浏览:    关键词:沈阳流产手术哪家比较好_咨询公司简介_seo优化培训课程_成都关键词优化排名
沈阳流产手术哪家比较好_咨询公司简介_seo优化培训课程_成都关键词优化排名

针对不了解SVM的原理的同学强推下面这个课程:

6.机器学习课程(六)支持向量机(线性模型)问题_哔哩哔哩_bilibili

一、QT实现SVM的方法

1.调用SVM的C语言库:麻烦,要专门去找库,cmake可能方便一点,我的QT用的qmake,加起来比较麻烦

2.QT调用Python文件:简单,有现成的代码

我这里使用的方法2,环境配置参考我的这篇文章:

QT运行导入python(pytorch)程序进行深度学习(qmake)_qt 引入python-CSDN博客

二、python代码

主要框架有一下几个部分:注意SVM模型的选择,我这里是非线性的选择的rbf

import numpy as np
from sklearn import svm
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay, accuracy_score
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
from matplotlib import rcParamsrcParams['font.sans-serif'] = ['SimHei']
rcParams['axes.unicode_minus'] = False# 加载数据
data = np.load('data.npy')  # 替换为你的数据路径
labels = np.load('label.npy')  # 替换为你的标签路径
# 划分数据
data_per_class = []
n_classes = 7
# 按类别划分数据
for label in range(n_classes):class_data = data[labels == label]X_train, X_test = train_test_split(class_data, test_size=0.1, random_state=42)data_per_class.append((X_train, X_test))# 合并所有类别的训练和测试数据
X_train_all = np.concatenate([train for train, _ in data_per_class])
X_test_all = np.concatenate([test for _, test in data_per_class])# 生成对应的标签
y_train_all = np.concatenate([np.full(train.shape[0], label) for label, (train, _) in enumerate(data_per_class)])
y_test_all = np.concatenate([np.full(test.shape[0], label) for label, (_, test) in enumerate(data_per_class)])# 使用最佳参数的SVC模型
best_svc = svm.SVC(C=1, gamma=0.03, kernel='rbf')
best_svc.fit(X_train_all, y_train_all)# 使用最佳参数的模型进行预测
y_pred_train = best_svc.predict(X_train_all)
y_pred_test = best_svc.predict(X_test_all)# 计算准确率
train_accuracy = accuracy_score(y_train_all, y_pred_train)
test_accuracy = accuracy_score(y_test_all, y_pred_test)
print(f'Train Accuracy: {train_accuracy:.4f}')
print(f'Test Accuracy: {test_accuracy:.4f}')# 绘制测试集混淆矩阵
label_names = ['正常', '短路', '缺相', '轴弯曲', '不对中', '不平衡', '断条']
conf_matrix = confusion_matrix(y_test_all, y_pred_test)
disp = ConfusionMatrixDisplay(confusion_matrix=conf_matrix, display_labels=label_names)
disp.plot(cmap=plt.cm.Blues)
plt.title('测试集混淆矩阵')
plt.show()

部分语法:

#是一个列表推导式,用于提取 data_per_class 中每个元组的第一个元素,即每个类别的训练集 X_train
X_train_all = np.concatenate([train for train, _ in data_per_class])
#是一个列表推导式,用于提取 data_per_class 中每个元组的第二个元素,即每个类别的测试集 X_test
X_test_all = np.concatenate([test for _, test in data_per_class])

eg:

data_per_class = [(np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]]), np.array([[0.7, 0.8, 0.9]])),(np.array([[1.0, 1.1, 1.2], [1.3, 1.4, 1.5], [1.6, 1.7, 1.8]]), np.array([[1.9, 2.0, 2.1]])),(np.array([[2.2, 2.3, 2.4], [2.5, 2.6, 2.7], [2.8, 2.9, 3.0], [3.1, 3.2, 3.3]]), np.array([[3.4, 3.5, 3.6], [3.7, 3.8, 3.9]]))
]#执行后
np.array([[0.1, 0.2, 0.3],[0.4, 0.5, 0.6],[1.0, 1.1, 1.2],[1.3, 1.4, 1.5],[1.6, 1.7, 1.8],[2.2, 2.3, 2.4],[2.5, 2.6, 2.7],[2.8, 2.9, 3.0],[3.1, 3.2, 3.3]
])

对没学过pyhon的同学(例如我)举个例子

列表推导式是从左到右进行嵌套的,按方框进行遍历,最后得到x,返回x*x,类似于C++std的遍历,形式比较简洁

 这样逻辑就清楚多了

后续就是进行训练SVM模型

未完待续........

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com