目录

1.概览

2.代码


1.概览

当我们要从多个模型中快速选择一个较为合适的模型时,也可以把数据依次放到每个模型中去测试,找到泛化能力较强的那一个。虽然这是一个「笨」办法,但在实验流程上也有一些取巧的步骤。其中之一,就是今天要介绍的 K 折交叉验证(k-fold cross-validation)。

其通过将数据集均分成 K 个子集,并依次将其中的 K-1 个子集作为训练集,剩下的 1 个子集用作测试集。在 K 折交叉验证的过程中,每个子集均会被验证一次。

2.代码

# -*- coding: utf-8 -*-
"""
Created on Thu Sep  6 19:54:24 2018k折交叉验证数据:(鲍鱼)年龄数据集 challenge-6-abalone.csvhttp://labfile.oss.aliyuncs.com/courses/1081/challenge-6-abalone.csv数据说明:最后 1 列为目标列,统计了鲍鱼的环数(Rings),环数从 1-30 变化,值越大代表鲍鱼的年龄越大。方法:1.批量替换df.replace()    指定替换值df.Sex.replace({'M':0,'F':1,'I':2})2.剪切函数    pd.cut(data,bins=[元素箱子],labels=[转成的标签])    这个data里的数据必须是数值型    可用于从连续变量到分类变量。pd.cut(df.Rings,bins=[0,10,20,30],labels=['small','middle','large'])3.dataframe格式1.获取元素,先用data.index[1]获取行号,然后再用pd.iloc[行号]执行操作df.iloc[df.index[-1]].values2.直接通过pd.iloc[:,:]获取目标数据4.拼接dataframe数据pd.dataframe(data1,columns=columns_value).append(data2,ignore_index=True)5.数据类型转换字符串转换数值pd.to_numeric(data)6.dataframe格式数据,重新设置column会自动覆盖原来的column
"""
#加载数据集
import pandas as pd
df=pd.read_csv('challenge-6-abalone.csv')
"""数据预处理
1.重新确认column
2.连续型字段转换为类别字段
3.字段替换
"""
#数据最后一行是字段名,对数据进行整改,如何拼接dataframe
columns_name = df.iloc[df.index[-1]].values#通过df.index[-1]获取索引行号,然后用df.iloc[]来过滤
new_line = df.columns.values
df = df.drop(df.index[-1])
df.columns = columns_name
df = pd.DataFrame([new_line], columns=columns_name).append(df, ignore_index=True)
#本次实验将 1-10 环定义为 small(小鲍鱼), 11-20 环定为 middle(中型鲍鱼), 21-30 定为 large(老鲍鱼)。
#Sex 列出现的 3 个性别种类 M, F, I,我们分别使用数值 0,1,2 进行替换。
#按区间替换是可使用 pd.cut()
df['Rings']=pd.to_numeric(df['Rings'])#将字符串型字段转换为数值型
df['Rings']=pd.cut(df.Rings,bins=[0,10,20,30],labels=['small','middle','large'])
df['Sex']=df.Sex.replace({'M':0,'F':1,'I':2})#批量替换#print(df.head())
""" k折子集均分
预处理之后的数据集平均划分为 K 个子集
结果需要遍历才能获取具体数据
"""
from sklearn.model_selection import KFold
kf=KFold(n_splits=10,shuffle=False,random_state=50)
for train_index,test_index in kf.split(df):print('train',len(train_index),'test',len(test_index))
"""k折交叉验证
使用k近邻模型构建学习分类模型,并进行10折交叉验证
"""from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score
features=df.iloc[:,0:8]
target=df['Rings']
model=KNeighborsClassifier()
print(cross_val_score(model,X=features,y=target,cv=10))"""各分类模型 10 折交叉验证函数使用 10 折交叉验证方法测试鲍鱼数据集在逻辑回归、K 近邻、
支持向量机、人工神经网络、决策树、随机森林、Adaboost 默认参数下的表现结果,
并取 10 折交叉验证结果取平均值。
"""
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.neural_network import MLPClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import AdaBoostClassifier
def classifier():scores=[]models=[LogisticRegression(),KNeighborsClassifier(),SVC(),MLPClassifier(),DecisionTreeClassifier(),RandomForestClassifier(),AdaBoostClassifier()]for model in models:score=cross_val_score(model,X=features,y=target,cv=10)mean_score=np.mean(score)scores.append(mean_score)return scores
a=classifier()
print('aaa',a)
import  matplotlib.pyplot as plt
plt.plot([i for i in range(len(a))],a)

结果图:

你会发现,当我们使用默认参数时,7 种分类预测模型的表现都还不错,其中支持向量机、人工神经网络、随机森林等表现突出。此时,我们就可以先初选出这几种方法,然后通过调参得到更理想的结果。

寻找最优模型---K折交叉验证相关推荐

  1. 参数调优:K折交叉验证与GridSearch网格搜索

    本文代码及数据集来自<Python大数据分析与机器学习商业案例实战> 一.K折交叉验证 在机器学习中,因为训练集和测试集的数据划分是随机的,所以有时会重复地使用数据,以便更好地评估模型的有 ...

  2. Kaggle上分技巧——单模K折交叉验证训练+多模型融合

    一.K折交叉验证训练单个模型 1.1 k 折交叉验证(K-Fold Cross Validation)原理 通过对 k 个不同分组训练的结果进行平均来减少方差,因此模型的性能对数据的划分就不那么敏感, ...

  3. python 交叉验证后获取模型_Python机器学习:6.2 K折交叉验证评估模型性能

    训练机器学习模型的关键一步是要评估模型的泛化能力.如果我们训练好模型后,还是用训练集取评估模型的性能,这显然是不符合逻辑的.一个模型如果性能不好,要么是因为模型过于复杂导致过拟合(高方差),要么是模型 ...

  4. 5折交叉验证_[Machine Learning] 模型评估——交叉验证/K折交叉验证

    首先区分两个概念:'模型评估' 与 '模型性能度量' 模型评估:这里强调的是如何划分和利用数据,对模型学习能力的评估,重点在数据的划分方法. Keywords: 划分.利用数据 模型性能度量:是在研究 ...

  5. R语言caret包构建xgboost模型实战:特征工程(连续数据离散化、因子化、无用特征删除)、配置模型参数(随机超参数寻优、10折交叉验证)并训练模型

    R语言caret包构建xgboost模型实战:特征工程(连续数据离散化.因子化.无用特征删除).配置模型参数(随机超参数寻优.10折交叉验证)并训练模型 目录

  6. Python使用tpot获取最优模型、将最优模型应用于交叉验证数据集(5折)获取数据集下的最优表现,并将每一折(fold)的预测结果、概率、属于哪一折与测试集标签、结果、概率一并整合输出为结果文件

    Python使用tpot获取最优模型.将最优模型应用于交叉验证数据集(5折)获取数据集下的最优表现,并将每一折(fold)的预测结果.概率.属于哪一折与测试集标签.结果.概率一并整合输出为结果文件 目 ...

  7. ML:模型训练/模型评估中常用的两种方法代码实现(留一法一次性切分训练和K折交叉验证训练)

    ML:模型训练/模型评估中常用的两种方法代码实现(留一法一次性切分训练和K折交叉验证训练) 目录 模型训练评估中常用的两种方法代码实现 T1.留一法一次性切分训练 T2.K折交叉验证训 模型训练评估中 ...

  8. K折交叉验证与模型评估

    K折交叉验证的原理 见 https://www.jianshu.com/p/284581d9b189 模型评估 当使用十折交叉验证时,每次训练集为90%的数据,测试集为10%的数据.用这10%数据,我 ...

  9. 机器学习基础|K折交叉验证与超参数搜索

    文章目录 交叉验证 交叉验证的概念 K的取值 为什么要用K折交叉验证 Sklearn交叉验证API 超参数搜索 超参数的概念 超参数搜索的概念 超参数搜索的原理 Sklearn超参数搜索API 实例 ...

最新文章

  1. Linux的load导入语句,LOAD DATA INFILE语句导入数据进入MySQL的一些注意事项
  2. 剑指offer(牛客)——从尾到头打印链表
  3. 修改MySQL字符集
  4. 计算机应用基础实训任务书,《计算机应用基础》任务书
  5. JVM从入门到精通(五): Java运行时数据区和常用指令
  6. java的spinner_java中的spinner | 学步园
  7. 《非暴力沟通》听书心得
  8. 形参与实参在函数中的传递
  9. Flash Memory(一)
  10. ClientScript.RegisterStartupScript 不起作用
  11. preference android:layout,自定义PreferenceScreen的布局
  12. 千方百剂医药管理系统对接第三方WMS系统(天力士物流)
  13. 信息安全理论与技术知识点总结
  14. 谷歌生物医学翻译软件_翻译器可翻译方言和文言文 超出谷歌微软的翻译软件能力...
  15. python下面代码是什么意思_python的入门,代码,什么意思?
  16. 高通8953调试I2S小记
  17. Port 1-1023
  18. 淘宝现金红包系统 都是你们想要的!
  19. DLNA - 一个伟大的方式来享受流媒体电影在首页
  20. Mybatis动态创建表

热门文章

  1. 如何成长为一名思维缜密的产品经理
  2. android studio集成onvif协议的网络摄像头
  3. 百度的年会游戏(解题报告)
  4. EBS开发_验证AP发票
  5. 分形(Fractal)及分形维数(Fractal dimension)
  6. 酷乐天气开发记录总结1
  7. ecu根据什么信号对点火提前角_酷乐专栏 | 升级你的点火系统,这可能是最被忽略的步骤 —— 引擎管理 Vol.08...
  8. 转] 袁天罡称骨算命法
  9. 原来CSS的background还可以这么玩
  10. 用scikit-learn 训练SVM的例子, clf.fit() clf.predict() 的作用