文档章节

【学习笔记】模型的选择与调优

o
 osc_n6euf5h6
发布于 2019/03/19 21:39
字数 609
阅读 0
收藏 0

精选30+云产品,助力企业轻松上云!>>>

交叉验证

目的:为了让被评估的模型更加准确可信。

交叉验证:将拿到的数据,分为训练和验证集。以下图为例:将数据分成5份,其中一份作为验证集。然后经过次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。

img

超参数搜索-网格搜索

通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。

img

超参数搜索-网格搜索API

sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None):对估计器的指定参数值进行详尽搜索

参数:

  • estimator:估计器对象
  • param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}
  • cv:指定几折交叉验证

方法:

  • fit:输入训练数据
  • score:准确率

属性:

  • best_score_:在交叉验证中测试的最好结果
  • best_estimator_:最好的参数模型
  • cv_results_:每次交叉验证后的测试集准确率结果和训练集准确率结果

【学习笔记】分类算法-k近邻算法中的“预测用户签到位置”改成网格搜索

from sklearn.model_selection import GridSearchCV
...
gc = GridSearchCV(knn, param_grid={"n_neighbors": [1, 3, 5, 10]}, cv=2)
gc.fit(x_train, y_train.astype("int"))
print("在测试集上的准确率:", gc.score(x_test, y_test.astype("int")))
print("在交叉验证中最后的结果:", gc.best_params_)
print("最好的模型是:", gc.best_estimator_)
print("每个超参数每次的结果为:", gc.cv_results)

结果:

在测试集上的准确率: 0.8293838862559242
在交叉验证中最后的结果: {'n_neighbors': 10}
最好的模型是: KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
           metric_params=None, n_jobs=None, n_neighbors=10, p=2,
           weights='uniform')
每个超参数每次的结果为: {'mean_fit_time': array([0.00898993, 0.00898921, 0.00849307, 0.01098037]), 'std_fit_time': array([6.79492950e-06, 7.74860382e-06, 9.17911530e-06, 1.51014328e-03]), 'mean_score_time': array([0.47162163, 0.62682521, 0.71092987, 0.84417915]), 'std_score_time': array([0.00648773, 0.00649297, 0.00772619, 0.00073266]), 'param_n_neighbors': masked_array(data=[1, 3, 5, 10],
             mask=[False, False, False, False],
       fill_value='?',
            dtype=object), 'params': [{'n_neighbors': 1}, {'n_neighbors': 3}, {'n_neighbors': 5}, {'n_neighbors': 10}], 'split0_test_score': array([0.77042226, 0.82359905, 0.83149171, 0.8343528 ]), 'split1_test_score': array([0.773846  , 0.82554117, 0.83285559, 0.8342394 ]), 'mean_test_score': array([0.77213252, 0.8245692 , 0.83217301, 0.83429615]), 'std_test_score': array([1.71187149e-03, 9.71057298e-04, 6.81938147e-04, 5.67014065e-05]), 'rank_test_score': array([4, 3, 2, 1]), 'split0_train_score': array([1.        , 0.88316695, 0.86497974, 0.85133933]), 'split1_train_score': array([1.        , 0.88190608, 0.8636543 , 0.84490923]), 'mean_train_score': array([1.        , 0.88253651, 0.86431702, 0.84812428]), 'std_train_score': array([0.        , 0.00063043, 0.00066272, 0.00321505])}

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

Springboot+Redis综合运用/缓存使用

项目引入依赖(安装redis自行百度) <!-- spring-boot redis --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactI......

心田已荒
33分钟前
5
0
puppeteer csdn 登录 [失败, 跨域cookie无法解决]

使用 puppeteer 登录csdn 暂时没能解决这个问题 滑块可以滑到右边 原因在于cookie const puppeteer = require('puppeteer');const uid = '===';const pwd = '===';(async () => { ......

阿豪boy
52分钟前
17
0
即使使用__init__.py,也如何解决“尝试以非软件包方式进行相对导入”

问题: I'm trying to follow PEP 328 , with the following directory structure: 我正在尝试使用以下目录结构来遵循PEP 328 : pkg/ __init__.py components/ core.py __init_......

富含淀粉
52分钟前
19
0
Java线程池

前言 Java中对线程池的抽象是ThreadPoolExecutor类,Executors是一个工具类,内置了多种创建线程池的方法: newFixedThreadPool:固定长度线程池 newCachedThreadPool :可缓存线程池 newSin...

nullpointerxyz
59分钟前
57
0
Python笔记:用Python制作二维码

这些年,二维码在我国的日常使用频率特别大。因为其具有简单及安全性吧!除了用网络工具制作二维码,其实用JavaScript或Python也可以制作二维码,而且更有个性。 示例一(制作普通黑白二维码...

tengyulong
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部