交叉验证,五次五折,十次十折

2023-11-21 07:20

本文主要是介绍交叉验证,五次五折,十次十折,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

交叉验证是一种评估机器学习模型的表现;

其中k折交叉验证就是指:将一个数据集分成k个部分,每次取其中的一份作为测试集,k-1份作为训练集;因此,k折交叉验证就会进行k次,获得k个结果后取平均值

以10折交叉验证为例:

图源周志华《机器学习》

底层实现代码:

for i in range(10):  # 十次data = readdataset("E:\ML\smote\Synthetic_pima_naivesmote.xlsx")lines = data.shape[0]  # 行数test_ratio = 0.1  # 测试集比例t=data.shape[1] label = data[:, t-1]test_line = int(lines * test_ratio)counts = 0for k in range(10):  # 十折for i in range(test_line):classifyresults = classify(data[i], data[test_line:lines], label[test_line:lines], 3)if classifyresults == label[i]:counts += 1aa = copy.deepcopy(data[0:test_line])data[0:lines - test_line] = data[test_line:lines]data[lines - test_line:lines] = aa#print(norm_data)bb = copy.deepcopy(label[0:test_line])label[0:lines - test_line] = label[test_line:lines]label[lines - test_line:lines] = bbprint('knn10次10折交叉验证的正确率为{}'.format(100*counts/lines))

也可以选择sklearn中stratifiedkFold分层采样函数,分层采样可以使得不平衡数据集中各个类别的平衡性,即不会出现测试集中没有少数类的现象

代码如下

from sklearn.model_selection import StratifiedKFold
id = 0
for i in range(5):skf = StratifiedKFold(n_splits=5, shuffle=True,random_state=None)id = 0for train_index,test_index in skf.split(X,y):id+=1X_train, X_test = X[train_index], X[test_index]y_train, y_test = y[train_index], y[test_index]y_train = y_train[:, np.newaxis]y_test = y_test[:,np.newaxis]train = np.hstack((X_train,y_train))test = np.hstack((X_test,y_test))train = pd.DataFrame(train)test = pd.DataFrame(test)train.to_excel('E:\\ML\\smote\\数据集划分\\page-blocks-1-3_vs_4\\'+str(i+1)+'\\train'+str(id)+'.xlsx',index = False)test.to_excel('E:\\ML\\smote\\数据集划分\\page-blocks-1-3_vs_4\\'+str(i+1)+'\\test'+str(id)+'.xlsx',index = False)

这篇关于交叉验证,五次五折,十次十折的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/400748

相关文章

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

easyui 验证下拉菜单select

validatebox.js中添加以下方法: selectRequired: {validator: function (value) {if (value == "" || value.indexOf('请选择') >= 0 || value.indexOf('全部') >= 0) {return false;}else {return true;}},message: '该下拉框为必选项'}

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹