一、模型验证

  进行模型验证的一个重要目的是要选出一个最合适的模型,对于监督学习而言,我们希望模型对于未知数据的泛化能力强,所以就需要模型验证这一过程来体现不同的模型对于未知数据的表现效果。

  这里我们将训练集再分成训练集与验证集两部分,大概比例就是3:1吧。一般来讲不同的训练集、验证集分割的方法会导致其准确率不同,而交叉验证的基本思想是:将数据集进行一系列分割,生成一组不同的训练验证集,然后分别训练模型并计算测试准确率,这样就会得到多个模型与多个准确率,然后取其平均值即可,这样就有效防止因为数据的特定分割导致的准确率伪过高,过拟合问题,对于模型的评价更加客观、有说服力!

二、K折交叉验证

  1. 将数据集平均分割成K个等份
  2. 使用1份数据作为测试数据,其余作为训练数据
  3. 计算测试准确率
  4. 使用不同的测试集,重复2、3步骤
  5. 对测试准确率做平均,作为对未知数据预测准确率的估计

三、交叉验证的应用

1)模型参数选择

 1 #!/usr/bin/python
 2
 3 import pandas as pd
 4 import numpy as np
 5 import matplotlib.pyplot as plt
 6 from sklearn.linear_model import Ridge,RidgeCV, ElasticNet, LassoCV, LassoLarsCV
 7 from sklearn.model_selection import cross_val_score
 8
 9 df=pd.read_csv('a.csv')
10 X_train=df.iloc[:,0:-1]
11
12 y=df.price
13
14 def rmse_cv(model):
15     rmse= np.sqrt(-cross_val_score(model, X_train, y, scoring="neg_mean_squared_error", cv = 3))
16     print(rmse)
17     return(rmse)
18
19
20
21 alphas = [0.05, 0.1, 0.3, 1, 3, 5, 10, 15, 30, 50, 75]
22
23 cv_ridge = [rmse_cv(Ridge(alpha = alpha)).mean() for alpha in alphas]
24
25
26 cv_ridge = pd.Series(cv_ridge, index = alphas)
27 cv_ridge.plot(title = "Validation - Just Do It")
28 plt.xlabel("alpha")
29 plt.ylabel("rmse")
30 plt.show()

从上述图中看出来,当alpha=1时候,rmse值最小。

这就是交叉验证的一个典型应用,通过交叉验证选择Ridge回归的正则化参数alpha,取使残差平方值rmse最小的alpha值。

2)模型选择

  交叉验证也可以帮助我们进行模型选择,使用方式类似与上述参数选择,就是利用交叉验证集作用在不同的模型上,选择一个使残差平方值或者精确度最高(注:在scikit-learn的cross_val_score函数中可以选择使用那种方式)的模型最为最终模型。

3)特征选择

  通过交叉验证来进行特征的选择,对比不同的特征组合对于模型的预测效果,大概方法也类同上述所讲。

四、scikit-learn中cross_val_score函数

  sklearn.cross_validation.cross_val_score(estimator, X, y=None, scoring=None, cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs')

  estimator:所调用的机器学习模型算法

  X:训练集

  y:训练集的目标值

  scoring:评测模型的打分标准,scoring可调用的对应的函数名称如下:

Classification 
‘accuracy’sklearn.metrics.accuracy_score
‘average_precision’sklearn.metrics.average_precision_score
‘f1’sklearn.metrics.f1_score f1就是F-measure
‘precision’sklearn.metrics.precision_score
‘recall’sklearn.metrics.recall_score
‘roc_auc’sklearn.metrics.roc_auc_score
  Clustering 
‘adjusted_rand_score’sklearn.metrics.adjusted_rand_score
  Regression
‘mean_squared_error’sklearn.metrics.mean_squared_error
‘r2’sklearn.metrics.r2_score
neg_mean_absolute_error
neg_mean_squared_error
neg_median_absolute_error:参考http://blog.csdn.net/lipe12/article/details/51200510
  cv:交叉验证分割样本集的策略,默认是3折交叉验证。For integer/None inputs, if the estimator is a classifier and y is either binary or      multiclass, StratifiedKFold is used. In all other cases, KFold is used
 n_jobs:The number of CPUs to use to do the computation. -1 means ‘all CPUs’。
  pre_dispatch:控制总执行任务数量,以防止任务数量超过CPU数量,将内存消耗殆尽。
None:不做任务量限制,任务产生就执行。
int 值:限制总并行执行的最大任务数。

  

转载于:https://www.cnblogs.com/gczr/p/6807339.html

python进行机器学习(四)之模型验证与参数选择相关推荐

  1. 【机器学习】算法模型自动超参数优化方法

    什么是超参数? 学习器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter).还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数(Hyper ...

  2. SVM模型应用(四)SVM模型的超参数选择

    SVM模型超参数优化目前常用的方法是让C和g在一定的范围内取值,对于取定的c和g,把训练集作为原始数据集利用K-CV方法得到在此对c和g组合下验证集的分类准确率,最终取得训练集验证分类准确率最高的那组 ...

  3. 学习机器学习四 回归模型——线性回归、L1正则化(Lasso回归)、L2正则化(ridge回归)

    还记得什么是回归吗?回忆下回归就是连续的输出,分类是离散的. 回归模型一般分为:①线性回归--就是线性方程,类似为一元一次方程(y=wx+b),比如你的年龄: ②逻辑回归(类似为曲线方程) 线性回归 ...

  4. 机器学习——SVM之交叉验证对参数(C,gamma)进行优化以及选择

    目录 一.(C,gamma)简介 二.交叉验证 1.什么是交叉验证? 2.参数优化方法 3.python实现交叉验证cross_val_score(网格搜索算法GridSearchCV) 1)关键代码 ...

  5. 机器学习之决策树模型最优属性选择方法

    决策树模型是用于解决分类问题的一个模型,它的特点是简答.逻辑清晰.可解释性好. 决策树是基于"树"结构进行决策的. 每个"内部结点"对应于某个属性上的" ...

  6. 博客摘录「 3种交叉验证与参数选择方式」2023年5月17日

    np.random.seed(seed) kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=seed) 交叉验证的主要实现

  7. 用python构建机器学习模型分析空气质量

    空气质量(air quality)的好坏反映了空气污染程度,它是依据空气中污染物浓度的高低来判断的.空气污染是一个复杂的现象,在特定时间和地点空气污染物浓度受到许多因素影响.来自固定和流动污染源的人为 ...

  8. 用python+sklearn(机器学习)实现天气预报数据 模型和使用

    用python+sklearn机器学习实现天气预报 模型和使用 项目地址 系列教程 0.前言 1.建立模型 a.准备 引入所需要的头文件 选择模型 选择评估方法 获取数据集 b.建立模型 c.获取模型 ...

  9. 机器学习模型的超参数优化 | 原力计划

    作者 | deephub 责编 | 王晓曼 出品 | CSDN博客 头图 | CSDN付费下载自东方IC 引言 模型优化是机器学习算法实现中最困难的挑战之一.机器学习和深度学习理论的所有分支都致力于模 ...

最新文章

  1. linux 解压缩常用命令
  2. 一次性打开计算机任意程序的脚本(C语言)
  3. linux 下 nginx phpcgi 的安装及配置
  4. jQuery学习笔记--JqGrid相关操作 方法列表 备忘 重点讲解(超重要)
  5. BoBo接入云信,直播互动“连麦抢麦”分分钟搞定
  6. C#设计模式——生成器模式(Builder Pattern)
  7. OS- -文件系统(一)
  8. python 矩阵合并_numpy 的矩阵合并与分割
  9. 从零入门Serverless|一文详解Serverless技术选型
  10. bzoj 2553 [BeiJing2011]禁忌——AC自动机+概率DP+矩阵
  11. jstl概念以及基本使用
  12. 前置加加与后置加加的区别
  13. FullScreen实现全屏和分屏
  14. java开发一年后学习计划
  15. radmin注册密码
  16. 工业机器人产业链展板_赵德明调研六大新产业十大产业链发展情况
  17. 悠闲时光增强现实之游戏王(Yu-Gi-Oh)
  18. MODBUS通讯协议学习总结
  19. magicbookpro做php开发,荣耀MagicBook Pro测评:全面屏专业生产力工具
  20. None和nan、NaN、NAN

热门文章

  1. 寒假思雨姐摸底E题,题解
  2. Objective-c:OC语言简介、类与对象
  3. 小程序与h5的相互跳转
  4. mybatis批量入库(springboot mybatis 批量入库)
  5. 【安卓】【Dimens】适配文件创建
  6. 上新啦|“慧票通”不断超越自己,新版本重磅来袭!
  7. 离散实验3 集合的基本运算 (编程要求 根据提示,练习集合的基本运算法则)
  8. 在线查看word文档
  9. 如何在麒麟系统上运行Vue项目
  10. 从开发者的角度剖析微信小程序