# -*- coding: utf-8 -*-
"""
Created on Fri Apr 20 10:20:51 2018
@author: kly qq392503054
"""
# 支持向量机
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.preprocessing import MinMaxScaler,StandardScaler
from sklearn.metrics import r2_score
from scipy.io import loadmat
# In[] #
# 导入数据
data=loadmat('maydataa.mat')['data']
#1-10列为输入 11列为输出
in_=data[:,:-1]
out_=data[:,-1].reshape(-1,1)
# 归一化
ss_X=MinMaxScaler(feature_range=(-1,1)).fit(in_)
ss_Y=MinMaxScaler(feature_range=(-1,1)).fit(out_)
input_data = ss_X.fit_transform(in_)
output_data = ss_Y.fit_transform(out_)
# 前1/3组训练 后2/3组测试
n_samples=input_data.shape[0]
n=np.arange(n_samples)
m=int(n_samples/3)
xtrain=input_data[n[0:m],:]
ytrain=output_data[n[0:m],0]
xtest=input_data[n[m:],:]
ytest=output_data[n[m:],0]
# svm 回归
clf = svm.SVR(C=1, gamma=1,kernel='rbf')
clf.fit(xtrain,ytrain)
result0 = clf.predict(xtrain).reshape(-1,1)
result = clf.predict(xtest).reshape(-1,1)
# 反归一化
train_label=ss_Y.inverse_transform(ytrain.reshape(-1,1))
test_label=ss_Y.inverse_transform(ytest.reshape(-1,1))
train_pred=ss_Y.inverse_transform(result0)
test_pred=ss_Y.inverse_transform(result)
# 结果统计
plt.figure()
plt.subplot(1,2,1)
plt.title("train set")
plt.xlabel("train_sample", size=14)
plt.ylabel("value", size=14)
plt.plot(train_pred, color='g',label='pred',linewidth=3)
plt.plot(train_label, color='r',label='true',linewidth=3)
plt.legend()
plt.show()
plt.subplot(1,2,2)
plt.title("test set")
plt.xlabel("test_sample", size=14)
plt.ylabel("value", size=14)
plt.plot(test_pred, color='g',label='pred',linewidth=3)
plt.plot(test_label, color='r',label='true',linewidth=3)
plt.legend()
plt.show()
# mape
train_mape=np.mean(np.abs((train_pred-train_label)/train_label))
# rmse
train_rmse=np.sqrt(np.mean(np.square(train_pred-train_label)))
# mae
train_mae=np.mean(np.abs(train_pred-train_label))
# R2
train_r2=r2_score(train_label,train_pred)
print('SVM训练集的mape:',train_mape,' rmse:',train_rmse,' mae:',train_mae,' R2:',train_r2)
# mape
test_mape=np.mean(np.abs((test_pred-test_label)/test_label))
# rmse
test_rmse=np.sqrt(np.mean(np.square(test_pred-test_label)))
# mae
test_mae=np.mean(np.abs(test_pred-test_label))
# R2
test_r2=r2_score(test_label,test_pred)
print('SVM测试集的mape:',test_mape,' rmse:',test_rmse,' mae:',test_mae,' R2:',test_r2)
# In[]
colum11=np.vstack([train_pred,test_pred])# 用预测得到的数据 替换原来的11列进行建模
ss_X=MinMaxScaler(feature_range=(-1,1)).fit(in_)
ss_Y2=MinMaxScaler(feature_range=(-1,1)).fit(colum11)# 进行归一化
input_data = ss_X.fit_transform(in_)
output_data11 = ss_Y.fit_transform(colum11)
# 前1/3组训练 后2/3组测试
n_samples=input_data.shape[0]
n=np.arange(n_samples)
m=int(n_samples/3)
xtrain=input_data[n[0:m],:]
ytrain=output_data11[n[0:m],0]
xtest=input_data[n[m:],:]
ytest=output_data11[n[m:],0]
# svm 回归
clf = svm.SVR(C=1, gamma=1,kernel='rbf')
clf.fit(xtrain,ytrain)
result1 = clf.predict(xtrain).reshape(-1,1)
result2 = clf.predict(xtest).reshape(-1,1)
# 反归一化
train_label=ss_Y2.inverse_transform(ytrain.reshape(-1,1))
test_label=ss_Y2.inverse_transform(ytest.reshape(-1,1))
train_pred=ss_Y2.inverse_transform(result1)
test_pred=ss_Y2.inverse_transform(result2)
# 结果统计
plt.figure()
plt.subplot(1,2,1)
plt.title("train set")
plt.xlabel("train_sample", size=14)
plt.ylabel("value", size=14)
plt.plot(train_pred, color='g',label='pred',linewidth=3)
plt.plot(train_label, color='r',label='true',linewidth=3)
plt.legend()
plt.show()
plt.subplot(1,2,2)
plt.title("test set")
plt.xlabel("test_sample", size=14)
plt.ylabel("value", size=14)
plt.plot(test_pred, color='g',label='pred',linewidth=3)
plt.plot(test_label, color='r',label='true',linewidth=3)
plt.legend()
plt.show()
# mape
train_mape=np.mean(np.abs((train_pred-train_label)/train_label))
# rmse
train_rmse=np.sqrt(np.mean(np.square(train_pred-train_label)))
# mae
train_mae=np.mean(np.abs(train_pred-train_label))
# R2
train_r2=r2_score(train_label,train_pred)
print('SVM训练集的mape:',train_mape,' rmse:',train_rmse,' mae:',train_mae,' R2:',train_r2)
# mape
test_mape=np.mean(np.abs((test_pred-test_label)/test_label))
# rmse
test_rmse=np.sqrt(np.mean(np.square(test_pred-test_label)))
# mae
test_mae=np.mean(np.abs(test_pred-test_label))
# R2
test_r2=r2_score(test_label,test_pred)
print('SVM测试集的mape:',test_mape,' rmse:',test_rmse,' mae:',test_mae,' R2:',test_r2)
# In[]
in_2=np.hstack([in_,colum11])# 用预测得到的数据 加上之前的10列输出构成11列输出
#输出依旧为原来的第11列
ss_X=MinMaxScaler(feature_range=(-1,1)).fit(in_2)
ss_Y3=MinMaxScaler(feature_range=(-1,1)).fit(out_)# 进行归一化
input_data = ss_X.fit_transform(in_)
output_data11 = ss_Y.fit_transform(out_)
# 前1/3组训练 后2/3组测试
n_samples=input_data.shape[0]
n=np.arange(n_samples)
m=int(n_samples/3)
xtrain=input_data[n[0:m],:]
ytrain=output_data11[n[0:m],0]
xtest=input_data[n[m:],:]
ytest=output_data11[n[m:],0]
# svm 回归
clf = svm.SVR(C=1, gamma=0.1,kernel='rbf')
clf.fit(xtrain,ytrain)
result1 = clf.predict(xtrain).reshape(-1,1)
result2 = clf.predict(xtest).reshape(-1,1)
# 反归一化
train_label=ss_Y3.inverse_transform(ytrain.reshape(-1,1))
test_label=ss_Y3.inverse_transform(ytest.reshape(-1,1))
train_pred=ss_Y3.inverse_transform(result1)
test_pred=ss_Y3.inverse_transform(result2)
# 结果统计
plt.figure()
plt.subplot(1,2,1)
plt.title("train set")
plt.xlabel("train_sample", size=14)
plt.ylabel("value", size=14)
plt.plot(train_pred, color='g',label='pred',linewidth=3)
plt.plot(train_label, color='r',label='true',linewidth=3)
plt.legend()
plt.show()
plt.subplot(1,2,2)
plt.title("test set")
plt.xlabel("test_sample", size=14)
plt.ylabel("value", size=14)
plt.plot(test_pred, color='g',label='pred',linewidth=3)
plt.plot(test_label, color='r',label='true',linewidth=3)
plt.legend()
plt.show()
# mape
train_mape=np.mean(np.abs((train_pred-train_label)/train_label))
# rmse
train_rmse=np.sqrt(np.mean(np.square(train_pred-train_label)))
# mae
train_mae=np.mean(np.abs(train_pred-train_label))
# R2
train_r2=r2_score(train_label,train_pred)
print('SVM训练集的mape:',train_mape,' rmse:',train_rmse,' mae:',train_mae,' R2:',train_r2)
# mape
test_mape=np.mean(np.abs((test_pred-test_label)/test_label))
# rmse
test_rmse=np.sqrt(np.mean(np.square(test_pred-test_label)))
# mae
test_mae=np.mean(np.abs(test_pred-test_label))
# R2
test_r2=r2_score(test_label,test_pred)
print('SVM测试集的mape:',test_mape,' rmse:',test_rmse,' mae:',test_mae,' R2:',test_r2)
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
svr_python.rar (2个子文件)
svr_python
svm.py 7KB
maydataa.mat 7KB
共 2 条
- 1
资源评论
神经网络机器学习智能算法画图绘图
- 粉丝: 2375
- 资源: 569
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功