python函数学习笔记

1.组合排列函数

参考链接:https://www.cnblogs.com/aiguiling/p/8594023.html

官网链接:https://docs.python.org/2/library/itertools.html

要调用的包:itertools

用法:import itertools

(1)product:笛卡尔积,有放回抽样排列

用法:itertools.product('ABCD',repeat=2)

(2)permutations:排列,不放回抽样排列

用法:itertools.permutations('ABCD',2)

(3)combinations:组合,没有重复,不放回抽样组合

用法:itertools.combinations('ABCD',2)

(4)combinations_with_replacement:组合,有重复,有放回抽样组合

用法:itertools.combinations_with_replacement('ABCD',2)

 

2.GridSearchCV网格搜索和交叉验证。

参考链接:https://www.cnblogs.com/dalege/p/14175192.html

官网链接:https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV

网络搜索:搜索的是参数,即在指定的参数范围内,按步长依次调整参数,利用调整的参数训练学习器,从所有的参数中找到在验证集上精度最高的参数,这其实是一个训练和比较的过程。K折交叉验证将所有数据集分为k份,不重复的每次取其中一份做测试集,用其余k-1份做训练集训练模型,之后计算该模型在测试集上的得分,将k次的得分取平均得到最后的得分。

参数:klearn.model_selection.GridSearchCV(estimator, param_grid, *, scoring=None, n_jobs=None, iid='deprecated', refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', error_score=nan, return_train_score=False)

(1)estimator:选择使用的分类器,并且传入除需要确定最佳的参数之外的其他参数。每一个分类器都需要一个scoring参数,或者score方法:如

estimator = RandomForestClassifier(min_sample_split=100,min_samples_leaf = 20,max_depth = 8,max_features = 'sqrt' , random_state =10)

(2)param_grid:是一个列表,列表里是算法对象的超参数的取值,用字典存储值为字典或者列表,例如:

param_grid = param_test1, param_test1 = {'n_estimators' : range(10,71,10)}

param_grid =knn_params,knn_params  = { 'n_neighbors' : np.arange(3,20),'leaf_size': np.arange(3,20) }

(3)scoring = None :模型评价标准,默认为None,这时需要使用score函数;或者如scoring = 'roc_auc',根据所选模型不同,评价准则不同,字符串(函数名),或是可调用对象,需要其函数签名,形如:scorer(estimator,X,y);如果是None,则使用estimator的误差估计函数。

(4)n_jobs:使用电脑的CPU个数,-1代表全部使用,默认为1。

(5)refit = True :默认为True,程序将会以交叉验证训练集得到的最佳参数,重新对所有可能的训练集与开发集进行,作为最终用于性能评估的最佳模型参数。即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集(不用管即可)。

(6)cv = None:交叉验证参数,默认None,使用五折交叉验证。指定fold数量,默认为5(之前版本为3),也可以是yield训练/测试数据的生成器。

(7)verbose:日志冗长度,0:不输出训练过程,1:偶尔输出,>1:对每个子模型都输出。

 3.from tensorflow.keras.callbacks import EarlyStopping进行模型训练

参考链接:https://last2win.com/2019/06/05/keras/

一般来说机器学习的训练次数会设置到很大,如果模型的表现没有进一步提升,那么训练可以停止了,继续训练很可能会导致过拟合tensorflow.keras.callbacks.EarlyStopping就是用来提前结束训练的。

使用方法:

early_stopping=keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=0, verbose=0, mode='auto', baseline=None, restore_best_weights=False)  model.fit(callbacks = [early_stopping])

参数介绍:

monitor: 被监测的数据。

min_delta: 在被监测的数据中被认为是提升的最小变化, 例如,小于 min_delta 的绝对变化会被认为没有提升。

patience: 没有进步的训练轮数,在这之后训练就会被停止。

verbose: 详细信息模式。

mode: {auto, min, max} 其中之一。 在 min 模式中, 当被监测的数据停止下降,训练就会停止;在 max 模式中,当被监测的数据停止上升,训练就会停止;在 auto 模式中,方向会自动从被监测的数据的名字中判断出来。

baseline: 要监控的数量的基准值。 如果模型没有显示基准的改善,训练将停止。

restore_best_weights: 是否从具有监测数量的最佳值的时期恢复模型权重。 如果为 False,则使用在训练的最后一步获得的模型权重。

 

4.model.fit()函数

参考连接:https://blog.csdn.net/LuYi_WeiLin/article/details/88555813

参数说明:

x:输入数据,若只有一个输入那么类型为numpy

array:如果模型有多个输入,那么x的类型为lsit

y:标签

batch_size:整数,梯度下降是每个batch包含的样本数。训练时一个batch的样本会被计算一次梯度下降,使目标函数优化一步

epochs:整数,训练终止时的epoch值,训练将在达到该epoch值时停止,当没有设置initial_epoch时,它就是训练的总轮数,否则训练的总轮数为epochs - inital_epoch

verbose:日志显示,0为不在标准输出流输出日志信息,1为输出进度条记录,2为每个epoch输出一行记录

callbacks:keras.callbacks.EarlyStopping可定义,在适当时机调用

validation_split:0~1之间的浮点数,用来指定训练集的一定比例数据作为验证集。验证集将不参与训练,并在每个epoch结束后测试的模型的指标,如损失函数、精确度等。注意,validation_split的划分在shuffle之前,因此如果你的数据本身是有序的,需要先手工打乱再指定validation_split,否则可能会出现验证集样本不均匀。

validation_data:形式为(X,y)的tuple,是指定的验证集。此参数将覆盖validation_spilt。

shuffle:布尔值或字符串,一般为布尔值,表示是否在训练过程中随机打乱输入样本的顺序。若为字符串“batch”,则是用来处理HDF5数据的特殊情况,它将在batch内部将数据打乱。

class_weight:字典,将不同的类别映射为不同的权值,该参数用来在训练过程中调整损失函数(只能用于训练)

sample_weight:权值的numpy 

array,用于在训练时调整损失函数(仅用于训练)。可以传递一个1D的与样本等长的向量用于对样本进行1对1的加权,或者在面对时序数据时,传递一个的形式为(samples,sequence_length)的矩阵来为每个时间步上的样本赋不同的权。这种情况下请确定在编译模型时添加了sample_weight_mode=’temporal’。

initial_epoch: 从该参数指定的epoch开始训练,在继续之前的训练时有用。

callbacks:list,其中的元素是keras.callbacks.Callback的对象。这个list中的回调函数将会在训练过程中的适当时机被调用,参考回调函数

validation_split:0~1之间的浮点数,用来指定训练集的一定比例数据作为验证集。验证集将不参与训练,并在每个epoch结束后测试的模型的指标,如损失函数、精确度等。注意,validation_split的划分在shuffle之前,因此如果你的数据本身是有序的,需要先手工打乱再指定validation_split,否则可能会出现验证集样本不均匀。

validation_data:形式为(X,y)的tuple,是指定的验证集。此参数将覆盖validation_spilt。

shuffle:布尔值或字符串,一般为布尔值,表示是否在训练过程中随机打乱输入样本的顺序。若为字符串“batch”,则是用来处理HDF5数据的特殊情况,它将在batch内部将数据打乱。

class_weight:字典,将不同的类别映射为不同的权值,该参数用来在训练过程中调整损失函数(只能用于训练)

sample_weight:权值的numpy 

array,用于在训练时调整损失函数(仅用于训练)。可以传递一个1D的与样本等长的向量用于对样本进行1对1的加权,或者在面对时序数据时,传递一个的形式为(samples,sequence_length)的矩阵来为每个时间步上的样本赋不同的权。这种情况下请确定在编译模型时添加了sample_weight_mode=’temporal’。

initial_epoch: 从该参数指定的epoch开始训练,在继续之前的训练时有用。

fit函数返回一个History的对象,其History.history属性记录了损失函数和其他指标的数值随epoch变化的情况,如果有验证集的话,也包含了验证集的这些指标变化情况

posted @ 2021-11-16 20:21  不正从心szd  阅读(112)  评论(0编辑  收藏  举报