4.sklearn-K近邻算法、模型选择与调优

2024-08-29 22:52

本文主要是介绍4.sklearn-K近邻算法、模型选择与调优,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 环境配置(必看)
  • 头文件引用
    • 1.sklearn转换器和估计器
        • 1.1 转换器 - 特征工程的父类
        • 1.2 估计器(sklearn机器学习算法的实现)
    • 2.K-近邻算法
      • 2.1 简介:
      • 2.2 K-近邻算法API
      • 2.3 K-近邻算法代码
      • 2.4 运行结果
      • 2.5 K-近邻算法优缺点
    • 3.模型选择与调优
      • 3.1 交叉验证(cross validation)
      • 3.2 网格搜索(Grid Search)
      • 3.3 交叉验证,网格搜索(模型选择与调优)API:
      • 3.4 代码
      • 3.5 运行结果

环境配置(必看)

Anaconda-创建虚拟环境的手把手教程相关环境配置看此篇文章,本专栏深度学习相关的版本和配置,均按照此篇文章进行安装。

头文件引用

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

1.sklearn转换器和估计器

1.1 转换器 - 特征工程的父类
1 实例化 (实例化的是一个转换器类(Transformer))
2 调用fit_transform(对于文档建立分类词频矩阵,不能同时调用)标准化:(x - mean) / std	(特征 - 均值)/ 标准差fit_transform()fit()           	计算 每一列的平均值、标准差transform()     	(x - mean) / std进行最终的转换
1.2 估计器(sklearn机器学习算法的实现)
1 实例化一个estimator
2 estimator.fit(x_train, y_train) 计算—— 调用完毕,模型生成
3 模型评估:1)直接比对真实值和预测值y_predict = estimator.predict(x_test)y_test == y_predict2)计算准确率accuracy = estimator.score(x_test, y_test)

2.K-近邻算法

2.1 简介:

KNN核心思想:你的“邻居”来推断出你的类别1 K-近邻算法(KNN)原理k = 1容易受到异常点的影响如何确定谁是邻居?计算距离:距离公式欧氏距离  --  算法默认的是使用欧式距离曼哈顿距离 绝对值距离明可夫斯基距离如果取的k值不一样?会是什么结果?k 值取得过小,容易受到异常点的影响k 值取得过大,样本不均衡的影响

2.2 K-近邻算法API

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')

API注释:

n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数
algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’}快速k近邻搜索算法,默认参数为auto,可以理解为算法自己决定合适的搜索算法。除此之外,用户也可以自己指定搜索算法ball_tree、kd_tree、brute方法进行搜索,
brute:是蛮力搜索,也就是线性扫描,当训练集很大时,计算非常耗时。
kd_tree:构造kd树存储数据以便对其进行快速检索的树形数据结构,kd树也就是数据结构中的二叉树。以中值切分构造的树,每个结点是一个超矩形,在维数小于20时效率高。
ball tree:是为了克服kd树高维失效而发明的,其构造过程是以质心C和半径r分割样本空间,每个节点是一个超球体

2.3 K-近邻算法代码

分析:

  1. x_test = transfer.transform(x_test),测试集只是使用transform进行标准化,是因为要和训练集x_train 做一样的处理,训练集调用transfer.fit_transform()计算出的均值,标准差的值均在模型中,x_test = transfer.transform(x_test)就是直接使用测试集的参数进行计算。
def knn_iris():"""用KNN算法对鸢尾花进行分类:return:"""# 1.获取数据iris = load_iris()# 2.划分数据集  参数:特征值,目标值,随机数种子x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)# 3.特征工程:标准化transfer = StandardScaler()x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)                                 # 4.KNN算法预估器  n_neighbors=3就是K值等于3estimator = KNeighborsClassifier(n_neighbors=3)estimator.fit(x_train, y_train)# 5.模型评估# 方法1: 直接比对真实值和预测值y_predict = estimator.predict(x_test)print(f"y_predict:\n{y_predict}")print(f"直接比对真实值和预测值: {y_test == y_predict}")# 方法2: 计算准确率score = estimator.score(x_test, y_test)print(f"准确率为: {score}")return None

2.4 运行结果

在这里插入图片描述

2.5 K-近邻算法优缺点

优点:简单,易于理解,易于实现,无需训练
缺点:1)必须指定K值,K值选择不当则分类精度不能保证2)懒惰算法,对测试样本分类时的计算量大,内存开销大使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试

3.模型选择与调优

3.1 交叉验证(cross validation)

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

在这里插入图片描述

3.2 网格搜索(Grid Search)

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

在这里插入图片描述

3.3 交叉验证,网格搜索(模型选择与调优)API:

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

3.4 代码

def knn_iris_gscv():"""用KNN算法对鸢尾花进行分类,添加网格搜索和交叉验证:return:"""# 1.获取数据iris = load_iris()# 2.划分数据集x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=20)# 3.特征工程:标准化transfer = StandardScaler()x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)# 4.KNN算法预估器estimator = KNeighborsClassifier()# 加入网格搜索和交叉验证# 参数准备param_dict = {"n_neighbors": [1, 3, 5, 7, 9, 11]}   # 网格搜索# cv=10 代表10折运算(交叉验证)estimator = GridSearchCV(estimator, param_grid=param_dict, cv=10)estimator.fit(x_train, y_train)# 5.模型评估# 方法1: 直接比对真实值和预测值y_predict = estimator.predict(x_test)print(f"y_predict:\n{y_predict}")print(f"直接比对真实值和预测值: {y_test == y_predict}")# 方法2: 计算准确率score = estimator.score(x_test, y_test)print(f"准确率为: {score}")# 最佳参数:print("最佳参数: \n", estimator.best_params_)# 最佳结果:print("最佳结果: \n", estimator.best_score_)# 最佳参数:print("最佳估计器: \n", estimator.best_estimator_)# 交叉验证结果:print("交叉验证结果: \n", estimator.cv_results_)return None

3.5 运行结果

在这里插入图片描述

这篇关于4.sklearn-K近邻算法、模型选择与调优的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119075

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

如何选择适合孤独症兄妹的学校?

在探索适合孤独症儿童教育的道路上,每一位家长都面临着前所未有的挑战与抉择。当这份责任落在拥有孤独症兄妹的家庭肩上时,选择一所能够同时满足两个孩子特殊需求的学校,更显得尤为关键。本文将探讨如何为这样的家庭做出明智的选择,并介绍星贝育园自闭症儿童寄宿制学校作为一个值得考虑的选项。 理解孤独症儿童的独特性 孤独症,这一复杂的神经发育障碍,影响着儿童的社交互动、沟通能力以及行为模式。对于拥有孤独症兄

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount