模型的选择与调优

模型的选择与调优

如何选择合适的算法模型

在解决问题的时候,必须考虑下面两个问题:一、使用机器学习算法的目的,想要算法完成何种任务,比如是预测明天下雨的概率还是对投票者按照兴趣分组;二、需要分析或者收集的数据是什么。

首先考虑使用机器学习算法的目的。如果想要预测目标变量的值,则可以选择监督学习算法,否则可以选择无监督学习算法,确定选择监督学习算法之后,需要进一步确定目标变量类型,如果目标变量是离散型,如是/否、1/2/3,A/B/C/或者红/黑/黄等,则可以选择分类算法;如果目标变量是连续的数值,如0.0~100.0、-999~999等,则需要选择回归算法。

如果不想预测目标变量的值,则可以选择无监督算法。进一步分析是否需要将数据划分为离散的组。如果这是唯一的需求,则使用聚类算法。

当然在大多数情况下,上面给出的选择办法都能帮助读者选择恰当的机器学习算法,但这也并非已成不变。也有分类算法可以用于回归。

其次考虑的是数据问题,我们应该充分了解数据,对实际数据了解的越充分,越容易创建符合实际需求的应用程序,主要应该了解数据的一下特性:特征值是 离散型变量 还是 连续型变量 ,特征值中是否存在缺失的值,何种原因造成缺失值,数据中是够存在异常值,某个特征发生的频率如何,等等。充分了解上面提到的这些数据特性可以缩短选择机器学习算法的时间。

交叉验证

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

交叉验证过程

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

超参数搜索-网格搜索

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

在这里插入图片描述
超参数搜索-网格搜索API:sklearn.model_selection.GridSearchCV

语法:

sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)----对估计器的指定参数值进行详尽搜索

estimator:估计器对象

param_grid:估计器参数(dict)----{“n_neighbors”:[1,3,5]}

cv:指定几折交叉验证

fit:输入训练数据

score:准确率

结果分析:

best_score:在交叉验证中测试的最好结果

best_estimator:最好的参数模型

cv_results_:每次交叉验证后的验证集准确率结果和训练集准确率结果

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

def knn():
  iris = load_iris()
  x = iris.data  #鸢尾花特征值
  y = iris.target  # 鸢尾花目标值
  x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.25)
  # 进行算法流程
  knn = KNeighborsClassifier()
  # 构造一些参数的值进行搜素
  param = {"n_neighbors":[3,5,10]}
  # 进行网格搜索
  gc = GridSearchCV(knn,param,cv=5)
  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_)

if __name__ == '__main__':
    knn()

结果为:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值