科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件PHP实现简单线性回归之数学库的重要性

PHP实现简单线性回归之数学库的重要性

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

与其它开放源码语言(比如 Perl 和 Python)相比,PHP 社区缺少强有力的工作来开发数学库。

作者:Paul Meagher 来源:ibm 2007年10月21日

关键字: Linux

  • 评论
  • 分享微博
  • 分享邮件
构造函数

  SimpleLinearRegression 类的构造函数方法接受一个 X和一个 Y向量,每个向量都有相同数量的值。您还可以为您预计的 Y值设置一个缺省为 95% 的置信区间(confidence interval)。

  构造函数方法从验证数据形式是否适合于处理开始。一旦输入向量通过了“大小相等”和“值大于 1”测试,就执行算法的核心部分。

  执行这项任务涉及到通过一系列 getter 方法计算统计过程的中间值和汇总值。将每个方法调用的返回值赋给该类的一个实例变量。用这种方法存储计算结果确保了前后链接的计算中的调用例程可以使用中间值和汇总值。还可以通过调用该类的输出方法来显示这些结果,如清单 2 所描述的那样。

  清单 2. 调用类输出方法

 
<?php  
// Copyright 2003, Paul Meagher  
// Distributed under GPL    
function SimpleLinearRegression($X, $Y, $ConfidenceInterval="95") { 
  $numX = count($X); 
  $numY = count($Y); 
  if ($numX != $numY) { 
    die("Error: Size of X and Y vectors must be the same."); 
  }  
  if ($numX <= 1) {  
    die("Error: Size of input array must be at least 2."); 
  } 
   
  $this->n               = $numX; 
  $this->X               = $X; 
  $this->Y               = $Y;   
   
  $this->ConfInt         = $ConfidenceInterval;  
  $this->Alpha           = (1 + ($this->ConfInt / 100) ) / 2; 
  $this->XMean           = $this->getMean($this->X); 
  $this->YMean           = $this->getMean($this->Y); 
  $this->SumXX           = $this->getSumXX(); 
  $this->SumYY           = $this->getSumYY(); 
  $this->SumXY           = $this->getSumXY();     
  $this->Slope           = $this->getSlope(); 
  $this->YInt            = $this->getYInt(); 
  $this->PredictedY      = $this->getPredictedY(); 
  $this->Error           = $this->getError(); 
  $this->SquaredError    = $this->getSquaredError(); 
  $this->SumError        = $this->getSumError(); 
  $this->TotalError      = $this->getTotalError();     
  $this->SumSquaredError = $this->getSumSquaredError(); 
  $this->ErrorVariance   = $this->getErrorVariance(); 
  $this->StdErr          = $this->getStdErr();   
  $this->SlopeStdErr     = $this->getSlopeStdErr();      
  $this->YIntStdErr      = $this->getYIntStdErr();          
  $this->SlopeTVal       = $this->getSlopeTVal();             
  $this->YIntTVal        = $this->getYIntTVal();                 
  $this->R               = $this->getR();    
  $this->RSquared        = $this->getRSquared(); 
  $this->DF              = $this->getDF();           
  $this->SlopeProb       = $this->getStudentProb($this->SlopeTVal, $this->DF); 
  $this->YIntProb        = $this->getStudentProb($this->YIntTVal, $this->DF); 
  $this->AlphaTVal       = $this->getInverseStudentProb($this->Alpha, $this->DF); 
  $this->ConfIntOfSlope  = $this->getConfIntOfSlope();  
  return true; 
} 
?> 

  方法名及其序列是通过结合逆向链接和参考大学本科学生使用的统计学教科书推导得出的,该教科书一步一步地说明了如何计算中间值。我需要计算的中间值的名称带有“get”前缀,从而推导出方法名。

  使模型与数据相吻合

  SimpleLinearRegression 过程用于产生与数据相吻合的直线,其中直线具有以下标准方程:

  y = b + mx

  该方程的 PHP 格式看起来类似于清单 3:

  清单 3. 使模型与数据相吻合的 PHP 方程

 
$PredictedY[$i] = $YIntercept + $Slope * $X[$i] 

  SimpleLinearRegression 类使用最小二乘法准则推导出 Y 轴截距(Y Intercept)和斜率(Slope)参数的估计值。这些估计的参数用来构造线性方程(请参阅 清单 3),该方程对 XY值之间的关系进行建模。

  使用推导出的线性方程,您就可以得到每个 X值对应的预测 Y值。如果线性方程与数据非常吻合,那么 Y的观测值与预测值趋近于一致。

  如何确定是否非常吻合

  SimpleLinearRegression 类生成了相当多的汇总值。一个重要的汇总值是 T统计值,它可以用来衡量一个线性方程与数据的 吻合程度。如果非常吻合,那么 T 统计值往往很大。如果 T 统计值很小,那么应当用一个模型替换该线性方程,该模型假设 Y值的均值是最佳预测值(也就是说,一组值的均值通常是下一个观测值有用的预测值,使之成为缺省模型)。

  要测试 T 统计值是否大得足以不把 Y值的均值作为最佳预测值,您需要计算获取 T 统计值的随机概率。如果获取 T 统计值的概率很低,那么您可以否定均值是最佳预测值这个无效假设,与此相对应,也就确信简单线性模型与数据非常吻合。

  那么,如何计算 T 统计值的概率呢?
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章