搜尋
首頁後端開發php教程用 PHP 实现的简单线性回归_PHP教程

用 PHP 实现的简单线性回归_PHP教程

Jul 21, 2016 pm 02:52 PM
php回歸實現文章簡單系列線性組成這個部分

在这个由两部分组成的系列文章的第 1 部分(“ 用 PHP 实现的简单线性回归”)中,我说明了数学库对 PHP 有用的原因。我还演示了如何用 PHP 作为实现语言来开发和实现简单线性回归算法的核心部分。

本文的目标是向您展示如何使用第 1 部分中讨论的 SimpleLinearRegression 类来构建一个重要的数据研究工具。

简要回顾:概念

简单线性回归建模背后的基本目标是从成对的 X值和 Y值(即 X和 Y测量值)组成的二维平面中找到最吻合的直线。一旦用 最小方差法找到这条直线,就可以执行各种统计测试,以确定这条直线与观测到的 Y值的偏离量吻合程度。

线性方程( y = mx + b)有两个参数必须根据所提供的 X和 Y数据估算出来,它们是斜率( m)和 y 轴截距( b)。一旦估算出这两个参数,就可以将观测值输入线性方程,并观察方程所生成的 Y预测值。

要使用最小方差法估算出 m和 b参数,就要找到 m 和 b 的估计值,使它们对于所有的 X值得到的 Y值的观测值和预测值最小。观测值和预测值之差称为误差( y i- (mx i+ b) ),并且,如果对每个误差值都求平方,然后求这些残差的和,其结果是一个被称为 预测平方差的数。使用最小方差法来确定最吻合的直线涉及寻找使预测方差最小的 m和 b的估计值。

可以用两种基本方法来找到满足最小方差法的估计值 m和 b。第一种方法,可以使用数值搜索过程设定不同的 m和 b值并对它们求值,最终决定产生最小方差的估计值。第二种方法是使用微积分找到用于估算 m和 b 的方程。我不打算深入讨论推导出这些方程所涉及的微积分,但我确实在 SimpleLinearRegression 类中使用了这些分析方程,以找到 m和 b 的最小平方估计值(请参阅 SimpleLinearRegression 类中的 getSlope() 和 getYIntercept 方法)。

即使拥有了可以用来找到 m和 b的最小平方估计值的方程,也并不意味着只要将这些参数代入线性方程,其结果就是一条与数据良好吻合的直线。这个简单线性回归过程中的下一步是确定其余的预测方差是否可以接受。

可以使用统计决策过程来否决“直线与数据吻合”这个备择假设。这个过程基于对 T 统计值的计算,使用概率函数求得随机大的观测值的概率。正如第 1 部分所提到的, SimpleLinearRegression 类生成了为数众多的汇总值,其中一个重要的汇总值是 T 统计值,它可以用来衡量线性方程与数据的吻合程度。如果吻合良好,则 T 统计值往往是一个较大的值;如果 T 值很小,就应该用一个缺省模型代替您的线性方程,该模型假定 Y值的平均值是最佳预测值(因为一组值的平均值通常可以是下一个观测值的有用的预测值)。

要测试 T 统计值是否大到可以不用 Y值的平均值作为最佳预测值,需要计算随机获得 T 统计值的概率。如果概率很低,那就可以不采用平均值是最佳预测值这一无效假设,并且相应地可以确信简单线性模型是与数据良好吻合的。(有关计算 T 统计值概率的更多信息,请参阅第 1 部分。)

回过头讨论统计决策过程。它告诉您何时不采用无效假设,却没有告诉您是否接受备择假设。在研究环境中,需要通过理论参数和统计参数来建立线性模型备择假设。

您将构建的数据研究工具实现了用于线性模型(T 测试)的统计决策过程,并提供了可以用来构造理论和统计参数的汇总数据,这些参数是建立线性模型所需要的。数据研究工具可以归类为决策支持工具,供知识工作者在中小规模的数据集中研究模式。

从学习的角度来看,简单线性回归建模值得研究,因为它是理解更高级形式的统计建模的必由之路。例如,简单线性回归中的许多核心概念为理解多次回归(Multiple Regression)、要素分析(Factor Analysis)和时间序列(Time Series)等建立了良好的基础。

简单线性回归还是一种多用途的建模技术。通过转换原始数据(通常用对数或幂转换),可以用它来为曲线数据建模。这些转换可以使数据线性化,这样就可以使用简单线性回归来为数据建模。所生成的线性模型将被表示为与被转换值相关的线性公式。

概率函数

在前一篇文章中,我通过交由 R 来求得概率值,从而避开了用 PHP 实现概率函数的问题。我对这个解决方案并非完全满意,因此我开始研究这个问题:开发基于 PHP 的概率函数需要些什么。

我开始上网查找信息和代码。一个两者兼有的来源是书籍 Numerical Recipes in C 中的概率函数。我用 PHP 重新实现了一些概率函数代码( gammln.c 和 betai.c 函数),但我对结果还是不满意。与其它一些实现相比,其代码似乎多了些。此外,我还需要反概率函数。

幸运的是,我偶然发现了 John Pezzullo 的 Interactive Statistical Calculation。John 关于 概率分布函数的网站上有我需要的所有函数,为便于学习,这些函数已用 JavaScript 实现。

我将 Student T 和 Fisher F 函数移植到了 PHP。我对 API 作了一点改动,以便符合 Java 命名风格,并将所有函数嵌入到名为 Distribution 的类中。该实现的一个很棒的功能是 doCommonMath 方法,这个库中的所有函数都重用了它。我没有花费力气去实现的其它测试(正态测试和卡方测试)也都使用 doCommonMath 方法。

这次移植的另一个方面也值得注意。通过使用 JavaScript,用户可以将动态确定的值赋给实例变量,譬如:

var PiD2 = pi() / 2
 

在 PHP 中不能这样做。只能把简单的常量值赋给实例变量。希望在 PHP5 中会解决这个缺陷。

请注意 清单 1中的代码并未定义实例变量 — 这是因为在 JavaScript 版本中,它们是动态赋予的值。

清单 1. 实现概率函数


doCommonMath($cth * $cth, 2, $df - 3, -1)) / (pi()/2); } else { return 1 - $sth * $this->doCommonMath($cth * $cth, 1, $df - 3, -1); } } function getInverseStudentT($p, $df) { $v = 0.5; $dv = 0.5; $t = 0; while($dv > 1e-6) { $t = (1 / $v) - 1; $dv = $dv / 2; if ( $this->getStudentT($t, $df) > $p) { $v = $v - $dv; } else { $v = $v + $dv; } } return $t; } function getFisherF($f, $n1, $n2) { // implemented but not shown } function getInverseFisherF($p, $n1, $n2) { // implemented but not shown } } ?>
 

图形输出

迄今为止,您已经实现的输出方法都以 HTML 格式显示汇总值。它也适合于用 GIF、JPEG 或 PNG 格式显示这些数据的分布图(scatter plot)或线图(line plot)。

与其亲自编写生成线图和分布图的代码,我认为最好使用名为 JpGraph的基于 PHP 的图形库。JpGraph 正由 Johan Persson 积极开发,其 项目网站这样描述它:

无论是对于只有最少代码的“以快捷但不恰当方式获得的”图形,还是对于需要非常细粒度控制的复杂专业图形,JpGraph 都可以使它们的绘制变得简单。JpGraph 同样适用于科学和商业类型的图形。

JpGraph 分发版中包含大量可以根据特定需求进行定制的示例脚本。将 JpGraph 用于数据研究工具非常简单,只需找到功能与我的需求类似的示例脚本,然后对该脚本进行改写以满足我的特定需求即可。

清单 3中的脚本是从样本数据研究工具( explore.php)中抽取的,它演示了如何调用该库以及如何将来自于 SimpleLinearRegression 分析的数据填入 Line 和 Scatter 类。这段代码中的注释是 Johan Persson 编写的(JPGraph 代码库的文档化工作做得很好)。

清单 3. 来自于样本数据研究工具 explore.php 的函数的详细内容


SetScale("linlin"); // Setup title $graph->title->Set("$title"); $graph->img->SetMargin(50,20,20,40); $graph->xaxis->SetTitle("$x_name","center"); $graph->yaxis->SetTitleMargin(30); $graph->yaxis->title->Set("$y_name"); $graph->title->SetFont(FF_FONT1,FS_BOLD); // make sure that the X-axis is always at the // bottom at the plot and not just at Y=0 which is // the default position $graph->xaxis->SetPos('min'); // Create the scatter plot with some nice colors $sp1 = new ScatterPlot($slr->Y, $slr->X); $sp1->mark->SetType(MARK_FILLEDCIRCLE); $sp1->mark->SetFillColor("red"); $sp1->SetColor("blue"); $sp1->SetWeight(3); $sp1->mark->SetWidth(4); // Create the regression line $lplot = new LinePlot($slr->PredictedY, $slr->X); $lplot->SetWeight(2); $lplot->SetColor('navy'); // Add the pltos to the line $graph->Add($sp1); $graph->Add($lplot); // ... and stroke $graph_name = "temp/test.png"; $graph->Stroke($graph_name); ?> 用 PHP 实现的简单线性回归_PHP教程 ?>
 

数据研究脚本

该数据研究工具由单个脚本( explore.php)构成,该脚本调用 SimpleLinearRegressionHTML 类和 JpGraph 库的方法。

该脚本使用了简单的处理逻辑。该脚本的第一部分对所提交的表单数据执行基本验证。如果这些表单数据通过验证,则执行该脚本的第二部分。

该脚本的第二部分所包含的代码用于分析数据,并以 HTML 和图形格式显示汇总结果。 清单 4中显示了 explore.php脚本的基本结构:

清单 4. explore.php 的结构


$title"; $slr->showTableSummary($x_name, $y_name); echo "

"; $slr->showAnalysisOfVariance(); echo "

"; $slr->showParameterEstimates($x_name, $y_name); echo "
"; $slr->showFormula($x_name, $y_name); echo "

"; $slr->showRValues($x_name, $y_name); echo "
"; include ("jpgraph/jpgraph.php"); include ("jpgraph/jpgraph_scatter.php"); include ("jpgraph/jpgraph_line.php"); // The code for displaying the graphics is inline in the // explore.php script. The code for these two line plots // finishes off the script: // Omitted code for displaying scatter plus line plot // Omitted code for displaying residuals plot } ?>

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/371643.htmlTechArticle在这个由两部分组成的系列文章的第 1 部分( 用 PHP 实现的简单线性回归)中,我说明了数学库对 PHP 有用的原因。我还演示了如何用 PHP...
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
超越炒作:評估當今PHP的角色超越炒作:評估當今PHP的角色Apr 12, 2025 am 12:17 AM

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

PHP中的弱參考是什麼?什麼時候有用?PHP中的弱參考是什麼?什麼時候有用?Apr 12, 2025 am 12:13 AM

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

解釋PHP中的__ Invoke Magic方法。解釋PHP中的__ Invoke Magic方法。Apr 12, 2025 am 12:07 AM

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。

解釋PHP 8.1中的纖維以進行並發。解釋PHP 8.1中的纖維以進行並發。Apr 12, 2025 am 12:05 AM

Fibers在PHP8.1中引入,提升了並發處理能力。 1)Fibers是一種輕量級的並發模型,類似於協程。 2)它們允許開發者手動控制任務的執行流,適合處理I/O密集型任務。 3)使用Fibers可以編寫更高效、響應性更強的代碼。

PHP社區:資源,支持和發展PHP社區:資源,支持和發展Apr 12, 2025 am 12:04 AM

PHP社區提供了豐富的資源和支持,幫助開發者成長。 1)資源包括官方文檔、教程、博客和開源項目如Laravel和Symfony。 2)支持可以通過StackOverflow、Reddit和Slack頻道獲得。 3)開發動態可以通過關注RFC了解。 4)融入社區可以通過積極參與、貢獻代碼和學習分享來實現。

PHP與Python:了解差異PHP與Python:了解差異Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

php:死亡還是簡單地適應?php:死亡還是簡單地適應?Apr 11, 2025 am 12:13 AM

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

PHP的未來:改編和創新PHP的未來:改編和創新Apr 11, 2025 am 12:01 AM

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。