#coding = UTF-8 import sys class Logger(object): def init(self, filename='default.log', stream=sys.stdout): self.terminal = stream self.log = open(filename, 'w')

def write(self, message):
    self.terminal.write(message)
    self.log.write(message)

def flush(self):
    pass

sys.stdout = Logger('svm_result.log', sys.stdout) import datetime from sklearn import svm, preprocessing from get_das_data import get_das_data from sklearn.metrics import confusion_matrix import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as fm import pandas as pd import seaborn as sns rootpath = './das_data' train_rootpath = rootpath+'/train' train_labelpath = rootpath+'/train/label.txt' test_rootpath = rootpath+'/test' test_labelpath = rootpath+'/test/label.txt' start_train = datetime.datetime.now() X_train, y_train = get_das_data(train_rootpath, train_labelpath) X_test, y_test = get_das_data(test_rootpath, test_labelpath)

pre_y_test = y_test[:, np.newaxis]

minMaxScaler = preprocessing.MinMaxScaler() trainingData = minMaxScaler.fit_transform(X_train) testData = minMaxScaler.fit_transform(X_test)

feature_data = np.concatenate((testData, pre_y_test), axis=1) np.savetxt('5km_10km_svm_feature_data.csv', feature_data, delimiter=',')

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) end_train = datetime.datetime.now()

train_result = clf.predict(trainingData)

start_test = datetime.datetime.now() test_result = clf.predict(testData) end_test = datetime.datetime.now()

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) print('train time is ', end_train - start_train) print('test time is ', end_test - start_test) C = test_matrix fig = 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('./5km_10km_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) - 1 for 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))

上述代码使用svm模型对数据进行训练和预测,并输出以下结果:

  1. 训练集混淆矩阵(train_matrix):显示训练集中每个类别的预测结果与真实标签的对应关系。
  2. 测试集混淆矩阵(test_matrix):显示测试集中每个类别的预测结果与真实标签的对应关系。
  3. 训练时间和测试时间:显示训练和测试模型所花费的时间。
  4. 精确度(Acc):计算模型的整体准确率。
  5. 每个类别的精确度(Precision)、未命中率(NAR)和F1分数(F1_score)。

同时,代码还会生成以下文件:

  1. 'svm_result.log':将代码运行过程中的输出结果保存到日志文件中。
  2. '5km_10km_svm_feature_data.csv':将测试集经过预处理后的特征数据保存为CSV文件。
  3. '5km_10km_svm_confusion_matrix.jpg':将测试集混淆矩阵以热力图的形式保存为JPG文件。

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

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