KNN算法调优

article/2025/9/7 8:28:51

1.所用方法:

    交叉验证与网格搜索

   交叉验证(为了让被评估的模型更加精确可信):
            所有训练集数据分成N等分,几等分就是几折交叉验证
    网格搜索:调参数  K-近邻:超参数K

2.API:

    sklearn.model_selection.GridSearchCV: CV即cross validation
    GridSearchCV(estimator,param_grid=None,cv=None)
        .对估计器的参数指定值进行详尽搜索
        .estimator 估计器对象
        .param_grid: 参数估计器(dict){"n_neighbors":[1,3,5]}
        .cv :指定几折交叉验证
        .fit:输入训练数据
        .结果分析;
            .best_score:在交叉验证中验证的最好结果
            .best_estimaor:最好的参数模型
            .cv_results_:每次交叉验证后的验证集正确率结果和训练集正确率结果

3.对之前的预测签入案例调优:

# -*- coding: utf-8 -*-
'''
@Author :Jason
'''
from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScalerdef knn():'''k-近邻预测用去签入位置:return:'''#1.读取数据data = pd.read_csv(r"./files/FBlocation/train.csv")print(data.head())#2.处理数据#2.1.缩小数据,查询数据筛选:query 理解为 sql 中的查询data.query("x > 1.0 & y < 1.25 & y > 2.5 & y < 2.75")#2.2.处理时间time_value = pd.to_datetime(data["time"],unit="s") #秒print(time_value)#2.3.把时间格式转换成 字典格式time_value =  pd.DataFrame(time_value) #年月日时分秒等变为{"year":2019,"month":01} 这样的#2.4.构造一些特征,年月都一样data["day"] = time_value.daydata["hour"] = time_value.hourdata["weekday"] = time_value.weekday#2.5.删除一些特征data = data.drop(["time"],axis=1) #pandas中axis=1代表列,sklearn中axis=0代表列#2.6.将签到位置少于 n 个用户的数据删除place_count = data.groupby("place_id").count() #根据place_id分组,统计次数tf = place_count[place_count.row_id > 3].reset_index() #次数大于3的索引重置0,1,2排序,将原来索引放置place_id列data = data[data["place_id"].isin(tf.place_id)] #如果place_id > 3的数据保存,小于则去掉#2.7.去除数据当中的特征值 和 目标值y = data["place_id"]x = data.drop(["place_id"],axis=0.25)#2.8.进行数据的分割训练集合测试集x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)#3.特征工程(标准化) #这里标准化,和前期对比std = StandardScaler()#测试、训练集特征值 标准化x_train_std = std.fit_transform(x_train)# y_train_std = std.fit_transform(y_train)#已经fit转换过了,可以直接transform()y_train_std = std.transform(y_train)#4.进行算法 #超参数knn = KNeighborsClassifier(n_neighbors=5)#构造一些参数的值进行搜索param = {"n_neighbors":[3,5,10]}#进行网格搜索gc = GridSearchCV(knn,param_grid=param,cv=2)gc.fit(x_train,y_train)#预测正确率print("在测试集上正确率:",gc.score(x_test,y_test))print("在交叉集上最好的结果:",gc.best_score_)print("选择最好的模型是:",gc.best_estimator_)print("每个超参数每次交叉验证的结果:",gc.cv_results_)return Noneif __name__ == "__main__":knn()

结果:

 从结果看出,最后的模型中,参数K取的值为10


http://chatgpt.dhexx.cn/article/2S2wQXVY.shtml

相关文章

计算机编程—必备基础知识点

目录&#xff1a; 1. 编程语言1.1 编程1.2 计算机语言1.3 编程语言1.4 翻译器1.5 编程语言和标记语言区别 2. 计算机基础2.1 计算机组成2.2 数据存储2.3 数据存储单位2.4 程序运行 1. 编程语言 1.1 编程 编程&#xff1a;就是让计算机为解决某个问题而使用某种程序设计语言编…

计算机概论--计算机基础知识快速入门

0.前言1.计算机&#xff1a;辅助人脑的好工具 1.1计算机硬件的五大单元1.2CPU的种类1.3接口设备1.4运作流程 2.个人计算机架构与接口设备 2.1CPU2.2内存2.3显卡2.4硬盘与存储设备2.5主板 3.软件程序执行 3.1机器程序与编译程序3.2操作系统 3.2.1操作系统内核3.2.2系统调用 3.3小…

0基础如何开始学习计算机知识?

一、计算机的基本操作 计算机中只有文件和文件夹 计算机中&#xff0c;只有两样东西&#xff0c;文件和文件夹。 文件夹&#xff1a;本身不存储数据内容。文件夹是用来组织和管理文件的。 文件&#xff1a; 所有的txt文本文档&#xff0c;音乐&#xff0c;视频&#xff0c;图…

【电脑讲解】电脑知识入门大全,超详细电脑基础知识讲解

这是一个新坑&#xff0c;希望大家喜欢 电脑的基础知识大全&#xff0c;你确定都知道? 一、软件系统 软件系统包括&#xff1a;操作系统、应用软件等。应用软件中电脑行业的管理软件&#xff0c;IT电脑行业的发展必备利器&#xff0c;电脑行业的erp软件。 二、硬件系统 硬件系…

计算机知识01:计算机基础知识入门

1. 计算机运行流程 如果不是很了解电脑运行流程的话&#xff0c;我们可以类比一下&#xff0c;假设电脑是一个人体&#xff0c;那么每个元件对应到哪个地方呢&#xff1f;可以这样思考&#xff1a; CPU脑袋&#xff1a;每个人会做的事情都不一样&#xff08;微指令集的差异&a…

IP地址(IP Address)

IP Address在网络中&#xff0c;通信节点都需要一个IP地址 以点分十进制表示&#xff0c;有32位二进制构成&#xff08;大约43亿&#xff09; 分为两个部分&#xff1a;网络位和主机位 网络位&#xff1a;代表IP地址所属的网段 主机位&#xff1a;代表网点上的某个节点 由子…

IP地址构成 ,以及如何求“网络地址“以及“广播地址“

IP地址&#xff08;英语&#xff1a;IP Address, 全称&#xff1a;Internet Protocol Address&#xff09;又称互联网协议地址。当设备连接网络&#xff0c;设备将被分配一个IP地址&#xff0c;用作标识。通过IP地址&#xff0c;设备间可以互相通讯&#xff0c;如果没有IP地址&…

电话号码对应的英语单词

问题&#xff1a; 电话的号码盘一般可以用于输入字母&#xff0c;如用2可以输入a,b,c,用3可以输入d,e,f等。 对于号码5869872&#xff0c;可以依次输出其代表的所有字母组合。如&#xff1a;jtmwtpa,jtmwtpb......... 1、您能否可以根据这样的对应关系设计一个程序&#xff…

地址的概念

前言&#xff1a;地址的概念 1. 地址概念及各个单位换算1.1 地址的概念1.2 单位换算1.3 举例说明&#xff0c;加深理解1.4 关于地址的宽度 1. 地址概念及各个单位换算 1.1 地址的概念 计算机内的数据是存储在地址里面的&#xff0c;地址又是以字节&#xff08;Byte&#xff09…

地址的地址?

在visual studio 2019中 #include <stdio.h> #include <stdlib.h> typedef struct student { int value; struct student* next_stu; }Student; Student * creatlist(); void insertlist(Student * list,int value); int main() { Student *my_list…

GoldenDict 上的那些精美版权词典(附下载地址)(英语、俄语、梵语、印地语)

转载▼ 标签&#xff1a; 杂谈 国内的有道词典和金山词典由于使用方便、宣传到位得到了许多同学的喜爱。在开源软件的领域&#xff0c;也有一款非常好用的词典GoldenDict&#xff0c;它的强项在于可以直接使用众多词典厂商的词库。那些正规的词典厂商通常购买了词典的版权…

【GO】map转json

咔咔博客之map转json 跟结构体转json一样都使用的是json.Marshal()方法 最后需要就是把字节转为字符串使用string即可 案例 func main() {// 定义了interface 后边就可以跟任意类型了mMap : make(map[string]interface{})mMap["博客地址"] "blog.fangkang.to…

Json4s的一些用法 JSon转对象实体 Json转Map Map转Json

Json4s 全称就是Json For Scala&#xff0c;为Scala而生 首先上Maven依赖配置&#xff0c;其实Spark中自带了Json4s如果是编写Spark代码,并不需要单独引用Json4s的依赖了 <dependency><groupId>org.json4s</groupId><artifactId>json4s-jackson_2.11&…

map转json字符串字段排序

需求&#xff1a;map转成json字符串&#xff0c;要求字段按字母升序排列 package com.data.test;import java.util.HashMap; import java.util.Map; import java.util.TreeMap; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFe…

Map与JSON数据之间的互相转化

Map与JSON mapmap转JSON字符串JSON字符串转JSON对象Map转JSON对象JSON字符串转MapJSON对象转MapJSON对象转JSON字符串IDEA功能快捷键 map 此内容是方便博主自己记忆内容&#xff0c;不用于公开学习资料&#xff0c;若发现语法错误&#xff0c;自行更正&#xff0c;勿喷 map转…

Map和JSON之间的转化

Map和JSON之间的转化 1 添加依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency>2 测试 2.1 Map转JSON //1.map转jsonTestpublic void testJson01()…

js中三个等号

&#xff1a;三个等号我们称为等同符&#xff0c;当等号两边的值为相同类型的时候&#xff0c;直接比较等号两边的值&#xff0c;值相同则返回true&#xff0c;若等号两边的值类型不同时直接返回false。

两个等号(==)和三个等号(===)的区别

2019独角兽企业重金招聘Python工程师标准>>> 两个等号()和三个等号()的区别&#xff1a; 1. ""表示&#xff1a;equality -> 等同 的意思&#xff0c;""使用两个等号时&#xff0c;如果两边值的类型不同的时候&#xff0c;是要先先进行类型转…

【javaScript】JavaScript中一个等号、二个等号、 三个等号 的区别(详细例子)

一、单等于号 1.单等于号具有赋值作用 我们在定义变量时&#xff0c;会对变量进行赋值&#xff0c;例如a1&#xff0c;就是把1赋值给a。 这就是在初始化对象的时候进行赋值。 2.单等于号具有引用对象作用 比如我们写了 var a 1;var b a ,表示变量a指向的内存地址与b相同&…

JavaScript 中 的等号(==)/不等号(!=) 和全等号(===)/非全等号(!==)

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/u/1579702/blog/220269