首页 > 编程知识 正文

svr模型,libsvm matlab

时间:2023-05-05 03:44:54 阅读:10497 作者:2574

SVR的代码(python)

项目中一个早期版本的代码,PCA-SVR,参数寻优采用传统的GridsearchCV。

from sklearn.decomposition import PCAfrom sklearn.svm import SVRfrom sklearn.model_selection import train_test_splitfrom sklearn.model_selection import GridSearchCVfrom sklearn.metrics import r2_score, mean_squared_error, mean_absolute_errorfrom sklearn.preprocessing import StandardScaler, MinMaxScalerfrom numpy import *import numpy as npimport matplotlib.pyplot as pltimport xlrdfrom svmutil import *import pandas as pd'''前言'''# pca - svr# CG测试'''预设参数'''fname = "all01.xlsx" # 训练数据文件读取 26haorandom_1 = 34 # 样本集选取随机种子random_2 = 4 # 训练集选取随机种子newpca = 6 # 降维yuzhi = 50 # 异常点阈值rate_1 = 0.8 # 样本集验证集rate_2 = 0.8 # 训练集测试集bestc = 384 # cbestg = 9 # gamma'''数据读取'''# xlrd生成对excel表进行操作的对象...# 输入输出分割data_x = data[:, 1:11]data_y = data[:, 0:1]'''PCA'''pca = PCA(n_components=newpca) # 加载PCA算法,设置降维后主成分数目为data_x = pca.fit_transform(data_x) # 对样本进行降维print(pca.components_) # 输出主成分,即行数为降维后的维数,列数为原始特征向量转换为新特征的系数print(pca.explained_variance_ratio_) # 新特征 每维所能解释的方差大小在全方差中所占比例'''数据划分'''# 样本数据分割train_data_x, predict_data_x, train_data_y, predict_data_y = train_test_split(data_x, data_y, test_size=rate_1, random_state=random_1)# 训练数据分割train_x, test_x, train_y, test_y = train_test_split(train_data_x, train_data_y, test_size=rate_2, random_state=random_2)predict_x = predict_data_xpredict_y = predict_data_y# reshape ytest_y = np.reshape(test_y, -1)train_y = np.reshape(train_y, -1)predict_y = np.reshape(predict_y, (-1, 1))# StandardScaler xss_X = StandardScaler()ss_X.fit(train_data_x) # 20%train_x = ss_X.transform(train_x)test_x = ss_X.transform(test_x)predict_x = ss_X.transform(predict_x)'''参数优化与SVR'''# 网格搜索交叉验证(GridSearchCV):以穷举的方式遍历所有可能的参数组合# 测试用# param_grid = {'gamma': [bestg], 'C': [bestc]}# rbf_svr_cg = GridSearchCV(SVR(kernel='rbf'), param_grid, cv=5)# rbf_svr_cg.fit(train_x,train_y)# bestc = rbf_svr_cg.best_params_.get('C')# bestg = rbf_svr_cg.best_params_.get('gamma')# 最优参数print(bestc, bestg)param_grid = {'gamma': [bestg], 'C': [bestc]}rbf_svr = SVR(kernel='rbf',param_grid) # 需要修改# 训练rbf_svr.fit(train_x, train_y)# 预测test_y_predict = rbf_svr.predict(test_x)test_y_predict = np.reshape(test_y_predict, (-1, 1))predict_y_predict = rbf_svr.predict(predict_x)predict_y_predict = np.reshape(predict_y_predict, (-1, 1))'''去异常点'''print('样本集:', len(train_data_y))print('验证集:', len(predict_data_y))size = len(test_y_predict)count = 0for i in range(size): if abs(test_y_predict[size - i - 1] - test_y[size - i - 1]) > yuzhi: test_y_predict = np.delete(test_y_predict, size - i - 1) test_y = np.delete(test_y, size - i - 1) count = count + 1print('测试集异常点', count)size = len(predict_y_predict)count = 0for i in range(size): if abs(predict_y_predict[size - i - 1] - predict_y[size - i - 1]) > yuzhi: predict_y_predict = np.delete(predict_y_predict, size - i - 1) predict_y = np.delete(predict_y, size - i - 1) count = count + 1print('验证集异常点', count)'''评估'''# # 使用r2__score模块,并输出评估结果,拟合程度,R2决定系数,衡量模型预测能力好坏(真实与预测的相关程度百分比)# print('The value of R-squared of kernal=rbf is',r2_score(test_y,test_y_predict))# # 使用mean_squared_error模块,输出评估结果,均方误差# print('The mean squared error of kernal=rbf is',mean_squared_error(test_y,test_y_predict))# # 使用mean_absolute_error模块,输出评估结果,平均绝对误差# print('The mean absolute error of kernal=rbf is',mean_absolute_error(test_y,test_y_predict))# 使用r2__score模块,并输出评估结果,拟合程度,R2决定系数,衡量模型预测能力好坏(真实与预测的相关程度百分比)print('The value of R-squared of kernal=rbf is', r2_score(predict_y, predict_y_predict))# 使用mean_squared_error模块,输出评估结果,均方误差print('The mean squared error of kernal=rbf is', mean_squared_error(predict_y, predict_y_predict))# 使用mean_absolute_error模块,输出评估结果,平均绝对误差print('The mean absolute error of kernal=rbf is', mean_absolute_error(predict_y, predict_y_predict))# rX1 = pd.Series(np.reshape(predict_y,-1))Y1 = pd.Series(np.reshape(predict_y_predict,-1))print('The r is', X1.corr(Y1, method="pearson"))print('The r is', sqrt(r2_score(predict_y, predict_y_predict)))'''作图'''# PRNprint('PRN:', fname)# PCAprint()# 残差diff_predict = predict_y_predict - predict_yplt.plot(diff_predict, color='black', label='error')plt.xlabel("no.")plt.ylabel("error(m)")plt.title('xxx')plt.grid()plt.legend()plt.show()# 真实/模型_1plt.plot(predict_y, color='g', label='dtu15mss')plt.plot(predict_y_predict, color='b', label='pre')plt.xlabel("xxx")plt.ylabel("error(m)")plt.title('xxx')plt.grid()plt.legend()plt.show()# 真实/模型_2fig = plt.figure(3)ax1 = fig.add_subplot(2, 1, 1)ax1.plot(predict_y, color='g', label='dtu15mss')ax2 = fig.add_subplot(2, 1, 2)ax2.plot(predict_y_predict, color='b', label='pre')plt.show()# 真实/模型_3p_x = [x for x in range(int(min(predict_y)) - 5, int(max(predict_y)) + 5)]p_y = p_xplt.plot(p_x, p_y, color='black', label='1')plt.scatter(predict_y_predict, predict_y, s=10, color='b', marker='x', label='0') # https://www.cnblogs.com/shanlizi/p/6850318.htmlplt.xlabel('PRE')plt.ylabel('DTU')plt.show()

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。