建设门户网站特点,广州注册公司需要什么资料,网站建设需求什么功能,公司营销型网站开发目录 模型选择与调优
1、介绍
模型选择#xff08;Model Selection#xff09;#xff1a;
调优#xff08;Hyperparameter Tuning#xff09;#xff1a;
本章重点
2、交叉验证
介绍
为什么需要交叉验证
数据处理
3、⭐超参数搜索-网格搜索(Grid Search)
介绍…目录 模型选择与调优
1、介绍
模型选择Model Selection
调优Hyperparameter Tuning
本章重点
2、交叉验证
介绍
为什么需要交叉验证
数据处理
3、⭐超参数搜索-网格搜索(Grid Search)
介绍
API
Facebook签到位置预测K值调优 作者介绍准大三网络工程专业在读努力学习Java涉猎深度学习积极输出优质文章 ⭐分类算法系列①初识概念 ⭐分类算法系列②KNN(K-近邻)算法 您的三连支持是我创作的最大动力 模型选择与调优
1、介绍
在机器学习中模型选择Model Selection和调优Hyperparameter Tuning是优化模型性能的关键步骤。模型选择涉及选择合适的算法或模型架构而调优则涉及调整模型的超参数以达到最佳性能。以下是关于这两个步骤的详细介绍
模型选择Model Selection
模型选择是选择在给定任务中使用哪种算法或模型的过程。不同的算法适用于不同的问题因此选择适当的算法对于取得良好的性能至关重要。模型选择通常涉及以下步骤
问题定义明确定义要解决的问题例如分类、回归、聚类等。数据准备对数据进行预处理、清洗和特征工程以确保数据适用于所选的算法。候选模型根据问题和数据类型选择几种合适的模型作为候选例如决策树、支持向量机、神经网络等。训练和验证使用交叉验证等技术在训练数据上训练候选模型并在验证集上评估其性能。性能比较比较不同模型在验证集上的性能指标如准确率、精确度、召回率等。选择最佳模型根据性能比较选择性能最佳的模型作为最终模型。
调优Hyperparameter Tuning
调优是指为机器学习模型选择最佳的超参数以优化模型的性能。超参数是在训练过程之外设置的参数它们决定了模型的结构和行为如学习率、正则化参数、树的深度等。调优的目标是找到使模型在验证集上表现最佳的超参数组合。调优通常包括以下步骤
选择超参数空间选择要调优的超参数和它们的可能取值范围。搜索方法选择超参数搜索方法如网格搜索、随机搜索、贝叶斯优化等。交叉验证使用交叉验证将数据分为训练集和验证集以评估不同超参数组合的性能。评价指标选择适当的评价指标来衡量不同超参数组合的性能。调优过程根据选择的搜索方法不断尝试不同的超参数组合并记录它们的性能。选择最佳组合从调优过程中选择在验证集上性能最佳的超参数组合作为最终模型的超参数。
模型选择和调优是迭代过程可能需要多次尝试不同的模型和超参数组合以找到最适合任务的模型并达到最佳性能。使用交叉验证、可视化工具和自动化调优库如scikit-learn中的GridSearchCV和RandomizedSearchCV可以帮助更有效地进行模型选择和调优。
本章重点
本章重点是交叉验证结合的示例是之前的Facebook签到位置问题对之前使用KNN算法完成的Facebook签到位置预测进行调优使其结果更加准确。
2、交叉验证
介绍
交叉验证Cross-Validation是一种用于评估机器学习模型性能的技术它有助于更准确地估计模型在未知数据上的表现。交叉验证通过在不同的数据子集上进行多次训练和验证提供了对模型泛化性能的更稳定估计。
在传统的训练-测试集划分中数据被划分为训练集和测试集然后使用训练集训练模型使用测试集评估模型性能。然而这种方法可能因为数据的划分方式而导致评估结果不稳定特别是在数据量有限的情况下。交叉验证通过将数据划分为多个折folds多次进行训练和测试从而克服了这些问题。
以下是交叉验证的常见方法
k折交叉验证k-Fold Cross-Validation 将数据分为k个大小相似的折folds。每次将其中一个折作为验证集其他k-1个折作为训练集。重复这个过程k次每次选择不同的折作为验证集其他折作为训练集。计算k次验证的平均性能作为最终性能评估。留一交叉验证Leave-One-Out Cross-ValidationLOOCV 将每个样本单独作为一个折其他样本作为训练集。执行n次训练和验证n为样本数量。计算n次验证的平均性能作为最终性能评估。适用于小样本数据集但计算开销较大。随机折交叉验证Stratified k-Fold Cross-Validation 类似于k折交叉验证但在划分折时会保持各个类别的比例相同。对于不均衡的数据集这种方法可以更好地保持类别分布。
交叉验证的优势在于它能够提供更可靠的模型性能估计因为每个样本都会被用于训练和验证减少了数据划分可能引发的偶然性影响。交叉验证还有助于选择合适的模型和调整超参数从而提高模型的泛化性能。在实际应用中k折交叉验证是最常用的方法之一但根据问题的特点和数据集的大小选择适当的交叉验证方法非常重要。
为什么需要交叉验证
交叉验证目的为了让被评估的模型更加准确可信
数据处理
一般情况下数据分为训练集和测试集但是为了让从训练得到模型结果更加准确。
做以下处理
训练集训练集验证集测试集测试集
那么对于之前的Facebook签到位置预测问题的k值如何取得一个合理的值下面使用超参数搜索-网格搜索(Grid Search)
3、⭐超参数搜索-网格搜索(Grid Search)
介绍
超参数网格搜索Grid Search是一种常用的超参数调优方法用于寻找最佳的超参数组合从而优化机器学习模型的性能。它通过在预定义的超参数空间中搜索所有可能的组合然后评估每个组合的性能最终选择性能最佳的组合作为最终的超参数设置。
以下是超参数网格搜索的步骤和原理
超参数空间定义 首先为模型选择要调优的超参数并为每个超参数指定可能的取值范围。例如对于支持向量机可以选择C正则化参数和kernel核函数类型作为需要调优的超参数为它们指定一组候选取值。生成网格 将每个超参数的可能取值组合成一个网格生成所有可能的超参数组合。这个网格中的每个点都代表一组超参数设置。交叉验证 对于每个超参数组合使用交叉验证来评估模型在验证集上的性能。通常使用k折交叉验证对于每个超参数组合训练模型k次并计算平均性能指标。选择最佳组合 根据交叉验证的结果选择性能最佳的超参数组合作为最终的选择。通常根据准确率、F1得分、均方误差等评价指标来衡量性能。应用最佳超参数 使用在步骤4中选择的最佳超参数组合来训练模型然后在独立的测试集上评估其性能。
超参数网格搜索的优点在于它是一种简单而有效的方法可以在有限的计算资源下尝试多种超参数组合。然而网格搜索的缺点是它可能会对计算资源造成较大的负担特别是在超参数空间较大时。为了提高效率可以使用随机搜索等方法来在超参数空间中采样以更快地找到性能较好的超参数组合。
API sklearn.model_selection.GridSearchCV(estimator, param_gridNone,cvNone) 对估计器的指定参数值进行详尽搜索 estimator估计器对象 param_grid估计器参数(dict){“n_neighbors”:[1,3,5]} cv指定几折交叉验证 fit输入训练数据 score准确率 结果分析 bestscore在交叉验证中验证的最好结果 bestestimator最好的参数模型 cvresults每次交叉验证后的验证集准确率结果和训练集准确率结果 Facebook签到位置预测K值调优
使用网格搜索估计器在原来的KNN算法实现Facebook签到位置预测的代码基础上新的修改如下代码 # 使用网格搜索和交叉验证找到合适的参数
knn KNeighborsClassifier()param {n_neighbors: [3, 5, 10]}gc GridSearchCV(knn, param_gridparam, cv2)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分类器knn KNeighborsClassifier() 定义超参数空间param {n_neighbors: [3, 5, 10]} 创建GridSearchCV实例传入KNN分类器实例和定义好的超参数空间cv2表示使用2折交叉验证gc GridSearchCV(knn, param_gridparam, cv2) 执行网格搜索和交叉验证gc.fit(x_train, y_train) 评估测试集性能使用训练好的网格搜索模型在测试集上进行预测并输出准确率print(选择了某个模型测试集当中预测的准确率为, gc.score(x_test, y_test)) 打印交叉验证结果 gc.best_score_输出在交叉验证中获得的最佳性能指标。gc.best_estimator_输出最佳性能对应的模型包括超参数设置。gc.cv_results_输出每次交叉验证的结果包括参数设置和性能指标。 回顾k值交叉验证
KNN调优全部代码 # -*- coding: utf-8 -*-
# Author:︶ㄣ释然
# Time: 2023/8/30 23:48
import pandas as pd
from sklearn.model_selection import train_test_split # 将数据集分割为训练集和测试集。
from sklearn.neighbors import KNeighborsClassifier # 实现KNN分类器
from sklearn.preprocessing import StandardScaler # 特征标准化
from sklearn.model_selection import GridSearchCV # 网格搜索
sklearn.model_selection.GridSearchCV(estimator, param_gridNone,cvNone)对估计器的指定参数值进行详尽搜索estimator估计器对象param_grid估计器参数(dict){“n_neighbors”:[1,3,5]}cv指定几折交叉验证fit输入训练数据score准确率
结果分析bestscore:在交叉验证中验证的最好结果_bestestimator最好的参数模型cvresults:每次交叉验证后的验证集准确率结果和训练集准确率结果def knn_GridSearch():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], axis1)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], axis1)# 4、数据分割与特征工程?# 1、数据分割x_train, x_test, y_train, y_test train_test_split(x, y, test_size0.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_gridparam, cv2)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_)if __name__ __main__:knn_GridSearch() 执行结果