支持向量机算法+数据读取+多倍交叉验证实现

目录

前言

一、导入相关的库

二、实现步骤

1.建立自己的数据集

2.建立支持向量机模型

3.导入相关数据

4.导入训练模型

5、建立KFOLD交叉验证算法并写入excal文件

6、遍历实现5倍交叉验证

三、结果展示

总结

前言

学习笔记,实现功能承接上文,功能包括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倍交叉验证的方法。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值