用Python Sklearn包构建SVR模型。
from __future__ import division
import time
import pandas as pd
import numpy as np
from sklearn.svm import SVR
from sklearn import metrics
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import learning_curve
import matplotlib.pyplot as plt
#############################################################################
# 数据集
X=pd.read_csv('X8.csv')
data_y=pd.read_csv('y8.csv')
Y=np.ravel(data_y)
X_test=pd.read_csv('X8_test.csv')
data_y_test=pd.read_csv('y8_test.csv')
Y_test=np.ravel(data_y_test)
#############################################################################
# 训练SVR模型
# 训练规模
train_size = 99
# 初始化SVR
svr = GridSearchCV(SVR(kernel='rbf', gamma=0.1), cv=5,
param_grid={"C": [1e0, 1e1, 1e2, 1e3],
"gamma": np.logspace(-2, 2, 5)})
# 记录训练时间
t0 = time.time()
# 训练
svr.fit(X[:train_size], Y[:train_size])
svr_fit = time.time() - t0
t0 = time.time()
# 测试
y_svr = svr.predict(X_test)
svr_predict = time.time() - t0
print(y_svr)
print(Y_test)
print("RMSE:", np.sqrt(metrics.mean_squared_error(Y_test, y_svr)))
##############################################################################
################################################################################
# 对学习过程进行可视化
plt.figure()
svr = SVR(kernel='rbf', C=1e1, gamma=0.1)
train_sizes, train_scores_svr, test_scores_svr = \
learning_curve(svr, X[:98], Y[:98], train_sizes=np.linspace(0.1, 1, 10),
scoring="neg_mean_squared_error", cv=10)
plt.plot(train_sizes, -test_scores_svr.mean(1), 'o-', color="r",
label="SVR")
plt.xlabel("Train size")
plt.ylabel("Mean Squared Error")
plt.title('Learning curves')
plt.legend(loc="best")
plt.show()
#ROC曲线
plt.figure()
plt.plot(range(len(y_svr)),y_svr,'b',label="predict")
plt.plot(range(len(Y_test)),Y_test,'r',label="test")
plt.legend(loc="upper right")
plt.xlabel("the number of samples")
plt.ylabel("value of adsorption energy")
plt.show()
#优化