基于SVM和KNN算法的DAS数据分类与识别

本文介绍了如何使用支持向量机 (SVM) 和 K 近邻 (KNN) 算法对DAS数据进行分类。

1. 数据准备

首先,我们需要加载DAS数据集,并将其分为训练集和测试集。这里我们假设数据存储在名为 'das_data' 的文件夹中,训练集标签文件为 'train/label.txt',测试集标签文件为 'test/label.txt'。pythonimport numpy as npimport matplotlib.pyplot as pltimport matplotlib.font_manager as fmimport pandas as pdimport seaborn as snsfrom sklearn import svm, preprocessing, neighborsfrom sklearn.metrics import confusion_matrixfrom get_das_data import get_das_data

设置数据路径rootpath = './das_data'train_rootpath = rootpath + '/train'train_labelpath = train_rootpath + '/label.txt'test_rootpath = rootpath + '/test'test_labelpath = test_rootpath + '/label.txt'

加载数据X_train, y_train = get_das_data(train_rootpath, train_labelpath)X_test, y_test = get_das_data(test_rootpath, test_labelpath)

数据预处理:归一化minMaxScaler = preprocessing.MinMaxScaler()trainingData = minMaxScaler.fit_transform(X_train)testData = minMaxScaler.fit_transform(X_test)

2. SVM分类模型

2.1 模型训练python# 创建SVM分类器并训练模型clf = svm.SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape='ovo', degree=3, gamma='auto', kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False)clf.fit(trainingData, y_train)

2.2 模型评估python# 预测结果train_result = clf.predict(trainingData)test_result = clf.predict(testData)

计算混淆矩阵train_matrix = confusion_matrix(y_train, train_result)test_matrix = confusion_matrix(y_test, test_result)

打印结果print('train_matrix:

', train_matrix)print('test_matrix: ', test_matrix)

可视化混淆矩阵C = test_matrixfig = plt.figure()ax = fig.add_subplot(111)df = pd.DataFrame(C)f1 = fm.FontProperties('Times New Roman', size=15)sns.heatmap(df, fmt='g', annot=True, annot_kws={'size': 10}, xticklabels=['1', '2', '3', '4', '5', '6'], yticklabels=['1', '2', '3', '4', '5', '6'], cmap='Blues')ax.set_xlabel('Predicted label', fontproperties=f1) # x轴ax.set_ylabel('True label', fontproperties=f1) # y轴plt.savefig('./svm_confusion_matrix.jpg')plt.show()

计算评价指标Acc = (C[0][0] + C[1][1] + C[2][2] + C[3][3] + C[4][4] + C[5][5]) / sum(C[0] + C[1] + C[2] + C[3] + C[4] + C[5])print('acc: %.3f' % Acc)lie_he = sum(C, 1) - 1for i in range(1, 7): Precision = C[i - 1][i - 1] / lie_he[i - 1] NAR = (sum(C[i - 1]) - C[i - 1][i - 1]) / sum(C[i - 1]) F1_score = 2 * C[i - 1][i - 1] / (lie_he[i - 1] + sum(C[i - 1])) print('precision_%d: %.3f' % (i, Precision)) print('NAR_%d: %.3f' % (i, NAR)) print('F1_score_%d: %.3f' % (i, F1_score))

3. KNN分类模型

3.1 模型训练python# 创建KNN分类器并训练模型clf = neighbors.KNeighborsClassifier(n_neighbors=3)clf.fit(trainingData, y_train)

3.2 模型评估python# 预测结果train_result = clf.predict(trainingData)test_result = clf.predict(testData)

计算混淆矩阵train_matrix = confusion_matrix(y_train, train_result)test_matrix = confusion_matrix(y_test, test_result)

打印结果print('train_matrix:

', train_matrix)print('test_matrix: ', test_matrix)

可视化混淆矩阵C = test_matrixfig = plt.figure()ax = fig.add_subplot(111)df = pd.DataFrame(C)f1 = fm.FontProperties('Times New Roman', size=15)sns.heatmap(df, fmt='g', annot=True, annot_kws={'size': 10}, xticklabels=['1', '2', '3', '4', '5', '6'], yticklabels=['1', '2', '3', '4', '5', '6'], cmap='Blues')ax.set_xlabel('Predicted label', fontproperties=f1) # x轴ax.set_ylabel('True label', fontproperties=f1) # y轴plt.savefig('./knn_confusion_matrix.jpg')plt.show()

计算评价指标Acc = (C[0][0] + C[1][1] + C[2][2] + C[3][3] + C[4][4] + C[5][5]) / sum(C[0] + C[1] + C[2] + C[3] + C[4] + C[5])print('acc: %.3f' % Acc)lie_he = sum(C, 1) - 1for i in range(1, 7): Precision = C[i - 1][i - 1] / lie_he[i - 1] NAR = (sum(C[i - 1]) - C[i - 1][i - 1]) / sum(C[i - 1]) F1_score = 2 * C[i - 1][i - 1] / (lie_he[i - 1] + sum(C[i - 1])) print('precision_%d: %.3f' % (i, Precision)) print('NAR_%d: %.3f' % (i, NAR)) print('F1_score_%d: %.3f' % (i, F1_score))

4. 问题解决

关于您提到的 'FileNotFoundError' 错误,请确保以下几点:

  • 文件路径设置正确,例如使用 './das_data/train/label.txt' 或者绝对路径。* 文件确实存在于指定路径。* 检查文件权限是否允许读取。

如果问题仍然存在,请提供更详细的错误信息和代码片段,以便我更好地帮助您解决问题。

基于SVM和KNN算法的DAS数据分类与识别

原文地址: http://www.cveoy.top/t/topic/brQ0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录