目录
前言
学习笔记,实现功能承接上文,功能包括Excal数据读取、写入,实现支持向量机的五倍交叉验证。
一、导入相关的库
import xlsxwriter
from torch.utils.data import Dataset
import numpy as np
import xlrd
from sklearn.model_selection import KFold
from sklearn import preprocessing
from sklearn.svm import SVR
其中,xlsxwriter库用于五倍交叉验证结果输出。
二、实现步骤
1.建立自己的数据集
代码如下(之前的文章中有写到可自行查阅):
class Mydataset(Dataset):
def __init__(self,filepath):
datalist = []
data = xlrd.open_workbook(filepath, encoding_override='utf-8')
table = data.sheets()[0] # 选定表sheet1 或sheet2 0表示sheet1 1表示sheet2
nrows = table.nrows # 获取行号
ncols = table.ncols # 获取列号
'''
def __init__(self,filepath):
xy = np.loadtxt(filepath,delimiter=' ',dtype=np.float)
self.x_data = torch.from_numpy(data_scaler.fit_transform(datalist[:,:-1]))
self.y_data = torch.from_numpy(xy[:,[-1]])
'''
for i in range(0, nrows): # 第0行为表头
alldata = table.row_values(i) # 循环输出excel表中每一行,即所有数据
datalist.append(alldata) # 创建
datalist = np.array(datalist,dtype=np.float32) #将获取的数据全部转换成数组浮点数
self.len = datalist.shape[0]
self.x = min_max_scaler1.fit_transform(datalist[:,:-1]) #将特征输入归一化
self.y = datalist[:,[-1]]
print('数据录入成功')
def __getitem__(self, index):
return self.x[index],self.y[index]
def __len__(self):
return self.len
2.建立支持向量机模型
代码如下:
clf = SVR(kernel='rbf',gamma='auto',C=0.5) #支持向量机回归问题模型
支持向量机算法详解不在这里过多赘述,有需要可自行查找相关文章。
3.导入相关数据
data = Mydataset(Work_inpath)
4.导入训练模型
cv = KFold(n_splits=5,shuffle=True,random_state=42) #n_splits表示进行几倍交叉验证、shuffle表示是否打乱、random_state表示随机种子(固定训练集)
5、建立KFOLD交叉验证算法并写入excal文件
workbook = xlsxwriter.Workbook('KFOLD.xlsx') #创建Kfold交叉验证excal文件
worksheet1 = workbook.add_worksheet('sheet1') #添加一个新表
worksheet1.activate() # 激活该表
6、遍历实现5倍交叉验证
for train_index,test_index in cv.split(data.x):
print('train_index:%s,test_index:%s' % (train_index, test_index))
X_trian, X_test = data.x[train_index],data.x[test_index] #根据位置索引到准确训练集测试集位置
Y_trian, Y_test = data.y[train_index], data.y[test_index]
clf.fit(X_trian,Y_trian) # 根据划分的训练集进行模型训练
prediction = clf.predict(X_test) # 模型预测
row = 0 #写入文件初始行
col = 0 + i #写入文件初始列
i += 1 # 列+1
for x in range(len(test_index)):
worksheet1.write_column(row,col,prediction[[x]])
row +=1
workbook.close() #输出结果
三、结果展示
总结
本文介绍了利用相关库实现支持向量机K倍交叉验证的方法。