FIT FOR DOT NET(2)----

 本文来源 http://fit.c2.com/wiki.cgi?ProgrammersQuickStartGuide,基本上是翻译了原来的文档.

Programmers Quick Start Guide


(work in progress)

     客户的参与对软件成功是关键的.最为一个程序员,你需要一种方法来理解你的客户的需求,因此你才能写出很好的软件.FIT为你和你的客户提供了一种方法来精确的交流和协作.

    在它的核心中,FIT只是一个非常简单的工具.它是一个“为集成测试的框架“,也就是说,它是一个翻译HTML编写的文档,在你的软件上运行他们,然后以HTML格式报告结果的框架.这些是你的客户编写作为例子的测试.用来钩住这些测试到你的软件中的fixture则由你来编写.

.  FIT的简单掩盖了它的实用性.尽管FIT运行测试,但是他不关于测试.它将给你的客户一种你的软件作什么的方法.以及给你一种你和你客户讨论详情的途径.

 因为FIT可以读写HTML,又因为Word和类似的商业工具可以读写HTML,所以你的客户可以直接FIT文档.这是至关重要的.徐徐求文档的问题是他们通常不是由客户来编写的.甚至客户很少阅读他们.

    结果,我们失去了珍贵的协作机会.这种事情不计其数...对于大项目也是如此.每个我们错误的详情就是软件中的一个Bug.我们需要一种方式让客户考虑细节,并且和我们一起讨论.

   FIT是一种方法.他允许客户停工正确行为的实例,并且看软件利用这些实例可以作甚么.他允许客户拥有这些实例.这是非常重要的.鼓励他们这样去做.给他们反馈和他们将得到的控制.客户的参与对软件成功来说非常重要.FIT将帮助你得到这组些,如果你这样去做,你的软件会更好.

 使用FIT和客户一起工作

    使用FIT的一大部分是帮助客户参与,因此你应该从阅读IntroductionToFitCustomersQuickStartGuide.开始.注意FIT的生命周期,查找你能帮助客户参与的方式,从程序员的角度上,本节不会反映CustomersQuickStartGuide .

  当你开始开发一个新的特性时,你应该和你的客户讨论(在这里,对于“客户“,我们是指:“从业务的角度上说,知道特性最多的人“,“有些人称他们为'主题事件专家“)通过百板收集,倾听客户的解释.然后要求他/她描述特性使用的例子.

   许多客户更乐意讨论应用程序的界面,而不是底层的需求.在初期,你可能得到用户讨论的例子,而不是底层的业务规则.这些例子模糊了客户的真正的需要,并且他们非常难以编写和维护.
你应该逐步掌舵你的客户朝讨论围绕业务规则的例子的方向上去.例如,如果客户说“会计师按这个按钮,软将会得到一个时间卡,然后计算雇员的薪资“,你可以问时间卡和最后薪资的例子.

   你的客户描述例子,你应该尽可能的想问题.利用这些问题得到描述问题答案的额外例子.有时候你的客户不知道,或者被这个问题缠绕住.在这种情况下,把它放在一边.

你有一些关键例子后,帮助你的客户把例子转化为表.努要试着表格现在就和FIT Fixture工作.(下面有更多的fixture),得到例子.一旦你对表感到满意,重新定义他们的格式,使你能容易的用FIT实现.在你做的时候,当心不要遗漏了客户的观点.

   你实现特征时,你肯会跨过实例没有覆盖到的问题.把这些问题反馈给客户,和前面一样,使用他们帮助你指导客户产生额外的例子.

get the answer by adding a new example to a Fit document. FIT不仅是从客户得到详情的途径,也是你的客户从你的程序里得到反馈的方法.向你的客户展示如何使用FIT,描述他/她如何对FIT作出改变,返回FIT,和查看结果.这将允许你的客户试验和产生更多的例子.你想让你的客户说:“我想知道软件如何处理这种情况...?“,然后通过在FIT文档增加额外的例子来得到答案.
                          (------未完-----)

当代码 `grad_weights = (-2 / m) * X.T.dot(y - y_pred)` 出现 `RuntimeWarning: overflow encountered in dot` 警告,意味着在执行矩阵点积运算时发生了数值溢出。以下是一些可能的解决方法: ### 1. 数据标准化 对输入数据 `X`、`y` 和 `y_pred` 进行标准化处理,将数据缩放到较小的范围,减少数值溢出的风险。例如,可以使用 `StandardScaler` 进行标准化: ```python from sklearn.preprocessing import StandardScaler import numpy as np # 假设 X, y 是你的输入数据 scaler_X = StandardScaler() X_scaled = scaler_X.fit_transform(X) # 如果 y 是连续值,也可以对其进行标准化 scaler_y = StandardScaler() y_scaled = scaler_y.fit_transform(y.reshape(-1, 1)).flatten() # 计算 y_pred ,这里假设已经有预测函数 predict y_pred = predict(X_scaled) m = len(X_scaled) grad_weights = (-2 / m) * X_scaled.T.dot(y_scaled - y_pred) ``` ### 2. 检查数据类型 确保使用的数据类型具有足够的精度,避免使用容易溢出的数据类型。例如,将数据类型转换为 `float64`: ```python X = X.astype(np.float64) y = y.astype(np.float64) y_pred = y_pred.astype(np.float64) m = len(X) grad_weights = (-2 / m) * X.T.dot(y - y_pred) ``` ### 3. 分块计算 对于大规模矩阵,可以将矩阵分块进行点积运算,避免一次性处理大量数据导致溢出: ```python chunk_size = 1000 # 分块大小 grad_weights = np.zeros(X.shape[1]) for i in range(0, len(X), chunk_size): end = min(i + chunk_size, len(X)) X_chunk = X[i:end] y_chunk = y[i:end] y_pred_chunk = y_pred[i:end] m_chunk = len(X_chunk) grad_weights += (-2 / m) * X_chunk.T.dot(y_chunk - y_pred_chunk) ``` ### 4. 调整学习率或正则化 如果是在梯度下降等优化算法中使用该梯度计算,可能是学习率过大导致梯度值过大。可以尝试减小学习率,或者添加正则化项来约束参数的更新。 ### 5. 检查数据范围 检查输入数据 `X`、`y` 是否存在异常值或不合理的数值。如果存在异常值,可以进行数据清洗或截断处理。 ### 6. 梯度裁剪 在计算梯度后,对梯度进行裁剪,限制梯度的最大值,避免梯度爆炸: ```python m = len(X) grad_weights = (-2 / m) * X.T.dot(y - y_pred) # 梯度裁剪 max_grad = 1.0 grad_weights = np.clip(grad_weights, -max_grad, max_grad) ``` 通过以上方法,可以有效解决 `RuntimeWarning: overflow encountered in dot` 警告。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值