网格搜索法2--交叉验证

csv文件下载

CSV(indian_pines.csv)文件在本人博客另外连接可自由下载,怎么生成的这个文件在SVM那篇文章写了

网格搜索法

网格搜索法是指定参数值的一种穷举搜索方法,通过将估计函数的参数通过交叉验证的方法进行优化来得到最优的学习算法。
即,将各个参数可能的取值进行排列组合,列出所有可能的组合结果生成“网格”。然后将各组合用于SVM训练,并使用交叉验证对表现进行评估。在拟合函数尝试了所有的参数组合后,返回一个合适的分类器,自动调整至最佳参数组合。

网格通俗理解

遍历各种组合参数,得到最佳得分的分类参数,最后使用该组参数

交叉验证理解

遍历每一种参数组合,使用一下两种方法进行验证最佳参数组合

  1. 最基础的验证方法:将样本按比例分成不重叠的两部分,即训练集跟验证集,验证集数据不能拿去训练,就像不能看过答案后拿这道题去考试,因为只用了一次,所以数据利用率比较低;
  2. K折交叉验证:将样本量分成K等分,每次将其中的一等分作为验证集,其余(k-1)份作为训练集,进行K次训练和验证,将验证准确率取平均数,作为该组参数的准确率
    交叉验证图解

交叉验证函数—cross_val_score

scikit-learn中的cross_val_score
导入

from sklearn.model_selection import cross_val_score

函数定义

sklearn.model_selection.cross_val_score(estimator, X, y=None, groups=None, scoring=None, cv=’warn’, n_jobs=None, verbose=0, fit_params=None, pre_dispatch=‘2*n_jobs’, error_score=’raise-deprecating’)

下面用到的几个参数:
estimator: 需要使用交叉验证的算法(本文使用SVM)
X: 输入样本数据
y: 样本标签
cv: 交叉验证折数(K值)
scoring: 交叉验证最重要的就是他的验证方式,选择不同的评价方法,会产生不同的评价结果。(https://scikitlearn.org/stable/modules/model_evaluation.html#scoring-parameter)
scoring取值及代表的函数

搜索法2代码

循环遍历几种参数,拿去训练,然后比较最佳得分

# # 网格搜索法2
from sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split,cross_val_score
import pandas as pd
best_parameters = {}
data = pd.read_csv(r'E:/xulu备份/高光谱/Indian_pine.csv', header=None)
data = data.values
data_D = data[:, :-1]
data_L = data[:, -1]
#test_size表示验证集占原始数据的比例
X_trainval, X_test, y_trainval, y_test = train_test_split(data_D, data_L, test_size=0.2)

# grid search start
best_score = 0
for gamma in [0.001]:  # ,0.01,1,10,100,列表可以很多参数,基于时间太长只选一个[0.01,1,10,100]
    for c in [1]:  # 0.001,0.01,,10,100,列表可以很多参数,基于时间太长直选一个[0.001,0.01,,10,100]
        # 对于每种参数可能的组合,进行一次训练
        svm = SVC(gamma=gamma, C=c)
        # 3 折(cv = 3)交叉验证
        scores = cross_val_score(svm, X_trainval, y_trainval, cv=3)
        score = scores.mean()
        # 找到表现最好的参数
        if score > best_score:
            best_score = score
            best_parameters = {'gamma': gamma, "C": c}
# 使用最佳参数,构建新的模型
svm = SVC(gamma=best_parameters['gamma'],C=best_parameters['C'])
# 使用训练集和标签进行训练 
svm.fit(X_trainval, y_trainval)
# evalyation 实际模型评估
test_score = svm.score(X_test, y_test)
print('Best socre:{:.2f}'.format(best_score))
print('Best parameters:{}'.format(best_parameters))
print('Best score on test set:{:.2f}'.format(test_score))
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 网格搜索是一种常用的参数优化方,它通过遍历给定的参数范围,确定最佳的参数组合,以提高算性能。在matlab中,可以利用内置函数gridsearch来实现网格搜索。该函数接受输入参数,包括被调用函数句柄、参数范围、步长以及数据输出方式等。在执行过程中,网格搜索会遍历所给参数范围,并依次按照步长进行取值,再将所得参数组合作为输入对被调用函数进行计算,得到相应的结果。最后,根据所设定的输出方式(例如,最优参数组合、最大值、最小值等),确定最佳的参数组合及其对应的结果,并将其输出。 网格搜索matlab中可以广泛应用于各种算的调参过程,例如,支持向量机、决策树、神经网络等。其优点在于能够充分利用计算资源,遍历所有可能的参数组合,找到最佳组合,从而提高算性能。缺点是计算耗时较长,需要根据实际情况选择参数范围和步长,以充分发挥其优点。 在使用网格搜索时,需要注意以下几点:首先,必须确定参数范围和步长,以充分覆盖所有参数组合;其次,需要指定被调用函数和输出格式;最后,要检验得到的结果是否可靠,通常可以通过交叉验证等方进行评估。 ### 回答2: 网格搜索是一种常见的参数优化算,通常用于确定机器学习模型的最佳参数。在 MATLAB 中,可以使用 GridSearch 函数来实现网格搜索网格搜索的基本思想是在预定义的参数范围内生成所有可能的参数组合,并通过交叉验证使用这些参数组合来评估模型的性能。在 GridSearch 函数中,使用参数数组来定义要搜索的参数及其取值范围。此外,还需要定义要优化的评估指标,例如准确性、平均方差等。然后,函数会在所有可能的参数组合中进行搜索,并返回最佳的参数组合和相应的评估结果。在使用 GridSearch 函数时,需要注意搜索范围不应太大,否则可能会导致运行时间过长,甚至出现过拟合的问题。此外,由于网格搜索是一种暴力搜索算,因此在搜索范围较大时可能无获得全局最优解。为了避免此类情况,可以使用其他优化算或启发式算,例如模拟退火、遗传算等。网格搜索是一种简单而强大的参数优化策略,可以帮助我们针对特定问题找到最佳的模型参数组合。 ### 回答3: 网格搜索(matlab)是一种用于优化参数选择的算,又称为暴力求解。其基本思想是,将一定范围的参数值分为若干个网格,然后枚举每个网格中的参数值进行计算,最终找出最佳的参数组合。在matlab中,可以使用gridsearch函数来实现网格搜索。其使用方为:首先定义待优化的参数及其取值范围,然后调用gridsearch函数,将计算函数和参数值输入即可。输出结果为最优参数组合及相应的函数值。 网格搜索(matlab)的优点在于易于实现和理解,能够有效地搜索参数空间,适用于参数空间小而维度高的问题。但其缺点也显而易见,即计算量巨大且随着参数维度增加呈指数级增长,导致计算时间长且不适宜处理高维空间的问题。 在实际应用中,网格搜索(matlab)常用于机器学习和数据挖掘中的模型选择和调参过程中。通过对不同参数组合进行大量测试,可以找到最优的参数设置,从而提高模型性能和预测准确率。总之,网格搜索(matlab)是一种简单而有效的算,对于小规模参数空间的问题具有优良的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值