検索
ホームページバックエンド開発PHPチュートリアルPHP_PHP チュートリアルで実装された単純な線形回帰

PHP_PHP チュートリアルで実装された単純な線形回帰

Jul 21, 2016 pm 02:52 PM
php戻る存在する成し遂げる記事使用単純シリーズワイヤー線形構成これ一部

この 2 部構成シリーズのパート 1 (「PHP における単純線形回帰」) では、数学ライブラリが PHP に役立つ理由を説明しました。また、実装言語として PHP を使用して、単純な線形回帰アルゴリズムのコア部分を開発および実装する方法も示しました。

この記事の目的は、パート 1 で説明した SimpleLinearRegression クラスを使用して重要なデータ調査ツールを構築する方法を示すことです。

簡単なレビュー: コンセプト

単純な線形回帰モデリングの背後にある基本的な目標は、X 値と Y 値のペア (つまり、X と Y の測定値) で構成される 2 次元平面から最適な直線を見つけることです。最小分散法を使用して線が見つかったら、さまざまな統計テストを実行して、その線が Y 値から観察された偏差にどの程度適合しているかを判断できます。

一次方程式 (y = mx + b) には、提供された X および Y データに基づいて推定する必要がある 2 つのパラメーターがあります。それらは、傾き (m) と y 切片 (b) です。これら 2 つのパラメーターが推定されると、観測値を線形方程式に入力し、方程式によって生成された Y 予測を観測できます。

最小分散法を使用して m および b パラメーターを推定するには、すべての X 値に対する Y の観測値と予測値が最小になるような m および b の推定値を見つける必要があります。観測値と予測値の差は誤差 (y i- (mx i+ b) ) と呼ばれ、各誤差値を 2 乗してこれらの残差を合計すると、結果は予測の 2 乗 Bad 数となります。最小分散法を使用して最適な適合を決定するには、予測分散を最小化する m と b の推定値を見つけることが含まれます。

最小分散法を満たす推定値 m と b を見つけるには、2 つの基本的な方法を使用できます。最初のアプローチでは、数値検索プロセスを使用して m と b の異なる値を設定し、それらを評価し、最終的に分散が最小になる推定値を決定します。 2 番目の方法は、微積分を使用して m と b を推定するための方程式を見つける方法です。これらの方程式の導出に関わる微積分には立ち入りませんが、SimpleLinearRegression クラスでこれらの分析方程式を使用して、m と b の最小二乗推定値を求めました (SimpleLinearRegression クラス メソッドの getSlope() と getYIntercept を参照)。

m と b の最小二乗推定値を見つけるために使用できる式がある場合でも、これらのパラメーターを一次方程式に代入すると、結果がデータによく適合する直線になるとは限りません。この単純な線形回帰プロセスの次のステップは、残りの予測分散が許容できるかどうかを判断することです。

統計的意思決定プロセスを使用して、直線がデータに適合するという対立仮説を棄却できます。このプロセスは、確率関数を使用してランダムに大きな観測値の確率を求める T 統計量の計算に基づいています。パート 1 で述べたように、SimpleLinearRegression クラスは多数の集計値を生成します。重要な集計値の 1 つは、線形方程式がデータにどの程度適合しているかを測定する T 統計量です。適合が良好な場合、T 統計量は大きな値になる傾向があります。T 値が小さい場合は、Y 値の平均が最良の予測子であると仮定するデフォルトのモデルに線形方程式を置き換える必要があります (なぜなら、一連の値の平均は、次の観測値を予測するのに役立つことが多いからです)。

T 統計量が、平均 Y 値を最良の予測因子として使用できないほど十分に大きいかどうかをテストするには、T 統計量をランダムに取得する確率を計算する必要があります。確率が低い場合は、平均が最良の予測子であるという帰無仮定を省くことができるため、単純な線形モデルがデータによく適合していると確信できます。 (T 統計の確率の計算の詳細については、パート 1 を参照してください。)

統計的な意思決定プロセスに戻りましょう。帰無仮説を採用すべきでない場合は教えてくれますが、対立仮説を受け入れるかどうかは教えてくれません。研究環境では、理論的および統計的パラメーターを通じて線形モデルの対立仮説を確立する必要があります。

これから構築するデータ調査ツールは、線形モデルの統計的意思決定プロセス (T 検定) を実装し、線形モデルの構築に必要な理論的および統計的パラメーターの構築に使用できる概要データを提供します。データ調査ツールは、ナレッジ ワーカーが小規模から中規模のデータ セットのパターンを研究するための意思決定支援ツールとして分類できます。

学習の観点から見ると、単純な線形回帰モデリングは、より高度な形式の統計モデリングを理解する唯一の方法であるため、研究する価値があります。たとえば、単純な線形回帰の多くの中心的な概念は、重回帰 (重回帰)、因子分析 (因子分析)、および時系列 (時系列) を理解するための優れた基礎を確立します。

単純な線形回帰も多用途のモデリング手法です。これを使用して、生データを変換する (通常は対数変換またはべき乗変換を使用) ことによって、曲線データをモデル化できます。これらの変換によりデータが線形化され、単純な線形回帰を使用してモデル化できるようになります。結果として得られる線形モデルは、変換された値に関連する線形式として表されます。

確率関数

前の記事では、R に確率値の検索を依頼することで、PHP で確率関数を実装するという問題を回避しました。私はこの解決策に完全には満足できなかったので、「PHP に基づいて確率関数を開発するには何が必要か」という質問について調査を開始しました。

私はオンラインで情報とコードを探し始めました。両方のソースの 1 つは、書籍『C の数値レシピ』の確率関数です。いくつかの確率関数コード (gammln.c および betai.c 関数) を PHP で再実装しましたが、まだ結果に満足していません。他の実装よりもコードが少し多いようです。さらに、逆確率関数も必要です。

幸運なことに、私は John Pezullo の対話型統計計算に出会いました。 John の確率分布関数に関する Web サイトには、学習を容易にするために必要な関数がすべて JavaScript で実装されています。

Student T 関数と Fisher F 関数を PHP に移植しました。 Java 命名スタイルに準拠するように API を少し変更し、すべての関数を Distribution というクラスに埋め込みました。この実装の優れた機能は、このライブラリ内のすべての関数で再利用される doCommonMath メソッドです。わざわざ実装しなかった他のテスト (正規性テストとカイ 2 乗テスト) も 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);関数 getInverseStudentT($p, $df) { $v = 0.5; $t = 0; while($dv > 1e-6) { $t = (1 / $v) - 1; = $dv / 2; if ( $this->getStudentT($t, $df) > $p) { $v = $v - $dv; } else { $v = $v + $dv; return $t; } function getFisherF($f, $n1, $n2) { // 実装されていますが、表示されていません } function getInverseFisherF($p, $n1, $n2) { // 実装されていますが、表示されていません } } ?>

トップに戻る

グラフィック出力

これまでに実装した出力メソッドはすべて、HTML 形式で集計値を表示します。これらのデータの散布図や線図を GIF、JPEG、または PNG 形式で表示するのにも適しています。

折れ線グラフと分布図を生成するコードを自分で書くよりも、JpGraph という PHP ベースのグラフィック ライブラリを使用する方が良いと思いました。 JpGraph は Johan Persson によって積極的に開発されており、彼のプロジェクト Web サイトでは次のように説明されています。

コーディングを最小限に抑えた「簡単で汚い」グラフでも、非常にきめ細かい制御が必要な複雑で専門的なグラフでも、JpGraph を使用すると簡単に描画できます。 JpGraph は、科学グラフにもビジネス タイプのグラフにも同様に適しています。

JpGraph ディストリビューションには、特定のニーズに合わせてカスタマイズできるサンプル スクリプトが多数含まれています。 JpGraph をデータ調査ツールとして使用するのは、必要なことと同様の処理を実行するサンプル スクリプトを見つけて、それを特定のニーズに合わせて調整するだけで簡単です。

リスト 3 のスクリプトは、サンプル データ探索ツール (explore.php) から抽出されたもので、ライブラリを呼び出して、Line クラスと Scatter クラスに SimpleLinearRegression 分析からのデータを設定する方法を示しています。このコードのコメントは、Johan Persson (JPGraph コードベースの文書化に優れた仕事をしています) によって書かれました。

リスト 3. サンプル データ調査ツール、explore.php の関数の詳細


SetScale("リンリン"); // タイトルを設定 $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); // X 軸が // デフォルトの位置である Y=0 だけでなく、常にプロットの一番下にあることを確認します $graph->xaxis->SetPos('min'); // 素敵な色で散布図を作成します $sp1 = new ScatterPlot($slr->Y, $slr->X); $sp1->mark->SetType(MARK_FILLEDCIRCLE); $sp1->mark->SetFillColor("red"); $sp1->SetColor("青"); $sp1->SetWeight(3); $sp1->mark->SetWidth(4); // 回帰直線を作成します $lplot = new LinePlot($slr->PredictedY, $slr->X); $lplot->SetWeight(2); $lplot->SetColor('navy'); // plto を行に追加 $graph->Add($sp1); $graph->Add($lplot); // ...そしてストローク $graph_name = "temp/test.png"; $graph->Stroke($graph_name); ?> PHP_PHP チュートリアルで実装された単純な線形回帰 ?>
 

データ研究脚本

このデータ調査ツールは単一のスクリプト (explore.php) で構成されており、このスクリプトは SimpleLinearRegressionHTML クラスと JpGraph パ​​ッケージのメソッドを使用しています。 このスクリプトは、単一の処理プロセスを使用しています。このスクリプトの最初の部分では、渡されたサンプルデータに対して基本的なテストが実行されます。

このスクリプトの 2 番目の部分に含まれるコードはデータの分析に使用され、結果が HTML および図形式で表示されます。

清单 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"); // グラフィックスを表示するコードは、 //explore.php スクリプトにインラインで含まれています。これら 2 つの折れ線グラフのコードは // スクリプトを終了します: // 散布図と折れ線グラフを表示するための省略されたコード // 残差プロットを表示するための省略されたコード } ?>


http://www.bkjia.com/PHPjc/371643.html

www.bkjia.com

http://www.bkjia.com/PHPjc/371643.html技術記事この 2 つの部分からなる文章の最初の部分 (PHP を使用して実現される単純な線形性の回帰) で、私は PHP の数学的有用性の理由を説明しました。
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?Apr 17, 2025 am 12:24 AM

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHP対Python:ユースケースとアプリケーションPHP対Python:ユースケースとアプリケーションApr 17, 2025 am 12:23 AM

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。