一、模型验证

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

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

二、K折交叉验证

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

三、交叉验证的应用

1)模型参数选择

 #!/usr/bin/python

 import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Ridge,RidgeCV, ElasticNet, LassoCV, LassoLarsCV
from sklearn.model_selection import cross_val_score df=pd.read_csv('a.csv')
X_train=df.iloc[:,0:-1] y=df.price def rmse_cv(model):
rmse= np.sqrt(-cross_val_score(model, X_train, y, scoring="neg_mean_squared_error", cv = 3))
print(rmse)
return(rmse) alphas = [0.05, 0.1, 0.3, 1, 3, 5, 10, 15, 30, 50, 75] cv_ridge = [rmse_cv(Ridge(alpha = alpha)).mean() for alpha in alphas] cv_ridge = pd.Series(cv_ridge, index = alphas)
cv_ridge.plot(title = "Validation - Just Do It")
plt.xlabel("alpha")
plt.ylabel("rmse")
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 值:限制总并行执行的最大任务数。

  

python进行机器学习(四)之模型验证与参数选择的更多相关文章

  1. 支持向量机(SVM)利用网格搜索和交叉验证进行参数选择

    上一回有个读者问我:回归模型与分类模型的区别在哪?有什么不同,我在这里给他回答一下 : : : : 回归问题通常是用来预测一个值,如预测房价.未来的天气情况等等,例如一个产品的实际价格为500元,通过 ...

  2. 利用JS验证查询参数-选择月份后必须选择年份

    js代码: function queryAgentInfo(){ // 标记 var flag=false; //遍历所有月份 $(".month").each(function( ...

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

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

  4. 用python+sklearn(机器学习)实现天气预报数据 数据

    用python+sklearn机器学习实现天气预报 数据 项目地址 系列教程 勘误表 0.前言 1.爬虫 a.确认要被爬取的网页网址 b.爬虫部分 c.网页内容匹配取出部分 d.写入csv文件格式化 ...

  5. 用python+sklearn(机器学习)实现天气预报 准备

    用python+sklearn机器学习实现天气预报 准备 项目地址 系列教程 0.流程介绍 1. 环境搭建 a.python b.涉及到的机器学习相关库 sklearn panda seaborn j ...

  6. python大战机器学习——模型评估、选择与验证

    1.损失函数和风险函数 (1)损失函数:常见的有 0-1损失函数  绝对损失函数  平方损失函数  对数损失函数 (2)风险函数:损失函数的期望      经验风险:模型在数据集T上的平均损失 根据大 ...

  7. Python数据科学手册-机器学习之模型验证

    模型验证 model validation 就是在选择 模型 和 超参数 之后.通过对训练数据进行学习.对比模型对 已知 数据的预测值和实际值 的差异. 错误的模型验证方法. 用同一套数据训练 和 评 ...

  8. ASP.NET Core 中文文档 第四章 MVC(2.2)模型验证

    原文:Model Validation 作者:Rachel Appel 翻译:娄宇(Lyrics) 校对:孟帅洋(书缘) 在这篇文章中: 章节: 介绍模型验证 验证 Attribute 模型状态 处理 ...

  9. ASP.NET Core 中文文档 第四章 MVC(2.2)模型验证【转载】

    http://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-4_2_2-validation.html 介绍模型验证 在一个应用程序将数据存储到数据库之前,这个应 ...

随机推荐

  1. 【Linux】- vi/vim

    所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正 ...

  2. 【重读MSDN之ADO.NET】ADO.NET连接

    连接到ADO.NET中的数据源 在 ADO.NET 中,通过在连接字符串中提供必要的身份验证信息,使用 Connection 对象连接到特定的数据源.使用的 Connection 对象取决于数据源的类 ...

  3. 织梦CMS建站入门学习(二)

    织梦建站的数据库设计: 1.模型表:根据网站的需求,建立不同的数据模型,如:文章浏览,软件下载,视频观看等等. 2.栏目表:根据网站的需求,建立不同的栏目,每一个栏目选择一个数据模型. 3.内容主表: ...

  4. RPC架构-美团,京东面试题目

    RPC(Remote Procedure Call) RPC服务 从三个角度来介绍RPC服务:分别是RPC架构,同步异步调用以及流行的RPC框架. RPC架构 先说说RPC服务的基本架构吧.允许我可耻 ...

  5. JAVA IDE IntelliJ IDEA使用简介(二)—之基本操作

    一.在编辑器中打开文件  1.可以使用下面的几种方式打开project内的文件进行编辑  (·)在project窗口中双击需要编辑的文件.  (·)在project窗口选择需要编辑的文件,按F4  ( ...

  6. 【Python】python-内置常量

    引言 Python的内置常量不多,只有6个,分别是True.False.None.NotImplemented.Ellipsis.__debug__ 一.True 1.True是bool类型用来表示的 ...

  7. hdu 3015 Disharmony Trees (离散化+树状数组)

    Disharmony Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  8. [HNOI2010]合唱队 区间DP

    ---题面--- 题解: 偶然翻到这道题,,,就写了. 观察到一个数被插在哪里只受前一个数的影响,如果明确了前一个数是哪个,那么我们就可以确定大小关系,就可以知道当前这个数插在哪里,而上一个插入的数就 ...

  9. POJ3281:Dining——题解

    http://poj.org/problem?id=3281 题目大意: N牛,F种吃的D种喝的,牛可以在它喜欢的吃的喝的选一组,之后就不能选这个吃的喝的. 问最多满足多少人. ——————————— ...

  10. 四连测Day2

    题目:链接: https://pan.baidu.com/s/1ef_9hGBhczW0B4dz5IUKmw 密码: qgjy T1: hash后直接二分查询即可 #include<iostre ...