天天看点

机器学习调参常用调参方法举例

机器学习调参

  • 常用调参方法举例
    • K邻近算法(最常规版本)
    • 加入交叉验证
    • 加上网格搜索
    • GridSearchCV
    • 函数介绍
      • GridSearchCV
      • cross_val_score

常用调参方法举例

sklearn使得我们在很多编写代码的时候更多的工作倾向于调参数而不是去写算法本身,本篇文章整理了一下常用的调参方式。

K邻近算法(最常规版本)

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
# 导入鸢尾花数据
iris=datasets.load_iris()
iris_X=iris.data
iris_y=iris.target
#查看前两行数据
print(iris_X[:2,:])
#[[5.1 3.5 1.4 0.2]
#[4.9 3.  1.4 0.2]]
#查看结果集
print(iris_y)
#划分数据
X_train,X_test,y_train,y_test=train_test_split(iris_X,iris_y,test_size=0.3,random_state=3)

#训练模型
knn=KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train,y_train)

#预测值
print(knn.predict(X_test))

#查看模型得分  
print(knn.score(X_test,y_test))
# 0.9555555555555556

           

加入交叉验证

注意因为代码是在jupyter中运行,所以变量我就不重新定义了。

cross_val_score详细介绍放在文章末尾。

from sklearn.model_selection import cross_val_score
#cross_val_score函数一般用到的参数(对照下面):模型 训练数据测试数据 分为几份 计分方式下面的accu为准确的值划分 
sorces=cross_val_score(knn,iris_X,iris_y,cv=5,scoring='accuracy')
print(sorces)
#[0.96666667 1.         0.93333333 0.96666667 1.        ]
print(sorces.mean())  #求得分均值
#0.9733333333333334
           

加上网格搜索

不知道这里写的对不对

import matplotlib.pyplot as plt
k_range=range(1,31)
k_sorces=[]

for k in k_range:
    knn=L=KNeighborsClassifier(n_neighbors=k)
    sorces=cross_val_score(knn,iris_X,iris_y,cv=10,scoring='accuracy')
    k_sorces.append(sorces.mean())
#下面两行是因为横纵坐标会因为汉字报错
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False 

plt.plot(k_range,k_sorces)
plt.xlabel('对应k值')
plt.ylabel('k值对应分数')
plt.show()
           

结果为

机器学习调参常用调参方法举例

GridSearchCV

这个其实就是交叉验证和网格搜索的结合,直接得出最优的参数。GridSearchCV的函数信息放在文章末尾(只写了几个常用的参数)

from sklearn.model_selection import GridSearchCV
k_range=range(1,31)
params = {'n_neighbors':k_range}
grid_search = GridSearchCV(knn,params,cv=10,scoring='accuracy')
grid_search.fit(X_train, y_train)
print('模型最高分:{:.3f}'.format(grid_search.score(X_test, y_test)))
print('最优参数:{}'.format(grid_search.best_params_))
#模型最高分:0.956
#最优参数:{'n_neighbors': 5}
           

函数介绍

GridSearchCV

class sklearn.model_selection.GridSearchCV(estimator, param_grid, , scoring=None, n_jobs=None, refit=True, cv=None, verbose=0, pre_dispatch='2n_jobs’, error_score=nan, return_train_score=False)

参数 解释
estimator 定义好的模型或者分类器
param_grid 需要最优化的参数的取值,值为字典或者列表
scoring 模型评价标准
n_jobs 并行数,默认为1,最多就是你的cpu核数
cv 交叉验证参数,默认None,上文我用的就是常说的10倍交叉验证

cross_val_score

sklearn.model_selection.cross_val_score(estimator, X, y=None, , groups=None, scoring=None, cv=None, n_jobs=None, verbose=0, fit_params=None, pre_dispatch='2n_jobs’, error_score=nan)

参数 解释
estimator 估计器,也就是模型
X, y 数据源 数据,标签值
scoring 调用的方法
n_jobs 同时工作的cpu个数(-1代表全部)
cv 交叉验证生成器或可迭代的次数