首页 > 其他分享 >3.3 模型选择和调优(KNN)

3.3 模型选择和调优(KNN)

时间:2023-06-10 17:11:51浏览次数:28  
标签:KNN 验证 print train 3.3 estimator test 调优 data

1.什么是交叉验证(cross validation)

交叉验证:将拿到的训练数据,分为训练和验证集。以下图为例:将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。
我们之前知道数据分为训练集和测试集,但是为了让从训练得到模型结果更加准确。做以下处理

训练集:训练集+验证集
测试集:测试集
image

2.超参数搜索-网格搜索(Grid Search)

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

3.模型选择与调优API

这里一个API既有网格搜索又有交叉验证

sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)

  • 对估计器的指定参数值进行详尽搜索
  • estimator:估计器对象
  • param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}
  • cv:指定几折交叉验证(一般10折)
  • fit():输入训练数据
  • score:准确率
  • 结果分析:
       最佳参数:best_params_
       最佳结果:best_score_
       最佳预估器:best_estimator_
       交叉验证结果: cv_results_

4.鸢尾花k值调优

    knn算法预估器
    estimator=KNeighborsClassifier()

    #加入网格搜素和验证
    param_dict={"n_neighbors":[1,3,5,7,9,11]}

    estimator=GridSearchCV(estimator,param_grid=param_dict,cv=10)

    estimator.fit(x_train,y_train)

完整代码就是:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
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=6)##数据集,目标集
    ##训练集特征值,测试集特征值,训练集目标集,测试集目标集
    #3) 特征工程:标准化
    transfer=StandardScaler()
    x_train=transfer.fit_transform(x_train)
    x_test=transfer.transform(x_test)#这时候只需要让测试集转化就行,没有必要计算,fit时计算过程,transform是转化
    #4) knn算法预估器
    estimator=KNeighborsClassifier()

    #加入网格搜素和验证
    param_dict={"n_neighbors":[1,3,5,7,9,11]}

    estimator=GridSearchCV(estimator,param_grid=param_dict,cv=10)

    estimator.fit(x_train,y_train)
    #5) 模型评估
    #方法1:直接对比真实值和预测值
    y_predict=estimator.predict(x_test)
    print("y_perdict:\n",y_predict)
    print("直接比对真实值和预测值:\n",y_test==y_predict)
    #方法2:计算准确率
    score=estimator.score(x_test,y_test)
    print("准确率:\n",score)
    # 最佳参数:best_params_
    print("最佳参数:\n", estimator.best_params_)
    # 最佳结果:best_score_
    print("最佳结果:\n", estimator.best_score_)
    # 最佳估计器:best_estimator_
    print("最佳估计器:\n", estimator.best_estimator_)
    # 交叉验证结果:cv_results_
    print("交叉验证结果:\n", estimator.cv_results_)
    return None

5.预测facebook签到位置

image

def knncls():
    """
    K近邻算法预测入住位置类别
    :return:
    """
    # 一、处理数据以及特征工程
    # 1、读取收,缩小数据的范围
    data = pd.read_csv("./data/FBlocation/train.csv")

    # 数据逻辑筛选操作 df.query()
    data = data.query("x > 1.0 & x < 1.25 & y > 2.5 & y < 2.75")

    # 删除time这一列特征
    data = data.drop(['time'], axis=1)

    print(data)

    # 删除入住次数少于三次位置
    place_count = data.groupby('place_id').count()

    tf = place_count[place_count.row_id > 3].reset_index()

    data = data[data['place_id'].isin(tf.place_id)]

    # 3、取出特征值和目标值
    y = data['place_id']
    # y = data[['place_id']]

    x = data.drop(['place_id', 'row_id'], axis=1)

    # 4、数据分割与特征工程?

    # (1)、数据分割
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)

    # (2)、标准化
    std = StandardScaler()

    # 队训练集进行标准化操作
    x_train = std.fit_transform(x_train)
    print(x_train)

    # 进行测试集的标准化操作
    x_test = std.fit_transform(x_test)

    # 二、算法的输入训练预测
    # K值:算法传入参数不定的值    理论上:k = 根号(样本数)
    # K值:后面会使用参数调优方法,去轮流试出最好的参数[1,3,5,10,20,100,200]
    # 使用网格搜索和交叉验证找到合适的参数
	knn = KNeighborsClassifier()

	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选择了的模型K值是:", gc.best_estimator_)
	print("每次交叉验证的结果为:", gc.cv_results_)

标签:KNN,验证,print,train,3.3,estimator,test,调优,data
From: https://www.cnblogs.com/lipu123/p/17471485.html

相关文章

  • 3.2 KNN算法(k-近邻算法)
    1.什么是k-近邻算法例如:如果你不知道你现在在哪,你可以通过你和你的邻居的距离推算出你的位置你的“邻居”来推断出你的类别2.原理2.1定义如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。就是看看样......
  • 面试官:你会哪些JVM调优参数?
    你好,我是田哥。上周一位朋友去面试被问到JVM参数,本文咱们就来聊聊。面试造火箭.......,我们很多人干了三、五年的Java开发,其实压根儿没使用过JVM调优参数。但是,面试官可不管你有没有用过,面试官心里想的是“这问题回答不出来,证明你很lowB,还想要那么高的薪资,没门”。话不多说,我们开始......
  • 【Interview】Hive原理及调优
    关于Hive的参数配置:Hive的参数配置有3种配置方式:方式1:在hive的配置文件中直接进行修改.方式2:在开启Hive服务的时候,设置参数nohuphive--servicehiveserver2--hiveconf参数名=参数值&方式3:通过set方式进行修改.setmapreduce.job.reduces=3;--分桶......
  • 机器学习算法(一)之KNN算法理论
    KNN算法又称为K近邻算法,是机器学习中比较简单的数据挖掘算法,其基本思想也简单,将“距离相近的,判定为同一类”,在整个样本空间中,k个最为接近的样本,大多数属于同一类别。对其进行一个细致的理解如下:如果在操场中心有一只羊,在以它为中心的周围,分布着奶牛和山羊,现在要对这只羊进行分类,......
  • FTL潜规则:调优,才是算法精华
    前言在存储领域中有一个FTL的概念,这是一种Flash的内存管理算法,属于各个厂商的核心机密,每个厂商的处理方式不同,有的处理简单,有的处理复杂。FTL,即FlashTranslationslayer,也就是闪存转换层,可以完成从逻辑地址到物理地址的转换,简称为映射。 为什么需要FTL因为Flash的质量参差......
  • Python信贷风控模型:Adaboost,XGBoost,SGD, SVC,随机森林, KNN预测信贷违约支付|附代码
    图形和统计输出。在此数据集中,我们必须预测信贷的违约支付,并找出哪些变量是违约支付的最强预测因子?以及不同人口统计学变量的类别,拖欠还款的概率如何变化有25个变量:ID: 每个客户的IDLIMIT_BAL: 金额SEX: 性别(1=男,2=女)4.教育程度:(1=研究生,2=本科,3=高中,4=其他,5=未知)5.婚......
  • 使用Optuna进行PyTorch模型的超参数调优
    前言 Optuna是一个开源的超参数优化框架,Optuna与框架无关,可以在任何机器学习或深度学习框架中使用它。本文将以表格数据为例,使用Optuna对PyTorch模型进行超参数调优。本文转载自DeepHubIMBA仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总......
  • RocketMQ 脚本调优
    #!/bin/sh##ExecuteOnlyOnce#echo'vm.overcommit_memory=1'>>/etc/sysctl.confecho'vm.min_free_kbytes=5000000'>>/etc/sysctl.confecho'vm.drop_caches=1'>>/etc/sysctl.confecho'vm.zone_re......
  • java反编译工具jd-gui和插件jd-eclipse,还有插件Enhanced Class Decompiler 3.3.0
    JD-GUI和JD-ECLIPSE可以直接在下面的网址进行下载http://java-decompiler.github.io/ (1)注意:JD-GUI.exe单机版有很多版本,有些旧版本反编译出来的源码和高版本反编译出来的源码是区别的1.低版本的反编译可能和实际源码有出入2.1.6.6版本反编译的源码中有中文无法正常复制? ......
  • Hibernate性能调优,优化
    Hibernate优化_Hibernate性能优化_Hibernate优化方案(上):[url]http://xiexiejiao.cn/hibernate/hibernate-performance-optimization-a.html[/url]Hibernate优化_Hibernate性能优化_Hibernate优化方案(下):[url]http://xiexiejiao.cn/hibernate/hibernate-performance-optimizati......