热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ML学习笔记20210824分类算法模型选择与调优

3.模型选择和调优3.1交叉验证定义目的为了让模型得精度更加可信3.2超参数搜索GridSearch对K值进行选择。k[1,2,3,4,5,6]循环遍历搜索。API参数1&
3. 模型选择和调优

3.1 交叉验证


  1. 定义
    在这里插入图片描述
    在这里插入图片描述
  2. 目的为了让模型得精度更加可信

3.2 超参数搜索 Grid Search


  1. 对K值进行选择。k=[1,2,3,4,5,6]循环遍历搜索。
  2. API
    参数1:传入预估器。
    参数2:超参数得取值,字典类型,{‘超参数名称’:[参数列表]}
    参数3:cv 几折交叉验证
    返回值:可查看最佳参数啥的。
    在这里插入图片描述

3.3 鸢尾花案例增加K值调优

def KNN_optimal(): # 模型选择和调优# 网格搜索和交叉验证x_train, x_test, y_train, y_test = load_data()estimator = KNeighborsClassifier() # 默认都是欧式距离, 采用的是minkowski推广算法,p=1是曼哈顿, p=2是欧式, 而默认值为2# 开始调优# 第一个参数是estimator# 第二个是估计器参数,参数名称(字符串)作为key,要测试的参数列表作为value的字典,或这样的字典构成的列表# 第三个是指定cv=K, K折交叉验证# https://www.cnblogs.com/dblsha/p/10161798.htmlparam_dict = {"n_neighbors": [1, 3, 5, 7, 9, 11]}estimator = GridSearchCV(estimator, param_grid=param_dict, cv=10)# 结束调优estimator.fit(x_train, y_train)# 传入测试值通过前面的预估器获得预测值y_predict = estimator.predict(x_test)print("预测值为:", y_predict, "\n真实值为:", y_test, "\n比较结果为:", y_test == y_predict)score = estimator.score(x_test, y_test)print("准确率为: ", score)# ------------------print("最佳参数:\n", estimator.best_params_)print("最佳结果:\n", estimator.best_score_)print("最佳估计器:\n", estimator.best_estimator_)print("交叉验证结果:\n", estimator.cv_results_)# -----------------以上是自动筛选出的最佳参数, 调优结果return None

3.4 预测 facebook 签到位置


  • 数据集介绍
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • . 流程分析
    1)获取数据
    2)数据处理:
  • 特征值:x
  • 目标值:y
  • a.缩小范围:2
  • b.time -> 年月日时分秒
  • c.过滤签到次数少的地点
    3)特征工程:特征提取,特征预处理:标准化,特征降维
    4)算法训练:KNN算法得预估流程
    5)模型评估:模型选择与调优
    6)应用

import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScalerdef load_data():data &#61; pd.read_csv("../../resources/FBlocation/train.csv")# data &#61; data.query("x<2.5 & x>1 & y<1.5 & y>1.0") # query 方法处理数据data &#61; data.copy()# 处理时间特征time_value &#61; pd.to_datetime(data["time"], unit&#61;"s") # 通用datetime时间类型数据date &#61; pd.DatetimeIndex(time_value) # 转换为可筛选的时间格式data["day"] &#61; date.daydata["weekday"] &#61; date.weekdaydata["hour"] &#61; date.hour# 过滤签到次数少的地点print("计数count统计\n", data.groupby("place_id").count()) # 展示为可观测列表数据, 这里计数, 并且后面的所有的字段数据全是代表出现的总次数place_count &#61; data.groupby("place_id").count()["row_id"] # 签到place的次数统计, 方便直观展示而只过滤place和次数, row_id是随便加的, 现在所有字段都代表count值, 所以可以取其他的也行print("签到place的次数统计\n", place_count)place_count[place_count > 3] # 过滤所有数据筛选出签到(这里是row_id>3)次数大于3的print("过滤所有数据,筛选出签到次数大于10的\n", place_count[place_count > 10])data["place_id"].isin(place_count[place_count > 3].index.values) # 布尔值索引print("布尔值索引\n", data["place_id"].isin(place_count[place_count > 10].index.values))final_data &#61; data[data["place_id"].isin(place_count[place_count > 10].index.values)] # 通过布尔索引筛选print("处理后的data:\n", final_data)return final_datadef implement():used_data_x &#61; load_data()[["x", "y", "accuracy", "day", "weekday", "hour"]]used_data_y &#61; load_data()["place_id"]x_train, x_test, y_train, y_test &#61; \train_test_split(used_data_x, used_data_y)transfer &#61; StandardScaler()x_train &#61; transfer.fit_transform(x_train)x_test &#61; transfer.transform(x_test)estimator &#61; KNeighborsClassifier()param_dict &#61; {"n_neighbors": [5, 10, 15, 20]}estimator &#61; GridSearchCV(estimator, param_grid&#61;param_dict, cv&#61;4)estimator.fit(x_train, y_train) # 训练集里面的数据和目标值# 传入测试值通过前面的预估器获得预测值y_predict &#61; estimator.predict(x_test)print("预测值为:", y_predict, "\n真实值为:", y_test, "\n比较结果为:", y_test &#61;&#61; y_predict)score &#61; estimator.score(x_test, y_test)print("准确率为: ", score)# ------------------print("最佳参数:\n", estimator.best_params_)print("最佳结果:\n", estimator.best_score_)print("最佳估计器:\n", estimator.best_estimator_)print("交叉验证结果:\n", estimator.cv_results_)# -----------------以上是自动筛选出的最佳参数, 调优结果return Noneif __name__ &#61;&#61; &#39;__main__&#39;:implement()


推荐阅读
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 本文档介绍了如何在Visual Studio 2010环境下,利用C#语言连接SQL Server 2008数据库,并实现基本的数据操作,如增删改查等功能。通过构建一个面向对象的数据库工具类,简化了数据库操作流程。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 掌握数据库引擎存储过程与系统视图查询:DBA与BI开发者的必备技能
    本文介绍了如何利用数据库引擎存储过程及系统视图查询数据库结构和对象信息,为数据库管理员(DBA)和商业智能(BI)开发人员提供实用的基础知识。文章涵盖了一系列常用的SQL Server存储过程和系统视图,帮助读者快速获取数据库的相关信息。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 本文介绍如何在C#中将GridView控件的内容保存为图片文件。通过代码示例,详细说明了创建位图、绘制图形并保存图像的步骤。 ... [详细]
  • 本文详细介绍了如何在Android应用中使用GridView组件以网格形式展示数据(如文本和图像)。通过行列布局,实现类似矩阵的数据展示效果。 ... [详细]
  • Python 中使用 Pyecharts 绘制雷达图详解
    本文将详细介绍如何在 Python 环境中利用 Pyecharts 库来创建美观且功能丰富的雷达图。适合需要图形化展示多维度数据的开发者和研究人员。 ... [详细]
  • 开发笔记:Python:GUI之tkinter学习笔记1控件的介绍及使用
    开发笔记:Python:GUI之tkinter学习笔记1控件的介绍及使用 ... [详细]
  • 本文介绍了如何在VB.NET版机房收费系统中实现数据从DataGridView导出至Excel的功能,包括环境配置、代码实现及常见问题解决方法。 ... [详细]
author-avatar
大航
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有