软件构造L2 test

本文探讨了测试驱动开发(TDD)的方法,强调先编写测试用例,确保代码质量。测试用例应覆盖各种边界条件,如输入长度、特定前缀等。通过等价类划分减少测试用例数量,提高效率。使用JUnit等工具进行测试,并保持测试用例与功能代码的对应结构。TDD有助于尽早发现问题,促进代码的健壮性。

测试:转变心态:make it fail ,fail fast

测试用例:

输入+执行条件+期望结果,养成测试优先的编程习惯:在功能代码之前写好测试用例

测试用例设计:最可能发现错误、不重复冗余、最有效、既不简单也不复杂

过程:

1.先写spec

2.(spec已经描述了在给定输入情况下的期望输出,因此可以)写出符合spec的测试用例

3.写代码,执行测试,有问题再改,再执行测试用例,直到通过它

@param:参数说明 @return:返回类型的说明 @throws:抛出的异常

JUnit前面标注@Test时表明其为测试方法

 

针对写的功能代码,测试用例的包结构和功能代码一一对应,

用尽可能少的测试用例,尽快运行,尽可能发现大的程序错误

基于等价类划分的测试:将被测函数的输入域划分为等价类,从每个等价类中选一个为代表作为测试用例以降低测试用例的数量

例:输入的学号no需满足的条件:

• 长度为10位:10、>10、<10
• 以118开头:以此开头、以其他开头
• 之后两位数应为03/36/37:03、36、37、其他

 

 

### XGBoost 构造思路及算法原理 XGBoost 是一种基于梯度提升决策树(Gradient Boosting Decision Tree, GBDT)的机器学习算法,其核心目标是通过构建一系列加法模型来最小化给定的目标函数。以下是关于 XGBoost 的构造思路和工作原理的具体分析: #### 1. **目标函数的设计** XGBoost 的目标函数由两部分组成:训练数据上的预测误差和模型复杂度的惩罚项。这种设计使得 XGBoost 不仅能够很好地拟合训练数据,还能有效防止过拟合。 目标函数可以表示为: \[ Obj(\theta) = L(\theta) + \Omega(f_k) \] 其中 \(L(\theta)\) 表示损失函数,用于衡量模型预测值与真实值之间的差异;而 \(\Omega(f_k)\) 则是一个正则化项,用来控制模型复杂度[^2]。 具体来说,对于第 \(k\) 棵树,目标函数可进一步展开为: \[ Obj^{(t)} = \sum_{i=1}^n l(y_i,\hat{y}_i^{(t)})+\sum_{j=1}^t\Omega(f_j), \quad t=0,...,T \] 这里的 \(l(y_i,\hat{y}_i^{(t)})\) 是样本 \(i\) 上的真实标签 \(y_i\) 和当前预测值 \(\hat{y}_i^{(t)}\) 的损失函数[^1]。 #### 2. **分裂点的选择** 为了找到最佳的分裂点,XGBoost 使用了一种贪心策略,在每次分裂时计算增益值(Gain)。增益值越大,则说明该分裂越有意义。具体的增益公式如下所示: \[ Gain=\frac{1}{2}\left[\frac{\left(G_L\right)^2}{H_L+\lambda}+\frac{\left(G_R\right)^2}{H_R+\lambda}-\frac{(G_L+G_R)^2}{H_L+H_R+\lambda}\right]-\gamma \] 在这个公式中,\(G_L\) 和 \(H_L\) 分别代表左子节点的一阶导数之和与二阶导数之和,同理定义右子节点的相关量。参数 \(\lambda\) 控制权重平方的 L2 正则化强度,而 \(\gamma\) 则是用来剪枝的一个阈值参数。 #### 3. **叶子结点取值的确定** 当一棵树被完全建立之后,需要决定每个叶节点的最佳输出值。这个过程可以通过求解下面的二次规划问题完成: \[ w_j^\ast=-\frac{G_j}{H_j+\lambda} \] 此处 \(G_j\) 和 \(H_j\) 对应于到达该叶节点的所有样例的一阶导数总和与二阶导数总和[^2]。 #### 4. **并行化处理与高效实现** 虽然理论上每棵树都需要顺序生成,但在实际应用中,XGBoost 提供了一些技巧加速整个流程。比如预排序方法提前准备好候选分割位置的数据结构以便快速访问;还有近似直方图技术减少内存消耗的同时加快运算速度等等[^3]。 ```python import xgboost as xgb from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split data = load_boston() X_train, X_test, y_train, y_test = train_test_split(data.data, data.target) dtrain = xgb.DMatrix(X_train, label=y_train) dtest = xgb.DMatrix(X_test, label=y_test) params = { 'objective': 'reg:squarederror', 'eval_metric': 'rmse' } bst = xgb.train(params, dtrain, num_boost_round=100, evals=[(dtest, 'test')], early_stopping_rounds=10) ``` 上面展示了一个简单的例子演示如何利用 Python 中 `xgboost` 库来进行回归建模操作。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值