机器学习(7)模型选择与调优(超参数搜索/网格搜索)

目录

一、基础理论

1、交叉验证

 2、模型选择与调优(超参数搜索/网格搜索) -- k的取值

 3、模型选择与调优API

二、模型选择与调优(超参数搜索/网格搜索)

得到预估器后:

1、首先进行参数准备

 2、开始搜索

3、训练

查看结果

总代码


一、基础理论

超参数搜索/网格搜索目的:得到最佳参数

1、交叉验证

交叉验证目的:为了让被评估的模型更加准确可信

为了让结果更加准确,做以下处理:

训练集:训练集+验证集

测试集:测试集

 

 2、模型选择与调优(超参数搜索/网格搜索) -- k的取值

有一些算法是需要手动指定的,这些手动指定的算法叫做超参数(如KNN算法中的k值)。 

 3、模型选择与调优API

sklearn.model_selection.GridSearchCV

 

 和预估器的使用方法一样。

二、模型选择与调优(超参数搜索/网格搜索)

得到预估器后:

1、首先进行参数准备

# 1、参数准备
    param_dict = {'n_neighbors':[1,3,5,7,9,11]} 
#n_neighbors:是GridSearchCV的参数param_dict的子参数

 2、开始搜索

# 2、开始搜索
    estimator = GridSearchCV(estimator, param_dict, cv=10)
    #                       预估器       参数范围     选择次数

3、训练

# 4-3、训练(用预估器对训练值进行训练)
    estimator.fit(train_data, train_target)

查看结果

# 查看超参数搜索结果
    print('最佳参数:', estimator.best_params_)
    print('最佳结果:', estimator.best_score_)
    print('最佳估计器:', estimator.best_estimator_)
    print('交叉验证结果:', estimator.cv_results_)

总代码

# 模型选择与调优(超参数搜索/网格搜索)
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

# KNN算法
def KNN():
    # 1、获取数据
    iris = load_iris()

    # 2、划分数据集
    train_data, test_data, train_target, test_target = train_test_split(iris.data, iris.target)
    # 特征集训练值 特征集测试值 目标集训练值   目标值测试值

    # 3、特征工程(标准化)
    transfer = StandardScaler()
    train_data = transfer.fit_transform(train_data)
    test_data = transfer.transform(test_data)
    # 注:不进行fit处理:测试集要用训练集的特征值和标准差(否则测试集就是在自己对自己进行测试,没有意义)
    # 注:target是目标值,不能进行标准化(所以train_target和test_target不进行标准化)

    # 4、KNN算法预估器
    # 4-1、得到预估器
    estimator = KNeighborsClassifier()          #后面会有超参数搜索,这里先不用设置k值
    # 4-2、超参数搜索(模型选择与调优):得到最佳k值(最佳预估器)
    # 1、参数准备
    param_dict = {'n_neighbors':[1,3,5,7,9,11]} #n_neighbors:是GridSearchCV的参数param_dict的子参数
    # 2、开始搜索
    estimator = GridSearchCV(estimator, param_dict, cv=10)
    #                       预估器       参数范围     选择次数
    # 4-3、训练(用预估器对训练值进行训练)
    estimator.fit(train_data, train_target)

    # 5、模型评估
    # 方法一:对比预测值和测量目标值
    predict = estimator.predict(test_data)  # 得到预测结果
    print(predict)
    print("直接比对预测值和测量目标值:\n", predict == test_target)

    # 方法二:得到准确率(对比特征集和目标集测试值)
    score = estimator.score(test_data, test_target)
    print("准确率:\n", score)

    # 查看超参数搜索结果
    print('最佳参数:', estimator.best_params_)
    print('最佳结果:', estimator.best_score_)
    print('最佳估计器:', estimator.best_estimator_)
    print('交叉验证结果:', estimator.cv_results_)


if __name__ == '__main__':
    KNN()       #KNN算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_(*^▽^*)_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值