精华内容
下载资源
问答
  • 全看度量有多 有时候,你总是 因为过去的一件事 在夜里辗转反侧 因为别人的一句话 在意得元气伤 但真正成熟的人 看得清生活的重点 不会太多的琐事 占据自己的心情 真正的智慧 是看遍世间繁华后 还能保持心态平...

    人生的大智慧在于
    认清生活,看清自己

    人生是一场漫长的修行
    你如何对待生活
    生活便如何对你

    优雅的人生
    一定具有这三量

    1.度量

    人的格局有多大
    全看度量有多大

    有时候,你总是
    因为过去的一件事
    在夜里辗转反侧
    因为别人的一句话
    在意得元气大伤

    但真正成熟的人
    看得清生活的重点
    不会让太多的琐事
    占据自己的心情

    真正的智慧
    是看遍世间繁华后
    还能保持心态平和

    与生活和解
    生活就会对你宽容
    与世界和解
    世界自然多姿多彩

    2.胆量

    每一个美满生活的起点
    都是勇敢仰望星空的梦

    有的人一生期待美好
    却始终不敢踏出一步
    到老了后悔万分
    却再也来不及了

    有的人即使面对挫折
    也毫不犹豫勇敢挑战
    攀上了百米高峰
    终看到宜人风景

    机会是靠自己创造的
    勇敢挑战生活的人
    永远都不会变平庸

    3.心量

    做人的心量有多大
    人的眼界就有多大

    爱争虚荣面子的人
    打肿脸充胖子,不值得
    爱呈口舌之快的人
    赢了表面,却失了德行

    尘世间有千千万万人
    真正明白生活真谛的却没几个

    人生在世是场修行
    最重要的是修炼自己的心

    有大智慧的人
    从不在表面上下功夫
    却会在内在充实自己
    内心踏实,活得潇洒

    有度量的人心态平和
    有胆量的人不甘平庸
    有心量的人有大智慧

    往后余生愿你
    不争不抢,不卑不亢
    笑看生活琐碎
    心中自有郎朗世界

    展开全文
  • 数据分析如何使用线性回归进行预测建模?在R编程中,预测模型对于预测将来的结果和估计不可行的度量非常有用。例如,数据科学家可以使用预测模型根据降雨和温度来预测农作物产量,或者确定具有某些性状的患者对新药...

      大数据分析如何使用线性回归进行预测建模?在R编程中,预测模型对于预测将来的结果和估计不可行的度量非常有用。例如,数据科学家可以使用预测模型根据降雨和温度来预测农作物产量,或者确定具有某些性状的患者对新药的不良反应是否更可能。

      在我们专门讨论线性回归之前,让我们提醒自己一个典型的数据科学工作流程是什么样的。很多时候,我们会从一个要回答的问题开始,然后执行以下操作:

      1)收集一些与问题相关的数据(越多越好)。

      2)如果需要,将数据清理,扩充和预处理为方便的形式。

      3)对数据进行探索性分析,以更好地了解数据。

      4)使用您发现的内容作为指南,构建数据某些方面的模型。

      5)使用模型来回答您开始的问题,并验证结果。

      线性回归是数据科学家用于预测建模的最简单,最常见的监督式机器学习算法之一。在这篇文章中,我们将使用线性回归来构建一个模型,该模型根据度量标准来预测樱花树的数量,这对于研究树木的人们来说更容易测量。

      在大数据分析如何使用线性回归进行预测建模文章中,我们将使用R来探索该数据集并学习线性回归的基础。如果您不熟悉R语言,我们建议您使用R Data Analyst路径学习R基础知识和R编程:中级课程。掌握一些非常基础的统计知识也将有所帮助,但是如果您知道平均数和标准差是多少,您将可以继续进行。如果您想练习自己构建模型和可视化,我们将使用以下R包:

      1)data sets该软件包包含各种实践数据集。我们将使用其中的一种“树”来学习构建线性回归模型。

      2)ggplot2 我们将使用这个流行的数据可视化软件包来构建模型图。

      3)GGally该软件包扩展了的功能ggplot2。作为初始探索性​​数据可视化的一部分,我们将使用它来创建绘图矩阵。

      4)scatterplot3d 我们将使用此软件包来可视化具有多个预测变量的更复杂的线性回归模型。

      无论如何,他们如何测量树木的体积?

      该树的数据集包括在基础R的datasets包,它会帮助我们回答这个问题。由于我们正在使用现有的(干净的)数据集,因此上面的步骤1和2已经完成,因此我们可以直接跳到步骤3中的一些初步探索性分析。

      

    大数据分析如何使用线性回归进行预测建模

     

      该数据集包含3个描述黑樱桃树的数字变量的31个观察值:

      1)躯干围长(英寸)

      2)高度(英尺)

      3)体积(英尺3)

      这些指标对于研究树木生态学的林务员和科学家是有用的信息。使用基本的林业工具来测量树木的高度和周长是相当简单的,但是测量树木的体积要困难得多。如果您不想真正砍伐和拆除树木,则必须采取一些技术上具有挑战性且耗时的活动,例如爬树和进行精确的测量。能够根据高度和/或周长准确预测树木的体积将很有用。

      

    大数据分析如何使用线性回归进行预测建模

     

      为了确定我们是否可以建立预测模型,第一步是查看预测变量和响应变量(在这种情况下,周长,高度和体积)之间是否存在关系。让我们进行一些探索性的数据可视化。我们将使用包中的ggpairs()函数GGally创建一个绘图矩阵,以查看变量之间的关系。

      

    大数据分析如何使用线性回归进行预测建模

     

      

    大数据分析如何使用线性回归进行预测建模

     

      该ggpairs()函数为我们提供了每个变量组合的散点图,以及每个变量的密度图以及变量之间的相关强度。

      如果您以前使用ggplot2过,则该符号可能看起来很熟悉:GGally是该符号的扩展,ggplot2它提供了一个简单的界面来创建一些其他复杂的图形,例如此图形。当我们查看这些图时,我们可以开始了解数据并提出问题。相关系数提供有关变量与关系之间的接近程度的信息;相关系数越接近1,则关系越强。散点图使我们可视化变量对之间的关​​系。点具有清晰视觉图案(而不是看起来像无形状的云)的散点图指示更强的关系。

      我们的问题:哪些预测变量似乎与响应变量相关?从ggpairs()输出看,围长显然与体积有关:相关系数接近1,并且各点似乎具有线性模式。高度和体积之间可能存在某种关系,但似乎关系较弱:相关系数较小,并且散点图中的点更分散。变量之间的关系的形状是什么?

      该关系似乎是线性的。从散点图可以看出,树的体积随着树长的增加而持续增加。是牢固的关系,还是数据中的噪声淹没了信号?高度和体积之间的关系还不清楚,但是周长和体积之间的关系似乎很牢固。现在,我们对数据有了全面的了解,我们可以继续进行第4步,并进行一些预测性建模。

      形成假设

      假设是关于我们认为数据正在发生什么的有根据的猜测。在这种情况下,让我们假设樱桃的周长和体积是相关的。我们形成的每个假设都有相反的含义:“零假设”(H 0)。在这里,我们的零假设是周长与体积无关。在统计中,零假设是我们使用数据来支持或拒绝的假设。我们永远不能说我们“证明”了一个假设。我们称周长和体积与假说相关的假说(H a)。总结:H 0:周长与体积H a之间没有关系:围长与体积之间存在某些关系。我们将使用线性回归模型来检验假设。如果我们找到足够有力的证据拒绝H 0,则可以使用该模型根据周长预测樱桃树的体积。

      线性回归模型的构建块

      线性回归描述了目标响应变量(或因变量)与一个或多个预测变量(或自变量)之间的关系。它有助于我们从噪声(无法从预测变量中获知响应变量)中分离出信号(我们可以从预测变量中获知响应变量)。我们将继续研究模型如何做到这一点。

      

    大数据分析如何使用线性回归进行预测建模

     

      让我们深入研究,并建立一个将树木体积与周长相关联的线性模型。R通过基本函数使这一过程变得简单lm()。

      

    大数据分析如何使用线性回归进行预测建模

     

      该lm()函数使一条线适合我们的数据,该线尽可能接近我们所有的31个观测值。更具体地说,它以使点和线之间的平方差之和最小的方式拟合线。这种方法被称为“最小化最小二乘”。即使线性回归模型很好地拟合数据,拟合也不是完美的。我们的观测值与其模型预测值之间的距离称为残差。

      

    大数据分析如何使用线性回归进行预测建模

     

      在数学上,我们可以写为线性回归为等式:ÿ听,说:β0 + β1 X + ε

      1)该ÿ和X变量是从我们的数据,我们正在与海誓山盟的响应和预测变量

      2)β0是代表模型截距或与y轴交叉的模型系数

      3)β1是代表模型斜率的模型系数,该数字是有关线的陡度及其方向(正或负)的信息

      4)ε是包含我们无法在模型中捕获的可变性的误差项(X不能告诉我们有关Y的信息)

      在我们的示例中:树体积≈ 截距 + 坡度(树长)+ 错误

      

    大数据分析如何使用线性回归进行预测建模

     

      该lm()函数估计它适合我们的数据的线性模型的截距和斜率系数。有了模型,我们可以继续进行第5步,请记住,我们仍然需要做一些工作来验证这种模型实际上适合于数据的想法。

      我们可以使用该模型进行预测吗?

      我们是否可以使用我们的模型进行预测取决于:

      1)是否可以拒绝变量之间没有关系的原假设。

      2)该模型是否适合我们的数据。

      让我们使用来调用模型的输出summary()。模型输出将为我们提供检验假设并评估模型与数据拟合程度所需的信息。

      

    大数据分析如何使用线性回归进行预测建模

     

      让我们遍历输出以回答每个问题。

      支持该假设吗?

      系数:估计和标准。错误:

      1)如果围长值为零,则本例中的截距是预期的树体积。当然,我们不能有一棵体积为负的树,但稍后会有更多。

      2)在我们的示例中,坡度是树木周长对树木体积的影响。我们看到,每增加一英寸的周长,树木的体积就会增加5.0659英尺3。

      3)系数标准误差告诉我们估计系数与响应变量的实际平均值的平均变化。

      t值:

      这是一项测试统计数据,用于测量估计系数从零开始有多少标准偏差。

      Pr(> | t |):

      该数字是p值,定义为在H 0为true时观察等于或大于t的任何值的概率。t统计量越大,p值越小。通常,我们使用0.05作为显着性的临界值;当p值小于0.05时,我们拒绝H 0。

      我们可以拒绝原假设,而相信树的宽度和体积之间存在某种关系。

      模型对数据的拟合程度如何?

      残留物:

      输出的这一部分为我们提供了残差的摘要(请记住,这是我们的观测值与模型之间的距离),这告诉我们有关模型如何拟合数据的一些信息。残差应该在零附近具有相当对称的分布。通常,我们正在寻找残差正态分布在零附近(即钟形曲线分布)的方法,但重要的是它们在视觉上没有明显的模式,这表明线性模型不适合数据。

      我们可以制作一个直方图以可视化ggplot2。

      

    大数据分析如何使用线性回归进行预测建模

     

      

    大数据分析如何使用线性回归进行预测建模

     

      我们的残差在0附近看起来很对称,这表明我们的模型很好地拟合了数据。残留标准误差:

      该术语表示我们的响应变量测量值偏离拟合线性模型的平均值(模型误差项)。

      自由度(DoF):

      关于自由度的讨论可能变得相当技术性。就大数据分析如何使用线性回归进行预测建模的目的而言,将它们视为用于计算估算值的独立信息的数量就足够了。自由度与测量次数有关,但不相同。

      多个R平方:

      的- [R 2值是我们的数据有多接近线性回归模型的度量。R 2值始终在0和1之间;接近1的数字表示拟合模型。随着模型中包含更多的变量,R 2始终会增加,因此包含调整后的R 2来说明用于创建模型的自变量的数量。

      F统计:

      该测试统计信息告诉我们正在测试的因变量和自变量之间是否存在关系。通常,大的F表示更强的关系。

      p值:

      此p值与F统计量相关联,用于解释整个模型与我们的数据拟合的显着性。

      让我们来看看适合我们的宽度和体积数据的模型。我们可以通过使用ggplot()线性模型拟合数据的散点图来做到这一点:

      

    大数据分析如何使用线性回归进行预测建模

     

      

    大数据分析如何使用线性回归进行预测建模

     

      线条周围的灰色阴影表示该stat_smooth()功能的默认置信区间为0.95,该置信区间使数据平滑以使图案更易于可视化。这个0.95的置信区间是所有黑樱桃树的周长和体积的真实线性模型位于拟合到我们的数据的回归模型的置信区间内的概率。尽管此模型非常适合我们的数据,但我们的观察结果仍然存在差异。

      这是因为世界通常是不整洁的。在我们的模型中,树木的体积不仅是树木的周长的函数,而且还包含我们不一定要量化的数据(树干形状之间的个体差异,林农的树干周长测量技术的微小差异)。有时,这种可变性掩盖了响应变量和预测变量之间可能存在的任何关系。但是在这里,我们数据中的信号足够强大,可以让我们开发一个有用的模型来进行预测。

      使用我们的简单线性模型进行预测

      我们的模型适合进行预测!各地的树木科学家欣喜若狂。假设我们有数据集之外的一棵树的周长,高度和体积数据。我们可以使用这棵树来测试我们的模型。

      

    大数据分析如何使用线性回归进行预测建模

     

      我们的模型根据树长预测树的体积效果如何?我们将使用该predict()函数,这是一个通用的R函数,用于根据模型拟合函数的模数进行预测。predict()以我们的线性回归模型和我们想要响应变量值的预测变量的值作为参数。

      

    大数据分析如何使用线性回归进行预测建模

     

      我们的体积预测为55.2 ft 3。这接近于我们的实际值,但是有可能在模型中增加高度(我们的其他预测变量)可以使我们做出更好的预测。

      添加更多预测变量:多元线性回归

      如果我们使用所有可用的信息(宽度和高度)来预测树的体积,也许可以提高模型的预测能力。从帖子开始的五步过程确实是一个迭代过程,这一点很重要–在现实世界中,您将获得一些数据,构建一个模型,根据需要调整模型以进行改进,然后添加更多数据并建立一个新模型,依此类推,直到您对结果感到满意和/或确信自己无法做得更好为止。我们可以建立两个单独的回归模型并对其进行评估,但是这种方法存在一些问题。首先,想象一下如果我们有5个,10个甚至50个预测变量,那将是多么麻烦。其次,两个预测模型将为我们提供两个单独的体积预测,而不是我们所追求的单个预测。也许最重要的是建立两个单独的模型并不能让我们在估计模型系数时考虑预测变量之间的关系。在我们的数据集中,我们怀疑基于我们的初步数据探索,树的高度和周长是否相关。正如我们将在大数据分析如何使用线性回归进行预测建模中更清楚地看到的那样,忽略预测变量之间的这种相关性可能导致有关其与树体积的关系的误导性结论。更好的解决方案是构建包含多个预测变量的线性模型。为此,我们可以为模型中的每个其他感兴趣的独立变量添加一个斜率系数。根据我们的初步数据探索,我们怀疑树的高度和周长是否相关。正如我们将在大数据分析如何使用线性回归进行预测建模中更清楚地看到的那样,忽略预测变量之间的这种相关性可能导致有关其与树体积的关系的误导性结论。更好的解决方案是构建包含多个预测变量的线性模型。为此,我们可以为模型中的每个其他感兴趣的独立变量添加一个斜率系数。根据我们的初步数据探索,我们怀疑树的高度和周长是否相关。正如我们将在大数据分析如何使用线性回归进行预测建模中更清楚地看到的那样,忽略预测变量之间的这种相关性可能导致有关其与树体积的关系的误导性结论。更好的解决方案是构建包含多个预测变量的线性模型。为此,我们可以为模型中的每个其他感兴趣的独立变量添加一个斜率系数。

      树体积≈ 截距 + SLOPE1(树周长)+ SLOPE2(树高度)+ 错误

      使用lm()函数很容易做到这一点:我们只需要添加其他预测变量即可。

      

    大数据分析如何使用线性回归进行预测建模

     

      从模型输出中可以看到,周长和高度都与体积显着相关,并且该模型很好地拟合了我们的数据。我们调整后的R 2值也略高于模型调整后的R 2fit_1。由于此模型中有两个预测变量,因此我们需要第三维来对其进行可视化。我们可以使用包创建一个漂亮的3d散点图scatterplot3d:首先,为预测变量(在数据范围内)创建值网​​格。该expand.grid()函数根据因子变量的所有组合创建一个数据框。

      

    大数据分析如何使用线性回归进行预测建模

     

      接下来,我们根据预测变量网格对体积进行预测:

      

    大数据分析如何使用线性回归进行预测建模

     

      现在,我们可以根据预测变量网格和预测体积制作3d散点图:

      

    大数据分析如何使用线性回归进行预测建模

     

      最后叠加我们的实际观察结果,以了解它们的适合程度:

      

    大数据分析如何使用线性回归进行预测建模

     

      让我们看看该模型如何预测树的体积。这次,由于我们的模型将Height用作预测变量,因此我们包括了树的高度:

      

    大数据分析如何使用线性回归进行预测建模

     

      这次,我们得到了52.13 ft 3的预测体积。与仅使用周长作为预测因子的简单模型所获得的预测相比,该预测更接近于我们的真实树体积,但是,正如我们将要看到的,我们可能能够进行改进。

      互动互动

      尽管我们进行了改进,但我们刚刚构建的模型仍然无法说明全部情况。假设树木的围长对体积的影响独立于树木的高度对体积的影响。显然不是这样,因为树的高度和周长是相关的。高大的树木往往更宽,我们的探索性数据可视化结果也表明了这一点。换句话说,周长的斜率应随高度的斜率增加而增加。为了解决模型中预测变量的这种非独立性,我们可以指定一个交互项,该项被计算为预测变量的乘积。

      树体积≈ 截距 + SLOPE1(树周长)+ SLOPE2(树高度)+ SLOPE3(树周长X树高度)+ 错误

      再一次,使用lm()以下命令构建此模型很容易:

      

    大数据分析如何使用线性回归进行预测建模

     

      请注意,在我们的模型中,“周长*高度”是“周长+高度+周长*高度”的简写。

      

    大数据分析如何使用线性回归进行预测建模

     

      正如我们所怀疑的,周长和高度的相互作用很明显,这表明我们应该在用于预测树木体积的模型中包括相互作用项。调整后的R 2值接近1,F的大值和p的小值也支持此决策,这表明我们的模型非常适合数据。让我们看一下散点图,以可视化使用此模型的树木体积的预测值。我们可以使用为fit_2可视化生成的相同的预测值网格:

      

    大数据分析如何使用线性回归进行预测建模

     

      类似于我们如何可视化fit_2模型,我们将使用fit_3带有交互项的模型从预测变量的网格中预测体积值:

      

    大数据分析如何使用线性回归进行预测建模

     

      现在,我们绘制预测变量网格和预测体积的散点图:

      

    大数据分析如何使用线性回归进行预测建模

     

      最后,我们叠加观察到的数据:

      

    大数据分析如何使用线性回归进行预测建模

     

      在这张图片中很难看到,但是这次我们的预测是在某个曲面而不是平面上进行的。现在,关键时刻:让我们使用此模型来预测树的体积。

      

    大数据分析如何使用线性回归进行预测建模

     

      使用该第三种模型的预测值是45.89,最接近我们的真实值46.2 ft 3。

      有关预测模型的一些注意事项

      记住您的数据范围

      使用模型进行预测时,最好避免尝试外推到远远超出用于构建模型的值范围。为了说明这一点,让我们尝试估计一棵小树苗(一棵幼树)的体积:

      

    大数据分析如何使用线性回归进行预测建模

     

      我们得到的预测体积为62.88 ft 3,比数据集中的高大树木更大。当然,这没有意义。请记住,我们进行准确预测的能力受到我们用于构建模型的数据范围的限制。

      避免建立过于针对您的数据集的模型

      在大数据分析如何使用线性回归进行预测建模中我们研究的简单示例数据集中,向模型添加第二个变量似乎可以提高我们的预测能力。但是,当尝试使用具有多个差异变量的多种多元线性回归模型时,选择最佳模型变得更具挑战性。如果添加了太多不能改善模型预测能力的术语,我们将冒着使模型过度“适应”特定数据集的风险。

      过度适合特定数据集的模型失去了预测未来事件或拟合不同数据集的功能,因此并不是十分有用。虽然我们在大数据分析如何使用线性回归进行预测建模中用于评估模型有效性的方法(调整后的R 2,残差分布)对于了解模型对数据的拟合程度很有用,但将模型应用于数据集的不同子集可以提供有关模型将如何拟合的信息在实践中表现。

      这种称为“交叉验证”的方法通常用于测试预测模型。在我们的示例中,我们使用了三个模型中的每个模型来预测单个树的数量。但是,如果我们要构建更复杂的模型,则需要撤消部分数据以进行交叉验证。

      下一步

      我们使用线性回归来构建用于根据两个连续预测变量来预测连续响应变量的模型,但是线性回归对于许多其他常见场景是有用的预测建模工具。

      下一步,尝试建立线性回归模型,以从两个以上的预测变量中预测响应变量。考虑一下您如何决定将哪些变量包括在回归模型中;您如何分辨哪些是重要的预测指标?预测变量之间的关系如何影响该决策?

      数据组中的R是用于在多个线性回归问题的工作有用包括:airquality,iris,和mtcars。根据数据构建模型的另一个重要概念是,使用从现有预测变量中计算出的新预测变量来扩充数据。这称为功能工程,在这里您可以使用自己的专家知识来了解与该问题有关的其他方面。

      例如,如果您正在查看将时间戳记作为变量之一的银行交易数据库,则一周中的某天可能与您要回答的问题有关,因此您可以从时间戳记中进行计算并将其添加作为新变量添加到数据库中。这是一个复杂的主题,添加更多的预测变量并不总是一个好主意,但是在学习更多有关建模的知识时,您应该牢记这一点。在大数据分析如何使用线性回归进行预测建模中使用的树木数据集中,您能想到可以从周长和高度计算出的任何其他量来帮助您预测体积吗?(提示:回想一下当您学习各种几何形状的体积的公式时,请考虑一棵树的样子。)

      最后,尽管我们专注于连续数据,但线性回归也可以扩展以根据类别变量做出预测。尝试使用线性回归模型来预测分类变量和连续预测变量的响应变量。有迹象表明,借给自己特别好这个练习几个数据集R: ,ToothGrowth,PlantGrowth和npk。

     

    摘自:https://www.aaa-cg.com.cn/data/2706.html

    展开全文
  • 数据分析如何使用线性回归进行预测建模?在R编程中,预测模型对于预测将来的结果和估计不可行的度量非常有用。例如,数据科学家可以使用预测模型根据降雨和温度来预测农作物产量,或者确定具有某些性状的患者对新药...

    867ed0a99d661374c518283f12dcac01.png

    大数据分析如何使用线性回归进行预测建模?在R编程中,预测模型对于预测将来的结果和估计不可行的度量非常有用。例如,数据科学家可以使用预测模型根据降雨和温度来预测农作物产量,或者确定具有某些性状的患者对新药的不良反应是否更可能。

      在我们专门讨论线性回归之前,让我们提醒自己一个典型的数据科学工作流程是什么样的。很多时候,我们会从一个要回答的问题开始,然后执行以下操作:

      1)收集一些与问题相关的数据(越多越好)。

      2)如果需要,将数据清理,扩充和预处理为方便的形式。

      3)对数据进行探索性分析,以更好地了解数据。

      4)使用您发现的内容作为指南,构建数据某些方面的模型。

      5)使用模型来回答您开始的问题,并验证结果。

      线性回归是数据科学家用于预测建模的最简单,最常见的监督式机器学习算法之一。在这篇文章中,我们将使用线性回归来构建一个模型,该模型根据度量标准来预测樱花树的数量,这对于研究树木的人们来说更容易测量。

      在大数据分析如何使用线性回归进行预测建模文章中,我们将使用R来探索该数据集并学习线性回归的基础。如果您不熟悉R语言,我们建议您使用R Data Analyst路径学习R基础知识和R编程:中级课程。掌握一些非常基础的统计知识也将有所帮助,但是如果您知道平均数和标准差是多少,您将可以继续进行。如果您想练习自己构建模型和可视化,我们将使用以下R包:

      1)data sets该软件包包含各种实践数据集。我们将使用其中的一种“树”来学习构建线性回归模型。

      2)ggplot2 我们将使用这个流行的数据可视化软件包来构建模型图。

      3)GGally该软件包扩展了的功能ggplot2。作为初始探索性​​数据可视化的一部分,我们将使用它来创建绘图矩阵。

      4)scatterplot3d 我们将使用此软件包来可视化具有多个预测变量的更复杂的线性回归模型。

      无论如何,他们如何测量树木的体积?

      该树的数据集包括在基础R的datasets包,它会帮助我们回答这个问题。由于我们正在使用现有的(干净的)数据集,因此上面的步骤1和2已经完成,因此我们可以直接跳到步骤3中的一些初步探索性分析。

    8d9f67c28708fcfbb16811e7ace3d5c9.png

      该数据集包含3个描述黑樱桃树的数字变量的31个观察值:

      1)躯干围长(英寸)

      2)高度(英尺)

      3)体积(英尺3)

      这些指标对于研究树木生态学的林务员和科学家是有用的信息。使用基本的林业工具来测量树木的高度和周长是相当简单的,但是测量树木的体积要困难得多。如果您不想真正砍伐和拆除树木,则必须采取一些技术上具有挑战性且耗时的活动,例如爬树和进行精确的测量。能够根据高度和/或周长准确预测树木的体积将很有用。

    b78c867d5414927346c3bf4d8f87dd5b.png

      为了确定我们是否可以建立预测模型,第一步是查看预测变量和响应变量(在这种情况下,周长,高度和体积)之间是否存在关系。让我们进行一些探索性的数据可视化。我们将使用包中的ggpairs()函数GGally创建一个绘图矩阵,以查看变量之间的关系。

    39a72b19fcf1bc5a169030e5b75d9229.png

    70047e17a5285cc3ca5eee6a8d824dcf.png

      该ggpairs()函数为我们提供了每个变量组合的散点图,以及每个变量的密度图以及变量之间的相关强度。

      如果您以前使用ggplot2过,则该符号可能看起来很熟悉:GGally是该符号的扩展,ggplot2它提供了一个简单的界面来创建一些其他复杂的图形,例如此图形。当我们查看这些图时,我们可以开始了解数据并提出问题。相关系数提供有关变量与关系之间的接近程度的信息;相关系数越接近1,则关系越强。散点图使我们可视化变量对之间的关​​系。点具有清晰视觉图案(而不是看起来像无形状的云)的散点图指示更强的关系。

      我们的问题:哪些预测变量似乎与响应变量相关?从ggpairs()输出看,围长显然与体积有关:相关系数接近1,并且各点似乎具有线性模式。高度和体积之间可能存在某种关系,但似乎关系较弱:相关系数较小,并且散点图中的点更分散。变量之间的关系的形状是什么?

      该关系似乎是线性的。从散点图可以看出,树的体积随着树长的增加而持续增加。是牢固的关系,还是数据中的噪声淹没了信号?高度和体积之间的关系还不清楚,但是周长和体积之间的关系似乎很牢固。现在,我们对数据有了全面的了解,我们可以继续进行第4步,并进行一些预测性建模。

      形成假设

      假设是关于我们认为数据正在发生什么的有根据的猜测。在这种情况下,让我们假设樱桃的周长和体积是相关的。我们形成的每个假设都有相反的含义:“零假设”(H 0)。在这里,我们的零假设是周长与体积无关。在统计中,零假设是我们使用数据来支持或拒绝的假设。我们永远不能说我们“证明”了一个假设。我们称周长和体积与假说相关的假说(H a)。总结:H 0:周长与体积H a之间没有关系:围长与体积之间存在某些关系。我们将使用线性回归模型来检验假设。如果我们找到足够有力的证据拒绝H 0,则可以使用该模型根据周长预测樱桃树的体积。

      线性回归模型的构建块

      线性回归描述了目标响应变量(或因变量)与一个或多个预测变量(或自变量)之间的关系。它有助于我们从噪声(无法从预测变量中获知响应变量)中分离出信号(我们可以从预测变量中获知响应变量)。我们将继续研究模型如何做到这一点。

    8ea2519f104c60c79b15d13f856a88e6.png

      让我们深入研究,并建立一个将树木体积与周长相关联的线性模型。R通过基本函数使这一过程变得简单lm()。

    023932abf3084bb903cd7d644c609116.png

      该lm()函数使一条线适合我们的数据,该线尽可能接近我们所有的31个观测值。更具体地说,它以使点和线之间的平方差之和最小的方式拟合线。这种方法被称为“最小化最小二乘”。即使线性回归模型很好地拟合数据,拟合也不是完美的。我们的观测值与其模型预测值之间的距离称为残差。

    6b65db4983aff6cc0d6b1a6af5ede69e.png

      在数学上,我们可以写为线性回归为等式:ÿ听,说:β0 + β1 X + ε

      1)该ÿ和X变量是从我们的数据,我们正在与海誓山盟的响应和预测变量

      2)β0是代表模型截距或与y轴交叉的模型系数

      3)β1是代表模型斜率的模型系数,该数字是有关线的陡度及其方向(正或负)的信息

      4)ε是包含我们无法在模型中捕获的可变性的误差项(X不能告诉我们有关Y的信息)

      在我们的示例中:树体积≈ 截距 + 坡度(树长)+ 错误

    83ca1dcca8d3425baf91f9fd7c39e600.png

      该lm()函数估计它适合我们的数据的线性模型的截距和斜率系数。有了模型,我们可以继续进行第5步,请记住,我们仍然需要做一些工作来验证这种模型实际上适合于数据的想法。

      我们可以使用该模型进行预测吗?

      我们是否可以使用我们的模型进行预测取决于:

      1)是否可以拒绝变量之间没有关系的原假设。

      2)该模型是否适合我们的数据。

      让我们使用来调用模型的输出summary()。模型输出将为我们提供检验假设并评估模型与数据拟合程度所需的信息。

    106e11ba9c739d7c4ca8d42af9128480.png

      让我们遍历输出以回答每个问题。

      支持该假设吗?

      系数:估计和标准。错误:

      1)如果围长值为零,则本例中的截距是预期的树体积。当然,我们不能有一棵体积为负的树,但稍后会有更多。

      2)在我们的示例中,坡度是树木周长对树木体积的影响。我们看到,每增加一英寸的周长,树木的体积就会增加5.0659英尺3。

      3)系数标准误差告诉我们估计系数与响应变量的实际平均值的平均变化。

      t值:

      这是一项测试统计数据,用于测量估计系数从零开始有多少标准偏差。

      Pr(> | t |):

      该数字是p值,定义为在H 0为true时观察等于或大于t的任何值的概率。t统计量越大,p值越小。通常,我们使用0.05作为显着性的临界值;当p值小于0.05时,我们拒绝H 0。

      我们可以拒绝原假设,而相信树的宽度和体积之间存在某种关系。

      模型对数据的拟合程度如何?

      残留物:

      输出的这一部分为我们提供了残差的摘要(请记住,这是我们的观测值与模型之间的距离),这告诉我们有关模型如何拟合数据的一些信息。残差应该在零附近具有相当对称的分布。通常,我们正在寻找残差正态分布在零附近(即钟形曲线分布)的方法,但重要的是它们在视觉上没有明显的模式,这表明线性模型不适合数据。

      我们可以制作一个直方图以可视化ggplot2。

    985dc5ba9df90a1970dc3301a2141835.png

    cbb4ad296e936865bef0c3cdd0fcc2d3.png

      我们的残差在0附近看起来很对称,这表明我们的模型很好地拟合了数据。残留标准误差:

      该术语表示我们的响应变量测量值偏离拟合线性模型的平均值(模型误差项)。

      自由度(DoF):

      关于自由度的讨论可能变得相当技术性。就大数据分析如何使用线性回归进行预测建模的目的而言,将它们视为用于计算估算值的独立信息的数量就足够了。自由度与测量次数有关,但不相同。

      多个R平方:

      的- [R 2值是我们的数据有多接近线性回归模型的度量。R 2值始终在0和1之间;接近1的数字表示拟合模型。随着模型中包含更多的变量,R 2始终会增加,因此包含调整后的R 2来说明用于创建模型的自变量的数量。

      F统计:

      该测试统计信息告诉我们正在测试的因变量和自变量之间是否存在关系。通常,大的F表示更强的关系。

      p值:

      此p值与F统计量相关联,用于解释整个模型与我们的数据拟合的显着性。

      让我们来看看适合我们的宽度和体积数据的模型。我们可以通过使用ggplot()线性模型拟合数据的散点图来做到这一点:

    0a2c34337459cd4a045afd158b4f4dc6.png

    8aecda503e61807f52451e03e618fb45.png

      线条周围的灰色阴影表示该stat_smooth()功能的默认置信区间为0.95,该置信区间使数据平滑以使图案更易于可视化。这个0.95的置信区间是所有黑樱桃树的周长和体积的真实线性模型位于拟合到我们的数据的回归模型的置信区间内的概率。尽管此模型非常适合我们的数据,但我们的观察结果仍然存在差异。

      这是因为世界通常是不整洁的。在我们的模型中,树木的体积不仅是树木的周长的函数,而且还包含我们不一定要量化的数据(树干形状之间的个体差异,林农的树干周长测量技术的微小差异)。有时,这种可变性掩盖了响应变量和预测变量之间可能存在的任何关系。但是在这里,我们数据中的信号足够强大,可以让我们开发一个有用的模型来进行预测。

      使用我们的简单线性模型进行预测

      我们的模型适合进行预测!各地的树木科学家欣喜若狂。假设我们有数据集之外的一棵树的周长,高度和体积数据。我们可以使用这棵树来测试我们的模型。

    aae05b4981cab54ef17a3bf7b96e516a.png

      我们的模型根据树长预测树的体积效果如何?我们将使用该predict()函数,这是一个通用的R函数,用于根据模型拟合函数的模数进行预测。predict()以我们的线性回归模型和我们想要响应变量值的预测变量的值作为参数。

    53cb1c8a7213902b8e97c31ece0ce30c.png

      我们的体积预测为55.2 ft 3。这接近于我们的实际值,但是有可能在模型中增加高度(我们的其他预测变量)可以使我们做出更好的预测。

      添加更多预测变量:多元线性回归

      如果我们使用所有可用的信息(宽度和高度)来预测树的体积,也许可以提高模型的预测能力。从帖子开始的五步过程确实是一个迭代过程,这一点很重要–在现实世界中,您将获得一些数据,构建一个模型,根据需要调整模型以进行改进,然后添加更多数据并建立一个新模型,依此类推,直到您对结果感到满意和/或确信自己无法做得更好为止。我们可以建立两个单独的回归模型并对其进行评估,但是这种方法存在一些问题。首先,想象一下如果我们有5个,10个甚至50个预测变量,那将是多么麻烦。其次,两个预测模型将为我们提供两个单独的体积预测,而不是我们所追求的单个预测。也许最重要的是建立两个单独的模型并不能让我们在估计模型系数时考虑预测变量之间的关系。在我们的数据集中,我们怀疑基于我们的初步数据探索,树的高度和周长是否相关。正如我们将在大数据分析如何使用线性回归进行预测建模中更清楚地看到的那样,忽略预测变量之间的这种相关性可能导致有关其与树体积的关系的误导性结论。更好的解决方案是构建包含多个预测变量的线性模型。为此,我们可以为模型中的每个其他感兴趣的独立变量添加一个斜率系数。根据我们的初步数据探索,我们怀疑树的高度和周长是否相关。正如我们将在大数据分析如何使用线性回归进行预测建模中更清楚地看到的那样,忽略预测变量之间的这种相关性可能导致有关其与树体积的关系的误导性结论。更好的解决方案是构建包含多个预测变量的线性模型。为此,我们可以为模型中的每个其他感兴趣的独立变量添加一个斜率系数。根据我们的初步数据探索,我们怀疑树的高度和周长是否相关。正如我们将在大数据分析如何使用线性回归进行预测建模中更清楚地看到的那样,忽略预测变量之间的这种相关性可能导致有关其与树体积的关系的误导性结论。更好的解决方案是构建包含多个预测变量的线性模型。为此,我们可以为模型中的每个其他感兴趣的独立变量添加一个斜率系数。

      树体积≈ 截距 + SLOPE1(树周长)+ SLOPE2(树高度)+ 错误

      使用lm()函数很容易做到这一点:我们只需要添加其他预测变量即可。

    dfdf340fbd522da9b9f58ddae0f2fadd.png

      从模型输出中可以看到,周长和高度都与体积显着相关,并且该模型很好地拟合了我们的数据。我们调整后的R 2值也略高于模型调整后的R 2fit_1。由于此模型中有两个预测变量,因此我们需要第三维来对其进行可视化。我们可以使用包创建一个漂亮的3d散点图scatterplot3d:首先,为预测变量(在数据范围内)创建值网​​格。该expand.grid()函数根据因子变量的所有组合创建一个数据框。

    618674fd03fe7720f585ef8a4dfba3fd.png

      接下来,我们根据预测变量网格对体积进行预测:

    f9e1cc50aa634221374bc737cada7f80.png

      现在,我们可以根据预测变量网格和预测体积制作3d散点图:

    47d4fca11213318a46611cb7287f6987.png

      最后叠加我们的实际观察结果,以了解它们的适合程度:

    8395b2c3beb58ec65f51c42c39b6a836.png

      让我们看看该模型如何预测树的体积。这次,由于我们的模型将Height用作预测变量,因此我们包括了树的高度:

    b507e6c9cfcedb56ed390afb800f3dd6.png

      这次,我们得到了52.13 ft 3的预测体积。与仅使用周长作为预测因子的简单模型所获得的预测相比,该预测更接近于我们的真实树体积,但是,正如我们将要看到的,我们可能能够进行改进。

      互动互动

      尽管我们进行了改进,但我们刚刚构建的模型仍然无法说明全部情况。假设树木的围长对体积的影响独立于树木的高度对体积的影响。显然不是这样,因为树的高度和周长是相关的。高大的树木往往更宽,我们的探索性数据可视化结果也表明了这一点。换句话说,周长的斜率应随高度的斜率增加而增加。为了解决模型中预测变量的这种非独立性,我们可以指定一个交互项,该项被计算为预测变量的乘积。

      树体积≈ 截距 + SLOPE1(树周长)+ SLOPE2(树高度)+ SLOPE3(树周长X树高度)+ 错误

      再一次,使用lm()以下命令构建此模型很容易:

    9442bd4f279d94a7f3d0144f9893c592.png

      请注意,在我们的模型中,“周长*高度”是“周长+高度+周长*高度”的简写。

    4564c931c9d73091589d18ca1f11bc4c.png

      正如我们所怀疑的,周长和高度的相互作用很明显,这表明我们应该在用于预测树木体积的模型中包括相互作用项。调整后的R 2值接近1,F的大值和p的小值也支持此决策,这表明我们的模型非常适合数据。让我们看一下散点图,以可视化使用此模型的树木体积的预测值。我们可以使用为fit_2可视化生成的相同的预测值网格:

    925d4deadb9a2ff32442a07a8deaa90a.png

      类似于我们如何可视化fit_2模型,我们将使用fit_3带有交互项的模型从预测变量的网格中预测体积值:

    a71e3bb7079640aa43842ed5b6dcdc58.png

      现在,我们绘制预测变量网格和预测体积的散点图:

    0ae14a880fd444b67b844db458cc4a8c.png

      最后,我们叠加观察到的数据:

    19b748348c9a11014f2f977c63b203b1.png

      在这张图片中很难看到,但是这次我们的预测是在某个曲面而不是平面上进行的。现在,关键时刻:让我们使用此模型来预测树的体积。

    bb6721fd28abaaf2a68cb02125389f30.png

      使用该第三种模型的预测值是45.89,最接近我们的真实值46.2 ft 3。

      有关预测模型的一些注意事项

      记住您的数据范围

      使用模型进行预测时,最好避免尝试外推到远远超出用于构建模型的值范围。为了说明这一点,让我们尝试估计一棵小树苗(一棵幼树)的体积:

    d95a9e404c7a53bf8673b0bdc670f13b.png

      我们得到的预测体积为62.88 ft 3,比数据集中的高大树木更大。当然,这没有意义。请记住,我们进行准确预测的能力受到我们用于构建模型的数据范围的限制。

      避免建立过于针对您的数据集的模型

      在大数据分析如何使用线性回归进行预测建模中我们研究的简单示例数据集中,向模型添加第二个变量似乎可以提高我们的预测能力。但是,当尝试使用具有多个差异变量的多种多元线性回归模型时,选择最佳模型变得更具挑战性。如果添加了太多不能改善模型预测能力的术语,我们将冒着使模型过度“适应”特定数据集的风险。

      过度适合特定数据集的模型失去了预测未来事件或拟合不同数据集的功能,因此并不是十分有用。虽然我们在大数据分析如何使用线性回归进行预测建模中用于评估模型有效性的方法(调整后的R 2,残差分布)对于了解模型对数据的拟合程度很有用,但将模型应用于数据集的不同子集可以提供有关模型将如何拟合的信息在实践中表现。

      这种称为“交叉验证”的方法通常用于测试预测模型。在我们的示例中,我们使用了三个模型中的每个模型来预测单个树的数量。但是,如果我们要构建更复杂的模型,则需要撤消部分数据以进行交叉验证。

      下一步

      我们使用线性回归来构建用于根据两个连续预测变量来预测连续响应变量的模型,但是线性回归对于许多其他常见场景是有用的预测建模工具。

      下一步,尝试建立线性回归模型,以从两个以上的预测变量中预测响应变量。考虑一下您如何决定将哪些变量包括在回归模型中;您如何分辨哪些是重要的预测指标?预测变量之间的关系如何影响该决策?

      数据组中的R是用于在多个线性回归问题的工作有用包括:airquality,iris,和mtcars。根据数据构建模型的另一个重要概念是,使用从现有预测变量中计算出的新预测变量来扩充数据。这称为功能工程,在这里您可以使用自己的专家知识来了解与该问题有关的其他方面。

      例如,如果您正在查看将时间戳记作为变量之一的银行交易数据库,则一周中的某天可能与您要回答的问题有关,因此您可以从时间戳记中进行计算并将其添加作为新变量添加到数据库中。这是一个复杂的主题,添加更多的预测变量并不总是一个好主意,但是在学习更多有关建模的知识时,您应该牢记这一点。在大数据分析如何使用线性回归进行预测建模中使用的树木数据集中,您能想到可以从周长和高度计算出的任何其他量来帮助您预测体积吗?(提示:回想一下当您学习各种几何形状的体积的公式时,请考虑一棵树的样子。)

      最后,尽管我们专注于连续数据,但线性回归也可以扩展以根据类别变量做出预测。尝试使用线性回归模型来预测分类变量和连续预测变量的响应变量。有迹象表明,借给自己特别好这个练习几个数据集R: ,ToothGrowth,PlantGrowth和npk。

    相关推荐

    IT互联网职业培训:大数据分析SQL数据库链接教程zhuanlan.zhihu.com
    c246a085bb67815697414de3c682b2b5.png
    IT互联网职业培训:大数据分析python利用if else控制代码流教程zhuanlan.zhihu.com
    fda939d97723fd7b4a74b36d2fe8fe1c.png
    IT互联网职业培训:大数据分析Python内置函数range使用教程zhuanlan.zhihu.com
    d2b8b5c89df2e13c58b776b3003e80ef.png
    展开全文
  • 话说,大家在谈Google如何,回到座位又继续撸测试用例的时候,那些熟悉的数据准备动作、校验动作,然后是断言动作,有没有人想吐的感觉! 我10年的时候,干了一件现在看来不靠谱的事情,就是把一个模块的代码...

    缘起

    话说,程序员的成效是否是一个重要的话题?谁应该关心?是度量程序员的管理者还是程序员自己?

    话说,大家在大谈Google如何,回到座位又继续撸测试用例的时候,那些熟悉的数据准备动作、校验动作,然后是断言动作,有没有让人想吐的感觉!

    我10年的时候,干了一件现在看来不靠谱的事情,就是把一个模块的代码测试覆盖率撸到了80%,接手的时候是30%的样子。为了撸,我让其中一位研发同学只补测试,补了一周。有人说了,单纯追求覆盖率是不对的,诚然!我在11年还整理过一个内部文档,如何做单元测试,不能为了测试而测试。但在哪个历史时期,我还是做了【正确】的选择,如果是一个拖了整个系统后退的模块owner,有何面目谈质量!!!

    我在质量系列文章中不经意有装X嫌疑,高大威猛;其实谁没有不堪回首的过去,那些血淋淋的过往需要回首对视呢?

    大话软件质量稳定性

    念念不忘,或有回响。

    卓有成效的程序员

    卓越成效的程序员】是若干程序员系列书籍我比较喜欢的一本,类似的还有卓越程序员密码【The Developer's Code】等。【卓越成效的程序员】高明之处是不仅仅给出原则,还大谈工具和代码,这如同诸多鸡汤文在【布道】的层面之下【实战】干货,可操作性强。这2天,重温了一下这本书给出的诸多原则,有些体会姑妄言之。

    四大原则

    四大原则是加速原则、专注原则、自动化原则和规范性原则。

    • 加速法则

    加速法则,就是能加快我们工作的一切的东西。

    • Launchy 加载器,http://launchy.net/download.php#windows

    • 比如系统启动,最近一位同事做了一个热部署插件,解决容器在自测中启动的成本消耗。

    • 比如记住IDE快捷键

    • 专注法则

    工作当中,专注可以很大的提高工作效率。

    • 排除干扰,隔离(带耳机、如设定专注编码时间段)

    • 关掉不必要的提示

    • 搜索优于导航,比如我想找一篇资料

      搜索可以使用本地搜索,比如google桌面搜索。

    • 自动化法则

    自动化法则是把能自动化的一切都自动化掉

    • 不要重复发明轮子(轮子太多,乱花迷眼是又一话题;追求新轮子,又是技术人贪嗔痴的表现之一,热爱技术但忘掉了要解决的问题域)

    • 建立本地缓存

    • 使用RSS订阅我们需要的信息

    • 构建工具

    • 用Rake执行常见任务

    ps:最近望神搞了一个eclipse插件解决了看起来很简单的一个问题,就是配置环境init。在一个新的space中load 配置,可以拥有你想要的java、maven、junit、checkStyle等一系列设置的内容。当然从频度来说,这属于低频,但仍然可以自动化掉。越高频的行为越应该优先实现自动化。

     关于发明轮子,有另外一个观点,就是基于提升技能的目的。不妨去做一下,对于问题域会有更深入的理解。

    • 规范性法则

    规范很重要,这个可以减少不一致

    • 使用版本控制

    • 使用标准的构建服务器

    • 数据迁移,Ruby on rails里的Migration就很赞

    • 关于文档:错误的文档很糟,尽量生成所有的技术文档

    • 数据库结构 SchemaSpy可以生成数据关系图;开源的starUML可以生成类图结构

    • 减少重复,重复是软件开发中最大的阻力

    关于文档的问题

    关于要不要文档,文档写多少?

    张逸老师如是说【文档方面目前个人觉得靠谱的做法是整理成思维树,标注定义,关键描述,关键词,关联词,详细文档link。对新人来讲更容易找到切入点,快速了解项目或系统全貌,已经可能与自己未来工作相关的上下文(内涵,外延)是什么。传统的文档管理方式往往使新人在浩如烟海的文档中迷失

    孙老师提出:负责业务层的同学必须同步文档,否则会遭到移动客户端两个组前端用户层,开放商家层,内部管理层的投诉。我们最近就吃过这亏,有一个服务器同学写了一个接口文档,大概是一个参数,他定义的时候说的给的是 bool,但是没给事例,结果 ios 用的 YES 传的,安卓用的是 true,把 ios 的 YES 翻译过来就是 1 在判断的时候 1 和 true 是不相等的,因为类型都不一样,服务器的人和安卓对接完以为就 ok 了,结果上线了才发现有这个问题。

    我的浅见:

    • 关于文档,项目研发过程中的关键文档需要保留和管理,比如需求和系分文档。这些是逐步堆积的过程中文档。

    • 一个系统/平台,需要有core文档,比如领域模型、主体架构等,由于这部分文档更新并不频繁,可以定期维护。

    • 用例即文档,验收测试及接口测试等保持稳定,是研究细节和用户场景的入手点。

    • 活文档:接口文档通过接口声明生成,接口声明对于每个参数都会有说明。批量接口,会给出数据量的limit,代码中也会进行防御;采用Swagger,在Swagger Editor中,我们可以基于YAML语法定义我们的RESTful API,然后它会自动生成一篇排版优美的API文档,API修改之后,API文档会随之而修改。

    关于YAGNI

    YAGNI(“You Ain’t Gonna Need it”)

    你不会需要它,如无必要,勿增复杂度。

    根据Cunningham & Cunningham的wiki页面所说:

    即使你非常确信将来你需要某个特性,也不要现在就去实现它。在很多情况下,你会发现或许最终你不需要它了,或者是你真正所需的特性与你之前预计的有很大的出入。遵循YAGNI实践有两个主要原因:

    • 你节约了时间,因为你避免了编写最终证明不必要的代码。

    • 你的代码质量更高了,因为你使代码不必为你的“推测”所污染,而这些“推测”最终可能或多或少有些错误,但此时这些错误已牢牢地依附在你的代码中了。

    Martin Fowler进一步表示,当我们在考虑推定特性时,很有可能我们是错的。在这种情况下,推定特性一个很明显的成本就是整个构建过程的成本,也就是对这个在当下没有用处的特性进行分析、编码以及测试所耗费的精力。他同时表示,假设我们对这个需求的理解恰好是正确的,但即使在这种比较理想的情况下,创建这个推定特性同样会带来两种巨大的成本。第一种成本是软件价值的延误成本,第二种成本是延续这一特性所带来的成本。

    from http://www.infoq.com/cn/news/2015/06/yagni

    关于YAGNI的思辨

    如果对一个问题有2个解决方案,明明第二个解决方案更好【扩展性增强】,而实现成本相差无几,难道我要墨守此原则吗?

    以我们团队的2个case来说明这个问题。第一个case是去年接到一个钱包积分的需求,经过分析,我们的设计不仅仅实现钱包积分,而是实现了商户通用积分的生命周期管理。因为后者有扩展性,并从业务嗅觉上依稀感受到未来或许有这样开放的必要。经过评估,实现成本没有增加太多,我们就果断采取了商户通用积分的实现方案。过了1年,果然,类似的需求来了...

    第二个case,我们在14年底规划了一个券平台,解决此前各种红包、优惠类业务的烟囱架构的问题。这个平台的提出是基于若干需求背后的核心领域抽象,在8、9年前做红包系统的时候,是万不能想到的。也就是说对于问题域的本质认知,随着业务发展而发展,延迟设计决策是非常重要的,而把握这个度很难,没搞好,新装修的房屋不到2年就能翻新。

    结论:YAGNI并非不做预设计,而是在成本、复杂度之间做权衡。光聪奉英杰为师,对于英杰非常崇拜。曾向我表示,英杰师关于YAGNI的观点与我有些近似。如果未来一个预期中的变化发生,而要付出的成本可能很大,我们眼前需要建立一些机制(比如抽象、约束)应对它。注意,只是建立机制,实现层面仍然按当前刚刚好的功能实现,除非你找到额外复杂度非常小的方案能把预期的变化也覆盖了,那么just do it!

    定期检查阻碍,运用四大法则

    如果说技术债是背在身上的猴子,总有一天会压得你喘不过气来;那么自发的提升研发过程的效能就是更好的追求。发挥程序员的三大美德,轻装上阵,让工作变得不一样。我们采取的是团队自发定期组织各种小沙龙,发现行径中的阻碍的模式,最近的一次沙龙收到10余条issue。比如下面这一条

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    分享者简介:

    于君泽,花名右军,蚂蚁金服成都研发中心技术团队创建者之一,先后负责或参与过转账业务、账单类业务、社区支付、开发平台、支付平台、资金核算平台、类营销类支付工具的建设;之前有数年电信业务研发经验,设计BSS | OSS | 针对性营销等平台。

    本文转载自微信公众号 中生代技术 freshmanTechnology
    展开全文
  • 如何3分钟算出一家创业公司的估值

    千次阅读 2014-09-01 18:36:28
    你会如何度量一个公司的价值?更进一步说,如果这个公司是你在一个月之前创立的—你如何判断初创公司的价值?在你为公司筹集资金的时候,这就是你会问自己的问题。 我们从基础的东西看起。估值也就是公司的价值。...
  • ​这个世界最大的不变就是时刻都在变化。...如果在不需要数据科技家学位的情况下,你可以自己钻研你的数据又会如何呢?自助 BI 背后的技术是面向没有数据科学或数据库方面特殊知识的业务用户的。一
  • 前任度量让自己很烦躁,完全不能理解为什么不能大度量。前任企业邮箱有着一样的毛病,容量太小根本满足不了收发信,频繁需要删除邮件真是让人头 邮件延迟 前任约会每次迟到也是槽点满满,好像每个吐槽前任的都会...
  • OO第二次博客总结

    2018-05-02 13:40:00
     分析:这次作业的主要问题是对电梯请求如何分配给三部电梯,他们能够同时工作且不出现问题。这其中涉及到了关于线程安全,数据同步的问题。  但由于这是多线程的第一次作业,自己以前对多线程没有一点概念,做...
  • 只是知道需要对部门需求的管理流程进行优化,而优化到什么程度才能领导满意,如何度量是一个极的问题。 另外,抛开部门的环境不谈,单纯就流程改革来说是不难的, 提一些建议,优化措施这很轻松,可是这样即...
  • 软件工程解决的是面对尤其复杂软件时如何通过系统化的、规范的、可度量的方法控制软件过程,整体可控,从而保障工程师对软件的全局认知以及解决问题的有效性。在应用比较小或初期时一般没区别,当应用及组织变的...
  • 我们迅速提供了大量标准度量标准,以及在我们无法完全满足您的需求时用于编写您自己的自定义度量标准的选项。 了解提供的图使您可以查看代码的连接方式(依赖关系),代码的流向(控制流程图),哪些函数调用其他...
  • 通过这样的变化,Demetricator我们尝试使用没有数字的Twitter,看看当我们无法再用度量标准来判断自己和他人时会发生什么。 借助这件艺术品,我旨在打破我们对社交媒体指标的迷恋,揭示它们如何指导我们的行为,并...
  • 这份文档提供了FreeType 2函数库设计与实现的细节。本文档的目标是开发人员更好的理解FreeType 2...接下来的章节专注于库的定制和与这个话题相关的系统特定的界面,如何写你自己的模块和如何按需裁减库初始化和编译。
  • 所以精确计算每次训练时所需要的数据量,这显然是极其必要的,既可以我们避免数据不足的情况又不至于我们一直盲目地收集数据。 可问题就出在这里,这个数据量如何去测量? ————————————————...
  • word使用技巧大全

    热门讨论 2011-03-18 20:37:53
    ★怎样创建自己的电子邮件签名或电子邮件信 32 ★怎样用Word在网上开会 33 ★给会议来点Web讨论 33 ★用剪贴板的内容进行替换 33 ★十进制字符与Unicode字符的转换 34 ★巧用“修订”功能帮朋友修改文章 34 ★利用...
  • GSP5.exe

    2020-04-01 09:16:40
    制作两个圆,一个运动的圆,一个静止的圆,在静止的圆的外部和内部各画一个,运动的圆的圆心分别向这两个点移动,达到两圆相切和相交的效果(当然两圆的内含、内切也可同样作出。只是要特别注意:选择顺序,先选...
  • 全面覆盖dba行业知识,并将理论与实践相结合,旨在为初中级dba提供高效运行数据库所需的方方面面的知识,帮助他们从oracle公司发行的大量资料中找到自己需要的信息。书中内容主要集中在大多数企业常见的问题之上,如...
  • 作者以自己在苹果、网景等公司中面临的生死攸关的时刻所做的抉择为例,总结了在硅谷摸爬滚打的经验,旨在为软件工程师更好地规划自己的职业生涯提供帮助。  《持续交付--发布可靠软件的系统方法》适合软件工程师...
  •  ●Agile方法:主要讲述了如何去使用Agile方法,其中有很一部分内容是告诉你为什么要这样做。  ●面向对象设计原则:本书包含了11个面向对象设计原则,涵盖了包的设计和类的设计。这是我所见过的对这方面内容...
  • 持续交付-发布可靠软件的系统方法

    热门讨论 2014-03-02 01:32:14
    3.5.8 为自己导致的问题负责 56 3.5.9 测试驱动的开发 57 3.6 推荐的实践 57 3.6.1 极限编程开发实践 57 3.6.2 若违背架构原则,就构建失败 58 3.6.3 若测试运行变慢,就构建失败 58 3.6.4 若有编译警告或...
  • 其中部分都是读者停下来进行思考但并不需要编程的那种类型,这可以读者自己测试一下知识掌握的程度。其余小部分则需要编程实现。  此外,在所有章节的末尾,列出了总共超过50个的实例分析。它们都是一些编程...
  • 总之,我们应尽量团队对任务工作量的估算不要出现太的偏差,使任务的开发在可控的范围内。此外,及时召开回顾会议,也是杜绝这类问题的一件利器。 第三个问题需要团队的管理者建立某些准则,例如对技术问题的...
  • 大话数据结构

    2018-12-14 16:02:18
    立马下车,并对自己说,后面没座了,我等下一辆?没这么笨的人,前面有座位,当然也是可以坐的。 4.12.1队列顺序存储的不足 112 4.12.2循环队列定义 114 4.13队列的链式存储结构及实现 117 4.13.1队列链式存储...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    可能的话,可以到ic37去买一些小零件,自己搭一个小系统它工作起来。 HOTLEK的单片机是RISC结构的8位单片机,它可以广泛应用在家用电器、安全系统、掌上游戏等方面。大概来说可以分成I/O型单片机、LCD型单片机...
  • 在本课中,您将学习最有效的机器学习技术,并获得实践,它们为自己的工作。更重要的是,你会不仅得到理论基础的学习,而且获得那些需要快速和强大的应用技术解决问题的实用技术。最后,你会学到一些硅谷利用机器...
  • 不会介绍每个优化项目具体如何操作。PS:后续会有系列文章针对不同优化分类下的具体优化操作进行更详细的介绍。 <h2>1. 度量标准与设定目标 在进行性能优化之前,我们需要为应用选择一个正确的度量标准&...
  • 我是说,展现你的思路,这意味着记录一个起点度量,构建可控的实验,然后记录下一个度量,并坦诚地公布结果,读者能够完全理解,如果他们愿意甚至可以重现你的测试。  这是个了不起的事情。当作者开始这样做的...
  • 我是说,展现你的思路,这意味着记录一个起点度量,构建可控的实验,然后记录下一个度量,并坦诚地公布结果,读者能够完全理解,如果他们愿意甚至可以重现你的测试。  这是个了不起的事情。当作者开始这样做的...

空空如也

空空如也

1 2 3
收藏数 54
精华内容 21
关键字:

如何让自己度量大