使用GridSearchCV进行网格搜索微调模型

import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model.logistic import LogisticRegression
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.pipeline import Pipeline
from sklearn.metrics import precision_score, recall_score, accuracy_score

pipeline = Pipeline([
    (‘vect‘, TfidfVectorizer(stop_words=‘english‘)),
    (‘clf‘, LogisticRegression())
])
parameters = {
    ‘vect__max_df‘: (0.25, 0.5, 0.75),
    ‘vect__stop_words‘: (‘english‘, None),
    ‘vect__max_features‘: (2500, 5000, None),
    ‘vect__ngram_range‘: ((1, 1), (1, 2)),
    ‘vect__use_idf‘: (True, False),
    ‘clf__penalty‘: (‘l1‘, ‘l2‘),
    ‘clf__C‘: (0.01, 0.1, 1, 10),
}

df = pd.read_csv(‘./sms.csv‘)
X = df[‘message‘]
y = df[‘label‘]
label_encoder = LabelEncoder()
y = label_encoder.fit_transform(y)
X_train, X_test, y_train, y_test = train_test_split(X, y)

grid_search = GridSearchCV(pipeline, parameters, n_jobs=-1, verbose=1, scoring=‘accuracy‘, cv=3)
grid_search.fit(X_train, y_train)

print(‘Best score: %0.3f‘ % grid_search.best_score_)
print(‘Best parameters set:‘)
best_parameters = grid_search.best_estimator_.get_params()
for param_name in sorted(parameters.keys()):
    print(‘\t%s: %r‘ % (param_name, best_parameters[param_name]))

predictions = grid_search.predict(X_test)
print(‘Accuracy: %s‘ % accuracy_score(y_test, predictions))
print(‘Precision: %s‘ % precision_score(y_test, predictions))
print(‘Recall: %s‘ % recall_score(y_test, predictions))

df = pd.read_csv(‘./sms.csv‘)
X_train_raw, X_test_raw, y_train, y_test = train_test_split(df[‘message‘], df[‘label‘], random_state=11)
vectorizer = TfidfVectorizer()
X_train = vectorizer.fit_transform(X_train_raw)
X_test = vectorizer.transform(X_test_raw)
classifier = LogisticRegression()
classifier.fit(X_train, y_train)
scores = cross_val_score(classifier, X_train, y_train, cv=5)
print(‘Accuracies: %s‘ % scores)
print(‘Mean accuracy: %s‘ % np.mean(scores))
precisions = cross_val_score(classifier, X_train, y_train, cv=5, scoring=‘precision‘)
print(‘Precision: %s‘ % np.mean(precisions))
recalls = cross_val_score(classifier, X_train, y_train, cv=5, scoring=‘recall‘)
print(‘Recall: %s‘ % np.mean(recalls))
f1s = cross_val_score(classifier, X_train, y_train, cv=5, scoring=‘f1‘)
print(‘F1 score: %s‘ % np.mean(f1s))

微调后:

Best score: 0.983
Best parameters set:
clf__C: 10
clf__penalty: ‘l2‘
vect__max_df: 0.5
vect__max_features: None
vect__ngram_range: (1, 2)
vect__stop_words: None
vect__use_idf: True
Accuracy: 0.9863701578192252
Precision: 0.994535519125683
Recall: 0.91

微调前:

Accuracies: [0.95221027 0.95454545 0.96172249 0.96052632 0.95209581]
Mean accuracy: 0.9562200683094717
Precision: 0.992542742398164
Recall: 0.6836050302748021
F1 score: 0.8090678466269784

我们可以看到极大的改善了Recall,极大的优化了模型,GridSearchCV其实就是暴力搜索。该方法在小数据集上很有用,数据集大了就不太适用。

原文地址:https://www.cnblogs.com/starcrm/p/11718957.html

时间: 2024-08-29 22:13:56

使用GridSearchCV进行网格搜索微调模型的相关文章

调参必备---GridSearch网格搜索

什么是Grid Search 网格搜索? Grid Search:一种调参手段:穷举搜索:在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果.其原理就像是在数组里找最大值.(为什么叫网格搜索?以有两个参数的模型为例,参数a有3种可能,参数b有4种可能,把所有可能性列出来,可以表示成一个3*4的表格,其中每个cell就是一个网格,循环过程就像是在每个网格里遍历.搜索,所以叫grid search) Simple Grid Search:简单的网格搜索 以2个参数的

机器学习 libsvm交叉验证与网格搜索(参数选择)

首先说交叉验证. 交叉验证(Cross validation)是一种评估统计分析.机器学习算法对独立于训练数据的数据集的泛化能力(generalize), 能够避免过拟合问题. 交叉验证一般要尽量满足: 1)训练集的比例要足够多,一般大于一半 2)训练集和测试集要均匀抽样 交叉验证主要分成以下几类: 1)Double cross-validation Double cross-validation也称2-fold cross-validation(2-CV),作法是将数据集分成两个相等大小的子集

【scikit-learn】网格搜索来进行高效的参数调优

 内容概要? 如何使用K折交叉验证来搜索最优调节参数 如何让搜索参数的流程更加高效 如何一次性的搜索多个调节参数 在进行真正的预测之前,如何对调节参数进行处理 如何削减该过程的计算代价 1. K折交叉验证回顾? 交叉验证的过程 选择K的值(一般是10),将数据集分成K等份 使用其中的K-1份数据作为训练数据,另外一份数据作为测试数据,进行模型的训练 使用一种度量测度来衡量模型的预测性能 交叉验证的优点 交叉验证通过降低模型在一次数据分割中性能表现上的方差来保证模型性能的稳定性 交叉验证可以用

libsvm交叉验证与网格搜索(参数选择)

首先说交叉验证.交叉验证(Cross validation)是一种评估统计分析.机器学习算法对独立于训练数据的数据集的泛化能力(generalize), 能够避免过拟合问题.交叉验证一般要尽量满足:1)训练集的比例要足够多,一般大于一半2)训练集和测试集要均匀抽样 交叉验证主要分成以下几类: 1)Double cross-validationDouble cross-validation也称2-fold cross-validation(2-CV),作法是将数据集分成两个相等大小的子集,进行两回

LittleTools之网格输出为模型

我经常要在Unity中生成一些网格,但是这些网格需要交给美工修改,所以又要将网格输出为模型.于是就有了下面的代码: using UnityEngine; using UnityEditor; using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; /// <summary> /// 将“一个”选中的对象输出为obj格式 /// </summary>

KNN算法网格搜索最优参数

主要用到 sklearn.model_selection包下的GridSearchCV类. 总共分为几步:  a.创建训练集和测试集 b.创建最优参数字典 c.构建GridSearchCV对象 d.进行数据训练 e.得出最优超参数 a.创建训练集和测试集 import numpy as np from sklearn.neighbors import KNeighborsClassifier from sklearn import datasets from sklearn.model_sele

Tensorflow 之finetune微调模型方法

https://github.com/joelthchao/tensorflow-finetune-flickr-style https://github.com/kratzert/finetune_alexnet_with_tensorflow https://github.com/Shirhe-Lyh/finetune_classification 原文地址:https://www.cnblogs.com/ranjiewen/p/10231170.html

从程序员的角度设计一个Java的神经网络

欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 来自维基百科: 人工神经网络(ANN)或连接系统是受生物神经网络启发构成生物大脑的计算系统.这样的系统通过考虑例子来学习(逐步提高性能)来完成任务,通常没有任务特定的编程. 用Java或任何其他编程语言设计神经网络我们需要理解人工神经网络的结构和功能. 人工神经网络执行的任务比如有模式识别.从数据中学习以及像专家一样预测趋势,而不像传统的算法方法那样需要执行一组步骤来实现所定义的目标.人工神经网络由于其高度交互的网络结构,可以学习如何自己解

深度学习模型超参数搜索实用指南

要知道,与机器学习模型不同,深度学习模型里面充满了各种超参数.而且,并非所有参数变量都能对模型的学习过程产生同样的贡献. 考虑到这种额外的复杂性,在一个多维空间中找到这些参数变量的最佳配置并不是件容易的事情. 每一位科学家和研究人员,都希望在现有的资源条件下(计算.金钱和时间),找到最佳的模型. 通常情况下,研究人员和业余爱好者会在开发的最后阶段尝试一种搜索策略.这可能会有助改进他们辛辛苦训练出来的模型. 此外,在半自动/全自动深度学习过程中,超参数搜索也是的一个非常重要的阶段. 超参数到底是什