Python3入门机器学习 - GridSearch探索最佳超参数与交叉验证

简介: 这次我们依旧使用digits数据集准备数据%%timeimport sklearn.datasetsimport numpy as npfrom sklearn.

这次我们依旧使用digits数据集
准备数据

%%time
import sklearn.datasets
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

digits = sklearn.datasets.load_digits()

X = digits.data
y = digits.target

X_train,X_test,y_train,y_test = train_test_split(X,y)

引入GridSearchCV,准备params参数集合进行测试

from sklearn.model_selection import GridSearchCV

params = [
    {
        'weights':['distance'],
        'n_neighbors':[i for i in range(1,11)],
        'p':[i for i in range(1,6)]    
    },
    {
        'weights':['uniform'],
        'n_neighbors':[i for i in range(1,11)]
    }
]

knn_clf = KNeighborsClassifier()

grid_search = GridSearchCV(knn_clf,params)//传入knn算法对象和参数集合
/** grid_search对象 **/
grid_search.fit(X_train,y_train)  //传入数据集,这行代码我感觉运行了一年
grid_search.best_estimator_   //显示最佳参数模型
grid_search.best_params_  //显示最佳的超参数
grid_search.best_score_  //显示最佳的正确率

评价模型好坏的标准在grid_search中更为复杂,CV交叉验证。并不仅仅根据正确率的大小评价好坏。


创建GridSearchCV()对象时的部分参数

  • estimator 该参数是你要使用的模型算法
  • param_grid 要实验的超参数集合,如上文中的params
  • n_jobs 该值根据你的CPU核心数而定,传入-1自动适配当前CPU核心数
  • verbose 每次循环执行时输出当前循环的信息,常用2




验证数据集与交叉验证

验证数据集


img_4ff9cf544cbc4e6ba6e682fd5cbba0a8.png

将数据分为3份,其中一份作为验证数据集调整超参数,这样可以避免拟合数据的随机性导致的模型误差。


交叉验证


img_37beaac271535d7507ffde1d8530b517.png

将训练数据分为m份,每次选一份做验证数据集,其余训练模型,最大限度保证模型的准确性


使用scikitlearn中的交叉验证
from sklearn.model_selection import cross_val_score

knn_clf = KNeighborsClassifier()
cross_val_score(knn_clf,X_train,y_train)
使用交叉验证获得最佳超参数
best_k = -1
best_score = -1
best_p=-1
for p in range(1,6):
    for k in range(1,11):
        knn_clf = KNeighborsClassifier(n_neighbors=k,weights="distance",p=p)
        scores = cross_val_score(knn_clf, X_train,y_train)
        score = np.mean(scores)
        if(score>best_score):
            best_k = k
            best_score = score
            best_p = p
            
print("best_k = ",best_k)
print("best_score = ",best_score)
print("best_p = ",best_p)
目录
相关文章
|
3天前
|
Python 索引 C语言
Python3从零基础到入门(2)—— 运算符-3
Python3从零基础到入门(2)—— 运算符
|
3天前
|
NoSQL 测试技术 API
Python 入门指南(七)(4)
Python 入门指南(七)
9 0
|
3天前
|
测试技术 程序员 数据库
Python 入门指南(七)(3)
Python 入门指南(七)
7 0
|
3天前
|
存储 设计模式 程序员
Python 入门指南(七)(2)
Python 入门指南(七)
9 1
|
3天前
|
XML 算法 uml
Python 入门指南(七)(1)
Python 入门指南(七)
12 0
|
3天前
|
机器学习/深度学习 存储 算法
Python 入门指南(六)(4)
Python 入门指南(六)
8 1
|
3天前
|
设计模式 存储 安全
Python 入门指南(六)(3)
Python 入门指南(六)
10 0
|
3天前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
|
3天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
3天前
|
机器学习/深度学习 算法 数据可视化
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
33 1

热门文章

最新文章