PHP_PHP チュートリアルで単純線形回帰を実装するための数学ライブラリの重要性
Perl や Python などの他のオープンソース言語と比較して、PHP コミュニティは数学ライブラリを開発するための強力な努力が不足しています。
この状況の理由の 1 つは、すでに成熟した数学ツールが多数存在しており、コミュニティが独自に PHP ツールを開発するのを妨げている可能性があることです。たとえば、私は S System という強力なツールに取り組みました。このツールには印象的な統計ライブラリのセットがあり、データ セットを分析するために特別に設計されており、その言語設計で 1998 年に ACM 賞を受賞しました。 S またはそのオープンソースの R が単なる exec_shell 呼び出しである場合、なぜわざわざ同じ統計計算機能を PHP に実装するのでしょうか? S システム、その ACM Award、または R の詳細については、関連参考資料を参照してください。
これは開発者のエネルギーの無駄ではないでしょうか? PHP 数学ライブラリを開発する動機が、開発者の労力を節約し、その仕事に最適なツールを使用することだった場合、PHP の現在のトピックは理にかなっています。
一方で、教育的な動機がPHP数学ライブラリの開発を促す可能性もあります。約 10% の人にとって、数学は探求する興味深い主題です。 PHP にも習熟している人にとって、PHP 数学ライブラリの開発は数学の学習プロセスを強化することができます。言い換えれば、T テストに関する章を読むだけでなく、対応する中間結果を計算できるプログラムを実装することもできます。値を取得し、それらを標準形式で表示します。
コーチングとトレーニングを通じて、PHP 数学ライブラリの開発は難しい作業ではなく、技術的および学習上の興味深い課題となる可能性があることを実証したいと考えています。この記事では、PHP 数学ライブラリの開発に使用できる一般的なアプローチを示す、SimpleLinearRegression と呼ばれる PHP 数学ライブラリの例を紹介します。まず、この SimpleLinearRegression クラスの開発の指針となったいくつかの一般原則について説明します。
指導原則
SimpleLinearRegression クラスの開発をガイドするために、6 つの一般原則を使用しました。
解析モデルごとにクラスを作成します。
逆リンクを使用してクラスを開発します。
大量のゲッターが期待されます。
中間結果を保存します。
詳細な API の設定を行います。
完璧は目標ではありません。
これらのガイドラインをそれぞれ詳しく見てみましょう。
解析モデルごとにクラスを作成します
各主要な分析テストまたはプロシージャには、テストまたはプロシージャと同じ名前の PHP クラスが必要です。このクラスには、入力関数、中間値と要約値を計算するための関数、および出力関数 (中間値と要約値にはテキストを使用します。またはグラフィックを使用します) が含まれます。画面に表示されるすべてのフォーマットを設定します)。
逆リンクを使用してクラスを開発する
数理計画法では、コーディングのターゲットは通常、分析手順 ( MultipleRegression 、 TimeSeries 、 ChiSquared など) が生成したい標準出力値です。問題解決の観点から見ると、これは、逆方向連鎖を使用して数学的な手法を開発できることを意味します。
例えば、概要出力画面には、1つ以上の概要統計結果が表示されます。これらの要約統計結果は中間統計結果の計算に依存しており、これらの中間統計結果にはさらに深い中間統計結果などが含まれる場合があります。このバックリンクベースの開発アプローチは、次の原則につながります。
多数のゲッターが期待されます
数学の授業展開のほとんどは、中間値や集計値の計算です。実際には、これは、クラスに中間値と集計値を計算するゲッター メソッドが多数含まれていても驚かないことを意味します。
中間結果の保存
中間計算結果を結果オブジェクト内に保存して、中間結果を後続の計算の入力として使用できるようにします。この原則は S 言語設計に実装されています。現在のコンテキストでは、この原則は、計算された中間値と要約結果を表すインスタンス変数を選択することによって実装されます。
詳細な API の環境設定を行う
SimpleLinearRegression クラスのメンバー関数とインスタンス変数の命名スキームを開発するときに、メンバー関数とインスタンス変数を記述するために長い名前 (getYY2 の代わりに getSumSquaredError のようなもの) を使用すると、より簡単になることがわかりました。関数の演算内容や変数の意味が分かりやすくなります。
私は短縮名を完全に放棄したわけではありません。ただし、名前の短縮形を使用する場合は、名前の意味を完全に説明するコメントを提供する方法を見つける必要があります。私の見解は次のとおりです。高度に省略された命名スキームは数学的プログラミングでは一般的ですが、特定の数学的ルーチンを理解し、正しいことを証明することが必要以上に困難になります。
完璧は目標ではありません
このコーディング演習の目標は、必ずしも PHP 用に高度に最適化された厳密な数学エンジンを開発することではありません。初期段階では、有意義な分析テストの実装方法を学び、この分野の困難な問題を解決することに重点を置く必要があります。
インスタンス変数
統計テストやプロセスをモデル化する場合、どのインスタンス変数が宣言されているかを示す必要があります。
インスタンス変数の選択は、分析プロセスによって生成される中間値と要約値を考慮して決定できます。各中間値と要約値は、変数の値をオブジェクト プロパティとして持つ、対応するインスタンス変数を持つことができます。
この分析を使用して、リスト 1 の SimpleLinearRegression クラスに対して宣言する変数を決定しました。同様の分析は、MultipleRegression、ANOVA、または TimeSeries プロシージャでも実行できます。
リスト1. SimpleLinearRegressionクラスのインスタンス変数
// 著作権 2003、Paul Meagher
// GPL に基づいて配布されます
クラス SimpleLinearRegression {
変数 $n;
var $X = 配列();
var $Y = 配列();
var $ConfInt;
var $Alpha
var $XMean
var $Y意味
var $SumXX
var $SumXY
var $SumYY
var $傾き
var $YInt;
var $PredictedY = 配列();
var $Error = 配列();
var $SquaredError = 配列();
var $TotalError
var $SumError
var $SquaredError
var $ErrorVariance
var $StdErr;
var $SlopeStdErr;
var $SlopeVal // 傾きの T 値
変数 $YIntStdErr;
var $YIntTVal // Y 切片の T 値
変数$R;
変数 $RSquared
var $DF; // 自由度
var $SlopeProb; // 傾斜推定の確率
var $YIntProb; // Y 切片推定の確率
var $AlphaTVal; // 指定されたアルファ設定の T 値
var $ConfIntOfSlope;
var $RPath = "/usr/local/bin/R" // ここにパスを入力します
;
var $format = "%01.2f" // 出力のフォーマットに使用されます
;
}
?>
コンストラクター
SimpleLinearRegression クラスのコンストラクター メソッドは、それぞれ同じ数の値を持つ X ベクトルと Y ベクトルを受け入れます。予想される Y 値のデフォルトの 95% 信頼区間を設定することもできます。
コンストラクターメソッドは、データ形式が処理に適しているかどうかを検証することから始まります。入力ベクトルが「等しいサイズ」テストと「1 より大きい値」テストに合格すると、アルゴリズムのコア部分が実行されます。
このタスクの実行には、一連のゲッター メソッドによる統計プロセスの中間値と要約値の計算が含まれます。各メソッド呼び出しの戻り値をクラスのインスタンス変数に代入します。この方法で計算結果を保存すると、連鎖計算の呼び出しルーチンで中間値と要約値を確実に利用できるようになります。リスト 2 で説明されているように、クラスの出力メソッドを呼び出してこれらの結果を表示することもできます。
リスト2. クラスの出力メソッドの呼び出し
// 著作権 2003、Paul Meagher
// GPL に基づいて配布
function SimpleLinearRegression($X, $Y, $ConfidenceInterval="95") {
$numX = カウント($X);
$numY = カウント($Y);
if ($numX != $numY) {
die("エラー: X ベクトルと Y ベクトルのサイズは同じでなければなりません。");
}
if ($numX
die("エラー: 入力配列のサイズは少なくとも 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->gt;Slope = $this->getSlope();
$this->YInt = $this->getYInt();
$this->gt;PredictedY = $this->getPredictedY();
$this->gt;エラー = $this->getError();
$this->gt;SquaredError = $this->getSquaredError();
$this->SumError = $this->getSumError();
$this->TotalError = $this->getTotalError();
$this->SumSquaredError = $this->getSumSquaredError();
$this->ErrorVariance = $this->getErrorVariance();
$this->StdErr = $this->getStdErr();
$this->gt;SlopeStdErr = $this->getSlopeStdErr();
$this->YIntStdErr = $this->getYIntStdErr();
$this->gt;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();
true を返します。
}
?>
メソッド名とそのシーケンスは、バックリンクと、中間値の計算方法を段階的に説明する学部生が使用する統計学の教科書への参照を組み合わせて導き出されました。計算する必要がある中間値の名前には「get」という接頭辞が付けられ、メソッド名が導出されます。
モデルをデータに適合させる
SimpleLinearRegression プロシージャは、データに適合する直線を生成するために使用されます。直線には次の標準方程式が含まれます。
y = b + mxこの方程式の PHP 形式はリスト 3 のようになります。
リスト 3. モデルをデータに適合させるための PHP 方程式
$PredictedY[$i] = $YIntercept + $Slope * $X[$i]
導出された一次方程式を使用すると、各 X 値に対応する予測 Y 値を取得できます。線形方程式がデータによく適合する場合、Y の観測値と予測値は一致する傾向があります。
相性が良いかどうかの判断方法
SimpleLinearRegression クラスは、かなりの数の集計値を生成します。重要な要約値は、線形方程式がデータにどの程度適合しているかを測定する T 統計です。一致が非常に良好な場合、T 統計量は大きくなる傾向があります。 T 統計量が小さい場合は、線形方程式を、Y 値の平均が最良の予測子であると仮定するモデルに置き換える必要があります (つまり、一連の値の平均は通常、有用な予測子です)次の観測の場合は、それをデフォルトのモデルにします)。
T 統計量が Y 値の平均を最良の予測因子として考慮しないほど十分に大きいかどうかをテストするには、T 統計量を取得するランダム確率を計算する必要があります。 T 統計を取得する確率が低い場合は、平均が最良の予測子であるという帰無仮説を棄却できるため、単純な線形モデルがデータによく適合すると確信できます。
では、T統計値の確率はどのように計算するのでしょうか?
T統計値の確率を計算する
PHP には T 統計値の確率を計算するための数学的ルーチンが欠けているため、このタスクを統計計算パッケージ R (「リソース」の www.r-project.org を参照) に任せて必要な値を取得することにしました。また、このバッグに皆さんの注目を集めたい理由は次のとおりです:
R は、PHP 開発者が PHP 数学ライブラリでエミュレートできる多くのアイデアを提供します。
R を使用すると、PHP 数学ライブラリから取得した値が、成熟した無料で利用できるオープンソース統計パッケージから取得した値と一致しているかどうかを判断できます。
リスト 4 のコードは、R に任せて値を取得することがいかに簡単であるかを示しています。
// 著作権 2003、Paul Meagher
// GPL に基づいて配布されます
クラス SimpleLinearRegression {
var $RPath = "/usr/local/bin/R" // ここにパスを入力します
;
関数 getStudentProb($T, $df) {
$確率 = 0.0;
$cmd = "エコー 'dt($T, $df)' | $this->RPath --slave";
$result = シェル_exec($cmd);
list($LineNumber, $Probability) =explode(" ", トリム($result));
$確率を返します
}
関数 getInverseStudentProb($alpha, $df) {
$InverseProbability = 0.0;
$cmd = "エコー 'qt($alpha, $df)' | $this->RPath --slave";
$result = シェル_exec($cmd);
list($LineNumber, $InverseProbability) =explode(" ", trim($result));
$InverseProbability を返します。
}
}
?>
R 実行可能ファイルへのパスが設定され、両方の関数で使用されていることに注意してください。最初の関数はスチューデントの T 分布に基づいて T 統計量に関連付けられた確率値を返し、2 番目の逆関数は指定されたアルファ設定に対応する T 統計量を計算します。 getStudentProb メソッドは線形モデルの適合性を評価するために使用され、getInverseStudentProb メソッドは中間値を返し、これを使用して各予測 Y 値の信頼区間を計算します。
スペースに限りがあるため、このクラスのすべての関数を 1 つずつ詳細に説明することは不可能です。そのため、単純な線形回帰分析に含まれる用語と手順を理解したい場合は、統計学の教科書を参照することをお勧めします。学部生が利用します。
燃費調査
このクラスの使用方法を示すために、公益事業における燃え尽き症候群の研究からのデータを使用できます。 Michael Leiter と Kimberly Ann Meechan は、疲労指数と呼ばれる燃え尽き症候群の尺度と集中力と呼ばれる独立変数の間の関係を研究しました。集中力とは、人々の職場環境から得られる社会的接触の割合を指します。
サンプル中の個人の消費指数値と濃度値の関係を調べるには、これらの値を適切な名前の配列にロードし、これらの配列値を使用してこのクラスをインスタンス化します。クラスをインスタンス化した後、クラスによって生成されたいくつかの要約値を表示して、線形モデルがデータにどの程度適合しているかを評価します。
リスト 5 は、データをロードして集計値を表示するスクリプトを示しています。
リスト 5. データをロードして集計値を表示するスクリプト
// BurnoutStudy.php
// 著作権 2003、Paul Meagher
// GPL に基づいて配布されます
「SimpleLinearRegression.php」をインクルードします。
// バーンアウト研究からデータをロードします
$濃度 = 配列(20,60,38,88,79,87,
)
$ExhaustionIndex = array(100,525,300,980,310,900,
410,296,120,501,920,810,
506,493,892,527,600,855、
に
$slr = 新しい SimpleLinearRegression($Concentration, $ExhaustionIndex);
$YInt = sprintf($slr->format, $slr->YInt);
$Slope = sprintf($slr->format, $slr->Slope);
$SlopeTVal = sprintf($slr->format, $slr->SlopeTVal);
$SlopeProb = sprintf("%01.6f", $slr->SlopeProb);
?>
Web ブラウザーを通じてこのスクリプトを実行すると、次の出力が生成されます:
方程式: 疲労 = -29.50 + (8.87 * 集中力)
T: 6.03
確率 > T: 0.000005
この表の最後の行は、このような大きな値の T がランダムに得られる確率が非常に低いことを示しています。単純な線形モデルは、単純に消費値の平均を使用するよりも優れた予測力を持っていると結論付けることができます。
誰かの職場におけるつながりの集中を知ることは、その人が消耗している可能性のある燃え尽き症候群のレベルを予測するために使用できます。この方程式は、集中値が 1 単位増加するごとに、社会サービス分野における 1 人の消費価値が 8 単位増加することを示しています。これは、燃え尽き症候群の可能性を減らすために、社会奉仕活動に従事している人は職場の外で友人を作ることを検討すべきであるというさらなる証拠です。
これは、これらの結果が何を意味するのかについての大まかな説明にすぎません。このデータセットの意味を完全に調査するには、データをより詳細に調査して、これが正しい解釈であることを確認する必要があるかもしれません。次の記事では、他にどのような分析を実行する必要があるかについて説明します。
何を学びましたか?
まず、意味のある PHP ベースの数学パッケージを開発するのにロケット科学者である必要はありません。標準のオブジェクト指向技術を遵守し、バックリンクの問題解決アプローチを明示的に採用することにより、いくつかの比較的基本的な統計手順を PHP で比較的簡単に実装できます。
教えるという観点から見ると、この演習は、より高い抽象レベルとより低い抽象レベルで統計テストやルーチンについて考える必要があるという理由だけで、非常に役立つと思います。言い換えれば、統計テストや手続き型学習を補うための優れた方法は、手続きをアルゴリズムとして実装することです。
統計的テストを実装するには、通常、与えられた情報の範囲を超えて、創造的に問題を解決し、発見する必要があります。また、主題に関する知識のギャップを発見する良い方法です。
欠点としては、PHP には、ほとんどの統計テストの実装に必要なサンプリング分布のための固有の手段が欠けていることがわかります。これらの値を取得するには R に処理を行わせる必要がありますが、残念ながら R をインストールする時間や関心はありません。いくつかの一般的な確率関数のネイティブ PHP 実装は、この問題を解決できます。
もう 1 つの問題: このクラスは多くの中間値と要約値を生成しますが、要約出力は実際にはこれを利用しません。扱いにくい出力をいくつか提供しましたが、分析結果を適切に解釈できるほど十分ではなく、十分に整理されていません。実際のところ、出力メソッドをこのクラスに統合する方法がまったくわかりません。これに対処する必要があります。
最後に、データを理解するには、単に集計値を見ればよいわけではありません。また、個々のデータ ポイントがどのように分散されるかを理解する必要があります。これを行うための最良の方法の 1 つは、データをグラフ化することです。繰り返しになりますが、これについてはあまり知りませんが、このクラスを使用して実際のデータを分析したい場合は、この問題を解決する必要があります。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

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

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