本文重点阐述了xgboost和lightgbm的主要参数和调参技巧,其理论部分可见集成学习,以下内容主要来自xgboostLightGBM的官方文档。

xgboost

Xgboost参数主要分为三大类:

General Parameters(通用参数):设置整体功能

Booster Parameters(提升参数):选择你每一步的booster(树or回归)

Learning Task Parameters(学习任务参数):指导优化任务的执行

General Parameters(通用参数)

  • booster [default=gbtree]

    选择每次迭代过程中需要运行的模型,一共有两种选择:gbtree和gblinear。gbtree使用基于树的模型进行提升计算,gblinear使用线性模型进行提升计算。缺省值为gbtree
  • silent [default=0]

    取0时表示打印出运行时信息,取1时表示以缄默方式运行,不打印运行时信息。缺省值为0
  • nthread [default to maximum number of threads available if not set]

    XGBoost运行时的线程数。缺省值是当前系统可以获得的最大线程数

剩余两个参数是Xgboost自动指定的,无需设置。

Booster Parameters(提升参数)

虽然有两种类型的booster,但是我们这里只介绍tree。因为tree的性能比线性回归好得多,因此我们很少用线性回归。

  • eta [default=0.3]

    学习率,可以缩减每一步的权重值,使得模型更加健壮:

    典型值一般设置为:0.01-0.2

    取值范围为:[0,1]
  • gamma [default=0]

    这个指定了一个结点被分割时,所需要的最小损失函数减小的大小。这个值一般来说需要根据损失函数来调整。

    range: [0,∞]
  • max_depth [default=6]

    数的最大深度。缺省值为6

    这个可以用来控制过拟合,典型值是3-10。

    取值范围为:[1,∞]
  • min_child_weight [default=1]

    孩子节点中最小的样本权重和。在现行回归模型中,这个参数是指建立每个模型所需要的最小样本数。该值越大算法越保守

    取值范围为: [0,∞]
  • subsample [default=1]

    用于训练模型的子样本占整个样本集合的比例。如果设置为0.5则意味着XGBoost将随机的冲整个样本集合中随机的抽取出50%的子样本建立树模型,这能够防止过拟合。

    取值范围为:(0,1]
  • colsample_bytree [default=1]

    在建立树时对特征采样的比例。缺省值为1

    取值范围:(0,1]
  • lambda [default=1, alias: reg_lambda]

    L2正则化。
  • alpha [default=0, alias: reg_alpha]

    L1正则化,主要用在数据维度很高的情况下,可以提高运行速度。
  • scale_pos_weight, [default=1]

    在类别高度不平衡的情况下,将参数设置大于0,可以加快收敛。

Learning Task Parameters(学习任务参数)

  • objective [ default=reg:linear ]

    定义学习任务及相应的学习目标,可选的目标函数如下:

    “reg:linear” –线性回归。

    “reg:logistic” –逻辑回归。

    “binary:logistic” –二分类的逻辑回归问题,输出为概率。

    “binary:logitraw” –二分类的逻辑回归问题,输出的结果为wTx。

    “count:poisson” –计数问题的poisson回归,输出结果为poisson分布。

    “multi:softmax” –让XGBoost采用softmax目标函数处理多分类问题,同时需要设置参数num_class(类别个数)

    “multi:softprob” –和softmax一样,但是输出的是ndata * nclass的向量,可以将该向量reshape成ndata行nclass列的矩阵。每行数据表示样本所属于每个类别的概率。

  • eval_metric [ default according to objective ]

    评估方法,主要用来验证数据,根据一个学习目标会默认分配一个评估指标

    “rmse”:均方根误差(回归任务)

    “logloss”:

    “error”

    “mlogloss”

    “merror”

    “auc”

  • seed [ default=0 ]

    随机数的种子。缺省值为0

调参方法

调参的通用方法:

选择一个相对较高的学习率。通常来说学习率设置为0.1。但是对于不同的问题可以讲学习率设置在0.05-0.3。通过交叉验证来寻找符合学习率的最佳树的个数。

当确定好学习率与最佳树的个数时,调整树的某些特定参数。比如:max_depth, min_child_weight, gamma, subsample, colsample_bytree

调整正则化参数 ,比如: lambda, alpha。这个主要是为了减少模型复杂度和提高运行速度的。适当地减少过拟合。

降低学习速率,选择最优参数

import xgboost as xgb
params={
'booster':'gbtree',
'objective': 'multi:softmax', #多分类的问题
'num_class':10, # 类别数,与 multisoftmax 并用
'gamma':0.1, # 用于控制是否后剪枝的参数,越大越保守,一般0.1、0.2这样子。
'max_depth':12, # 构建树的深度,越大越容易过拟合
'lambda':2, # 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
'subsample':0.7, # 随机采样训练样本
'colsample_bytree':0.7, # 生成树时进行的列采样
'min_child_weight':3,
# 这个参数默认是 1,是每个叶子里面 h 的和至少是多少,对正负样本不均衡时的 0-1 分类而言
#,假设 h 在 0.01 附近,min_child_weight 为 1 意味着叶子节点中最少需要包含 100 个样本。
#这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting。
'silent':0 ,#设置成1则没有运行信息输出,最好是设置为0.
'eta': 0.007, # 如同学习率
'seed':1000,
'nthread':7,# cpu 线程数
#'eval_metric': 'auc'
}
model = xgb.train(plst, xgb_train, num_rounds, watchlist,early_stopping_rounds=100)
model.save_model('./model/xgb.model') # 用于存储训练出的模型
print "best best_ntree_limit",model.best_ntree_limit #Grid seach on subsample and max_features param_test1 = {
'max_depth':list(range(3,10,2)),
'min_child_weight':list(range(1,6,2))
}
"""
参数说明;
n_estimators:基学习器的个数(第一步得到)
scoring:得分排名依据,因为是越高越好,这是mean_squared_error取负 """ gsearch1 = GridSearchCV(estimator = XGBRegressor( learning_rate =0.1, n_estimators=33, max_depth=5,
min_child_weight=1, gamma=0, subsample=0.8, colsample_bytree=0.8,
objective= 'gpu:reg:linear', nthread=4, scale_pos_weight=1, seed=27),
param_grid = param_test1, scoring='neg_mean_squared_error',n_jobs=1,iid=False, cv=5)
gsearch1.fit(X,y)
print(gsearch1.cv_results_, gsearch1.best_params_, gsearch1.best_score_) #进一步探索参数max_depth,min_child_weight(前面得到最好的是{‘max_depth’: 5, ‘min_child_weight’: 1})
#Grid seach on subsample and max_features param_test2 = {
'max_depth':[4,5,6],
'min_child_weight':[0,1,2] #范围: [0,∞]
}
gsearch2 = GridSearchCV(estimator = XGBRegressor( learning_rate=0.1, n_estimators=33, max_depth=5,
min_child_weight=2, gamma=0, subsample=0.8, colsample_bytree=0.8,
objective= 'gpu:reg:linear', nthread=4, scale_pos_weight=1,seed=27),
param_grid = param_test2, scoring='neg_mean_squared_error',n_jobs=1,iid=False, cv=5)
gsearch2.fit(X,y)
print(gsearch2.cv_results_, gsearch2.best_params_, gsearch2.best_score_)
#继续搜索参数min_child_weight {‘max_depth’: 5, ‘min_child_weight’: 2}
#Grid seach on subsample and max_features
#-3775.018211540544
param_test2b = {
'min_child_weight':[2,4,6,8]
}
gsearch2b = GridSearchCV(estimator = XGBRegressor( learning_rate=0.1, n_estimators=33, max_depth=5,
min_child_weight=2, gamma=0, subsample=0.8, colsample_bytree=0.8,
objective= 'gpu:reg:linear', nthread=4, scale_pos_weight=1,seed=27),
param_grid = param_test2b, scoring='neg_mean_squared_error',n_jobs=1,iid=False, cv=5)
gsearch2b.fit(X,y)
print(gsearch2b.cv_results_, gsearch2b.best_params_, gsearch2b.best_score_)
#调整参数gamma,range: [0,∞],default=0
#Grid seach on subsample and max_features
#在树的叶子节点上进行进一步划分所需的最小损失。越大,算法就越保守。
param_test3 = {
'gamma':[i/10.0 for i in range(0,5)]
}
gsearch3 = GridSearchCV(estimator = XGBRegressor( learning_rate =0.1, n_estimators=33, max_depth=5,
min_child_weight=2, gamma=0, subsample=0.8, colsample_bytree=0.8,
objective= 'gpu:reg:linear', nthread=4, scale_pos_weight=1,seed=27),
param_grid = param_test3, scoring='neg_mean_squared_error',n_jobs=1,iid=False, cv=5)
gsearch3.fit(X,y)
print(gsearch3.cv_results_, gsearch3.best_params_, gsearch3.best_score_)
#调整参数subsample,colsample_bytree
#Grid seach on subsample and max_features
param_test4 = {
'subsample':[i/10.0 for i in range(6,10)],
'colsample_bytree':[i/10.0 for i in range(6,10)]
}
gsearch4 = GridSearchCV(estimator = XGBRegressor( learning_rate =0.1, n_estimators=53, max_depth=5,
min_child_weight=2, gamma=0, subsample=0.8, colsample_bytree=0.8,
objective= 'gpu:reg:linear', nthread=4, scale_pos_weight=1,seed=27),
param_grid = param_test4, scoring='neg_mean_squared_error',n_jobs=1,iid=False, cv=5)
a=gsearch4.fit(train[predictors],train[target])
print(a)
gsearch4.fit(X,y)
print(gsearch4.cv_results_, gsearch4.best_params_, gsearch4.best_score_)

LightGBM

LightGBM中的主要调节的参数包括核心参数、学习控制参数、IO 参数、目标参数、度量参数等。

Core Parameters(核心参数)

  • task [default=train]

    数据的用途 选择 train,predict或者convert_model(将模型文件转换成 if-else 格式):
  • objective [default=regression]

    模型的用途

    ‘regression’表示回归任务,但是使用L2损失函数。

    ‘regression_l1’:表示回归任务,但是使用L1损失函数。

    ‘huber’: 表示回归任务,但是使用huber 损失函数。

    ‘fair’: 表示回归任务,但是使用fair 损失函数。

    ‘binary’: 表示二分类任务,使用对数损失函数作为目标函数。

    ‘multiclass’: 表示多分类任务,使用softmax 函数作为目标函数。必须设置num_class 参数

    ‘multiclassova’ : 表示多分类任务,使用one-vs-all 的二分类目标函数。必须设置num_class 参数

    ‘xentropy’: 目标函数为交叉熵(同时具有可选择的线性权重)。要求标签是[0,1] 之间的数值。

    ‘xentlambda’ : 替代了参数化的cross_entropy 。要求标签是[0,1]之间的数值。
  • boosting [default=gbdt]

    给出基学习器模型算法。可以为:

    ‘gbdt’: 表示传统的梯度提升决策树。默认值为’gbdt’

    ‘rf’: 表示随机森林。

    ‘dart’: 表示带dropout 的gbdt

    goss:表示Gradient-based One-Side Sampling 的gbdt (基于梯度的单侧采样)
  • data, [default=""]

    训练数据, LightGBM 将会使用这个数据进行训练
  • valid, [default=""]

    验证/测试 数据, LightGBM 将输出这些数据的度量
  • num_iterations, [default=100]

    boosting的迭代次数。

    • 对于python/R包,该参数是被忽略的。对于python,使用train()/cv()的输入参数num_boost_round来代替。
  • learning_rate, [default=0.1]

    学习率
  • num_leaves, [default=31]

    一棵树上的叶子数。
  • tree_learner,[default=serial]

    主要用于并行学习。 默认为’serial’单台机器。
  • num_threads, [default=OpenMP_default]

    LightGBM 的线程数
  • device, [default=cpu]

    指定计算设备。默认为’cpu’。 可以为’gpu’,’cpu’。

    • 为了加快学习速度,GPU 默认使用32位浮点数来求和。你可以设置gpu_use_dp=True 来启动64位浮点数,但是它会使得训练速度降低。

Learning Control Parameters(学习控制参数)

  • max_depth, [default=-1]

    限制树模型的最大深度。如果小于0,则表示没有限制。
  • min_data_in_leaf, [default=20]

    一个叶子上数据的最小数量. 可以用来处理过拟合.
  • min_sum_hessian_in_leaf, [default=1e-3]

    一个叶子上的最小 hessian 和也就是叶节点样本权重之和的最小值), 类似于 min_data_in_leaf, 可以用来处理过拟合.
  • feature_fraction, [default=1.0]

    如果小于1.0,则lightgbm 会在每次迭代中随机选择部分特征。如0.8 表示:在每棵树训练之前选择80% 的特征来训练。
  • feature_fraction_seed, [default=2]

    feature_fraction 的随机数种子
  • bagging_fraction, [default=1]

    类似于 feature_fraction, 但是它将在不进行重采样的情况下随机选择部分数据

    • Note: 为了启用 bagging, bagging_freq 应该设置为非零值
  • bagging_freq, [default=0]

    bagging 的频率, 0 意味着禁用 bagging. k 意味着每 k 次迭代执行bagging
  • bagging_seed , [default=3]

    bagging 随机数种子
  • early_stopping_round, [default=0]

    如果一个验证集的度量在 early_stopping_round 循环中没有提升, 将停止训练
  • lambda_l1, [default=0]

    L1 正则
  • lambda_l2, [default=0]

    L2 正则
  • min_split_gain, [default=0]

    执行切分的最小增益
  • lambda_l1, [default=0]

    L1 正则
  • feature_fraction_seed, [default=2]

    feature_fraction 的随机数种子
  • feature_fraction_seed, [default=2]

    feature_fraction 的随机数种子
  • feature_fraction_seed, [default=2]

    feature_fraction 的随机数种子

IO Parameters(IO 参数)

  • max_bin, [default=255]

    表示最大的桶的数量。lightgbm 会根据它来自动压缩内存。如max_bin=255 时,则lightgbm 将使用uint8 来表示特征的每一个值。

  • min_data_in_bin, [default=3]

    表示每个桶的最小样本数。该方法可以避免出现一个桶只有一个样本的情况。

  • data_random_seed, [default=1]

    表示并行学习数据分隔中的随机数种子。默认为1它不包括特征并行。

  • output_model, [default=LightGBM_model.txt]

    表示训练中输出的模型被保存的文件的文件名。

  • input_model, [default=""]

    表示输入模型的文件的文件名。默认空字符串。对于prediction任务,该模型将用于预测数据,对于train任务,训练将从该模型继续

  • output_result, [default=LightGBM_predict_result.txt]

    prediction 任务的预测结果文件名

  • pre_partition, [default=false]

    用于并行学习(不包括功能并行). 如果为true,则不同的机器使用不同的partition 来训练。

  • is_sparse, [default=true]

    用于 enable/disable 稀疏优化. 设置 false 就禁用稀疏优化

  • two_round, [default=false]

    一个布尔值,指示是否启动两次加载。默认值为False,表示只需要进行一次加载。默认情况下,lightgbm 会将数据文件映射到内存,然后从内存加载特征,这将提供更快的数据加载速度。但是当数据文件很大时,内存可能会被耗尽。如果数据文件太大,则将它设置为True

  • save_binary, [default=1]

    表示是否将数据集(包括验证集)保存到二进制文件中。默认值为False。如果为True,则可以加快数据的加载速度。

  • verbosity, [default=1]

    表示是否输出中间信息。默认值为1。如果小于0,则仅仅输出critical 信息;如果等于0,则还会输出error,warning 信息; 如果大于0,则还会输出info 信息。

  • header, [default=false]

    如果输入数据有标识头, 则在此处设置 true

  • label , [default=""]

    表示标签列。默认为空字符串。你也可以指定一个整数,如label=0 表示第0列是标签列。你也可以为列名添加前缀,如label=prefix:label_name

  • weight , [default=""]

    一个字符串,表示样本权重列。默认为空字符串。你也可以指定一个整数,如weight=0 表示第0列是权重列。注意:它是剔除了标签列之后的索引。假如标签列为0,权重列为1,则这里weight=0。你也可以为列名添加前缀,如weight=prefix:weight_name

  • query, [default=""]

    表示query/group ID 列。

  • ignore_column , [default=""]

    表示训练中忽略的一些列,默认为空字符串。可以用数字做索引,如ignore_column=0,1,2 表示第0,1,2 列将被忽略。注意:它是剔除了标签列之后的索引。

  • categorical_feature, [default=""]

    指定category 特征的列。默认为空字符串。可以用数字做索引,如categorical_feature=0,1,2 表示第0,1,2 列将作为category 特征。注意:它是剔除了标签列之后的索引。你也可以为列名添加前缀,如categorical_feature=prefix:cat_name1,cat_name2 在categorycal 特征中,负的取值被视作缺失值。

  • predict_leaf_index[default=false]

    表示是否预测每个样本在每棵树上的叶节点编号。默认为False。在预测时,每个样本都会被分配到每棵树的某个叶子节点上。该参数就是要输出这些叶子节点的编号。该参数只用于prediction 任务。

  • bin_construct_sample_cnt [default=200000]

    表示用来构建直方图的样本的数量。默认为200000。如果数据非常稀疏,则可以设置为一个更大的值,如果设置更大的值,则会提供更好的训练效果,但是会增加数据加载时间。

  • num_iteration_predict[default=-1]

    表示在预测中使用多少棵子树。默认为-1。小于等于0表示使用模型的所有子树。该参数只用于prediction 任务。

Objective Parameters(目标参数)

  • sigmoid[default=1]

    sigmoid 函数的参数. 将用于 binary 分类 和 lambdarank。
  • scale_pos_weight[default=1]

    用于调整正样本的权重,默认值为0,用于二分类任务。
  • is_unbalance[default=false]

    指示训练数据是否均衡的。默认为True。用于二分类任务。
  • num_class[default=1]

    指示了多分类任务中的类别数量。默认为1,用于多分类任务。
  • reg_sqrt[default=false]

    一个布尔值,默认为False。如果为True,则拟合的结果为:\(\sqrt{label}\)。同时预测的结果被自动转换为:\({pred}^2\)。它用于回归任务。

Metric Parameters(度量参数)

  • metric[default={l2 for regression}, {binary_logloss for binary classification}, {ndcg for lambdarank}]

    度量的指标,默认为:对于回归问题,使用l2 ;对于二分类问题,使用binary_logloss;对于lambdarank 问题,使用ndcg。如果有多个度量指标,则用逗号, 分隔。

    • ‘l1’ 或者 mean_absolute_error或者 mae或者 regression_l1: 表示绝对值损失
    • ‘l2’ 或者mean_squared_error或者 mse或者 regression_l2或者 regression:表示平方损失
    • ‘l2_root’ 或者root_mean_squared_error或者 rmse:表示开方损失
    • ‘quantile’: 表示Quantile 回归中的损失
    • ‘mape’ 或者 ‘mean_absolute_percentage_error’ :表示MAPE 损失
    • ‘map’ 或者’mean_average_precision’: 表示平均的精度
    • ‘auc’: 表示AUC
    • ‘binary_logloss’或者’binary’: 表示二类分类中的对数损失函数
    • ‘binary_error’: 表示二类分类中的分类错误率
    • ‘multi_logloss’或者 ‘multiclass’或者 ‘softmax’或者 ‘multiclassova’或者 ‘multiclass_ova’,或者’ova’或者 ‘ovr’: 表示多类分类中的对数损失函数
    • ‘multi_error’: 表示多分类中的分类错误率
    • ‘xentropy’或者’cross_entropy’: 表示交叉熵
    • ‘xentlambda’ 或者’cross_entropy_lambda’: 表示intensity 加权的交叉熵
    • ‘kldiv’或者’kullback_leibler’: 表示KL 散度
  • metric_freq[default=1]

    每隔多少次输出一次度量结果。默认为1。
  • train_metric [default=false]

    如果为True,则在训练时就输出度量结果。

调参方法

针对 leaf-wise 树的参数优化

  • num_leaves:控制了叶节点的数目。它是控制树模型复杂度的主要参数。

如果是level-wise,则该参数为\(2^{depth}\),其中\(depth\)为树的深度。但是当叶子数量相同时,leaf-wise的树要远远深过level-wise树,非常容易导致过拟合。因此应该让num_leaves小于\(2^{depth}\)。在leaf-wise树中,并不存在\(depth\)的概念。因为不存在一个从\(leaves\)到\(depth\)的合理映射。

  • min_data_in_leaf:每个叶节点的最少样本数量。它是处理leaf-wise树的过拟合的重要参数。将它设为较大的值,可以避免生成一个过深的树。但是也可能导致欠拟合。
  • max_depth: 控制了树的最大深度。该参数可以显式的限制树的深度。

针对更快的训练速度

  • 通过设置 bagging_fraction 和 bagging_freq 参数来使用 bagging 方法
  • 通过设置 feature_fraction 参数来使用特征的子抽样
  • 使用较小的 max_bin
  • 使用 save_binary 在未来的学习过程对数据加载进行加速

获取更好的准确率

  • 使用较大的 max_bin (学习速度可能变慢)
  • 使用较小的 learning_rate 和较大的 num_iterations
  • 使用较大的 num_leaves (可能导致过拟合)
  • 使用更大的训练数据
  • 尝试 dart

缓解过拟合

  • 使用较小的 max_bin
  • 使用较小的 num_leaves
  • 使用 min_data_in_leaf 和 min_sum_hessian_in_leaf
  • 通过设置 bagging_fraction 和 bagging_freq 来使用 bagging
  • 通过设置 feature_fraction 来使用特征子抽样
  • 使用更大的训练数据
  • 使用 lambda_l1, lambda_l2 和 min_gain_to_split 来使用正则
  • 尝试 max_depth 来避免生成过深的树

xgboost&lightgbm调参指南的更多相关文章

  1. xgboost 完全调参指南

    http://www.2cto.com/kf/201607/528771.html xgboost: https://www.analyticsvidhya.com/blog/2016/03/comp ...

  2. sklearn逻辑回归(Logistic Regression,LR)调参指南

    python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_ca ...

  3. 【集成学习】lightgbm调参案例

    lightgbm使用leaf_wise tree生长策略,leaf_wise_tree的优点是收敛速度快,缺点是容易过拟合. # lightgbm关键参数 # lightgbm调参方法cv 代码git ...

  4. 论XGBOOST科学调参

    XGBOOST的威力不用赘述,反正我是离不开它了. 具体XGBOOST的原理可以参见之前的文章<比XGBOOST更快--LightGBM介绍> 今天说下如何调参. bias-varianc ...

  5. LightGBM调参笔记

    本文链接:https://blog.csdn.net/u012735708/article/details/837497031. 概述在竞赛题中,我们知道XGBoost算法非常热门,是很多的比赛的大杀 ...

  6. xgboost 参数调优指南

    一.XGBoost的优势 XGBoost算法可以给预测模型带来能力的提升.当我对它的表现有更多了解的时候,当我对它的高准确率背后的原理有更多了解的时候,我发现它具有很多优势: 1 正则化 标准GBDT ...

  7. 自动调参库hyperopt+lightgbm 调参demo

    在此之前,调参要么网格调参,要么随机调参,要么肉眼调参.虽然调参到一定程度,进步有限,但仍然很耗精力. 自动调参库hyperopt可用tpe算法自动调参,实测强于随机调参. hyperopt 需要自己 ...

  8. LightGBM 调参方法(具体操作)

     sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  9. xgboost使用调参

    欢迎关注博主主页,学习python视频资源 https://blog.csdn.net/q383700092/article/details/53763328 调参后结果非常理想 from sklea ...

随机推荐

  1. MongoDB安装与配置问题

    MongoDB相关 通常我们在不同情境下使用不同的数据存储方式.如果仅仅用来存储测试用的数据,推荐使用TXT CSV格式的文件,因为这两种格式的读写都非常方便, 可以很快的打开文件查看当TXT CSV ...

  2. fastadmin添加定时任务

    安装定时任务插件后 需要在crontab -e 中添加一条记录 * * * * * /usr/bin/php /var/www/yoursitepath/public/index.php /addon ...

  3. windows下使用命令行编译、链接C++源文件

    目录 1.流程 2.操作 1.流程 .cpp-->.o-->.exe 分别为 源文件-->中间目标文件-->可执行文件 两个-->的过程分别为编译.链接 p.s.多个 . ...

  4. centos7yum的配置

    首先呢,本人的centos的版本是7.5 这里我主要介绍的是通过挂在系统镜像文件和指定网络epel镜像源. 首先指定本地的光盘当做yum的仓库 1.删除/etc/yum.repos.d的所有文件 2. ...

  5. php7和PHP5对比的新特性和性能优化

    1  抽象语法树( AST) 1)在 PHP5中,从 php 脚本到 opcodes 的执行的过程是: Lexing:词法扫描分析,将源文件转换成 token 流:    Parsing:语法分析,在 ...

  6. go的命令行参数

    package main import ( "fmt" "os" ) func main() { var s, sep string for i := 1; i ...

  7. shell习题第14题:

    [题目要求] 需求,根据web服务器的访问日志,把一些请求高的ip给拒绝掉,并且每隔半小时把不再发起请求或者请求量很小的ip给解封 假设: 1. 一分钟内请求量高于100次的ip视为不正常的请求 2. ...

  8. oracle数据库的冷备份

    前言 冷备份是Oracle最简单的一种备份,所谓的冷备份指的就是在关闭数据库实例的情况下进行数据库备份操作的实现:然后使用操作系统实用工具或者第三方工具备份所有相关的数据库文件.能简单快速地备份.能简 ...

  9. 怎样理解AJAX

    AJAX: Asynchronous JavaScript and XML, 翻译过来就是: 异步的JavaScript与XML 这已经成为了一个通用名词, 字面意义已经消失了, 因为现在使用Java ...

  10. 在windows部署service

    首先,需要在环境变量的path中加入Install Util的路径: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 注意这里的Framework\v2.0 ...