Python は LR クラシック アルゴリズムを実装します

零到壹度
リリース: 2018-04-19 16:55:44
オリジナル
5653 人が閲覧しました

この記事の例では、Python での LR クラシック アルゴリズムの実装について説明します。皆さんにも共有して参考にしてください。詳細は以下のとおりです。

(1) ロジスティック回帰 (LR) 分類器を理解する

まず、ロジスティック回帰は名前に「回帰」が付いていますが、 、実際には分類方法であり、主に 2 分類問題に使用され、ロジスティック関数 (またはシグモイド関数) を使用します。独立変数の値の範囲は (-INF, INF)、独立変数の値の範囲は ( 0,1)、関数形式は次のとおりです:


シグモイド関数の定義域は (-INF, +INF) であるため、値の範囲は (0, 1) です。 )。したがって、最も基本的な LR 分類器は、2 つのカテゴリ (クラス 0、クラス 1) のターゲットを分類するのに適しています。シグモイド関数は、以下の図に示すように、非常に美しい「S」字型です。


LR 分類器 (ロジスティック回帰分類器) の目的は、0/1 分類を学習することです。トレーニング データの特徴からのモデル -- このモデルは、サンプル特徴 の線形結合を独立変数として使用し、ロジスティック関数を使用して独立変数を (0,1) にマッピングします。したがって、LR 分類器の解決策は、一連の重み を解くことです ( は名目上の変数、つまり定数です。実際のエンジニアリングでは、x0=1.0 がよく使用されます。定数項が意味があるかどうかは関係ありません)またはそうでない場合は、保持するのが最善です) をロジスティック関数に代入します。 予測関数を構築します:

関数の値は、結果が 1 になる確率を表します。特徴は y=1 に属します。したがって、入力に対して Z 値を検索します:

(x1,x2,...,xn は特定のサンプル データの特徴であり、次元は n)
その後、

---if を検索します。が 0.5 より大きい場合は y= クラス 1、それ以外の場合はクラス y=0 に属します。 (注: 統計サンプルは均一に分布していると想定されているため、しきい値は 0.5 に設定されています)。 LR 分類器のこの重みのセットを取得するにはどうすればよいでしょうか?これには、最尤推定 MLE と最適化アルゴリズムの概念が必要です。数学で最も一般的に使用される最適化アルゴリズムは、勾配上昇 (下降) アルゴリズムです。

ロジスティック回帰も多クラス分類に使用できますが、二値分類の方が一般的に使用され、説明が簡単です。したがって、実際に最も一般的に使用されるのは 2 項ロジスティック回帰です。 LR 分類子は、数値データと公称データのデータ タイプに適しています。その利点は、計算コストが高くなく、理解および実装が簡単であることですが、欠点は、アンダーフィットしやすく、分類精度が高くない可能性があることです。

(2) ロジスティック回帰の数学的導出

1. ロジスティック回帰を解くための勾配降下法

まず、次の数学的導出プロセスを理解するには、より多くの導関数の解公式が必要です。 「基本的な初等関数でよく使われる微分公式と積分公式」を参照できます。

n 個の観測サンプルがあり、観測値が であるとします。 を与えられた条件下で yi=1 になる確率とします。同じ条件下で yi=0 になる条件付き確率は です。したがって、観測値を取得する確率は

-----この式は実際には

を取得するための包括的な式 (1) です。各観測値は独立しているため、それらの同時分布は次のように表すことができます。分布: 的 (テーブル統計サンプルの数)

上の式は N 観測尤度関数と呼ばれます。私たちの目標は、この尤度関数の値を最大化するパラメータ推定値を見つけられるようにすることです。したがって、最尤推定の鍵は、上式が最大値になるようにパラメータ を見つけることです。

上記の関数の対数を求めます。


最尤推定は、上記の方程式が最大値をとるときの θ を見つけることです。 ここでは、勾配上昇法を使用できます。それを解くために必要な最適パラメータは θ です。 Andrew Ng のコースでは、J(θ) は次の式として扱われます。つまり、J(θ)=-(1/m)l(θ) であり、J(θ) が最小になるときの θ が必要な最適値となります。パラメータ。勾配降下法により最小値を求めます。 θ の初期値はすべて 1.0 であり、更新プロセスは次のとおりです:

(j はサンプルの j 番目の属性、合計 n を表します。a はステップ サイズ、つまり各動きのサイズを表します)自由に指定可能)



したがって、θの更新処理(初期値はすべて1.0に設定できます)は次のように記述できます。


(i は i 番目の統計サンプルを表し、j はサンプルの j 番目の属性を表します。a はステップ サイズを表します)

この式は、収束に達するまで繰り返し実行されます () 各ステップでの反復中に減少します。あるステップの減少値が非常に小さい値 より小さい場合 (0.001 未満)、収束していると判断されます)、または特定の停止条件 (たとえば、反復回数が特定の指定値に達するか、アルゴリズムが特定の許容誤差範囲に達します)。

2、ベクトル化ソリューション

ベクトル化では、for ループの代わりに行列計算を使用して、計算プロセスを簡素化し、効率を向上させます。上の式に示されているように、Σ(...) は合計処理であり、明らかに for ステートメントを m 回ループする必要があるため、ベクトル化は完全に実装されていません。ベクトル化のプロセスを以下に紹介します。

トレーニング データの行列形式は次のとおりであることが合意されています。 g(A) のパラメーター A は列ベクトルなので、g 関数を実装するとき。の場合、列ベクトルをパラメーターとしてサポートし、列ベクトルを返す必要があります。上式から、g(A)-y から hθ(x)-y を 1 ステップで計算できることがわかります。

θ 更新プロセスは次のように変更できます:

まとめると、ベクトル化後の θ 更新の手順は次のとおりです。
(1)探すA=X *θ(ここでは行列の乗算、 ) E=g(A)-y を求めます (E、y は (m,1) 次元の列ベクトルです)


(3)

を求めます (a はステップ サイズを表します) )

3、ステップ

a の選択も、勾配降下法を確実に収束させるための重要なポイントです。値が小さすぎると収束が遅くなり、値が大きすぎると反復プロセスの収束 (最小値を通過する) が保証されなくなります。勾配降下法アルゴリズムが正しく動作することを保証するには、反復ごとに J(θ) が確実に減少するようにする必要があります。ステップ サイズ a の値が正しければ、J(θ) はどんどん小さくなるはずです。したがって、a の値を判断する基準は、J(θ) が小さくなればその値は正しいことを示し、そうでなければ a の値を小さくすることになります。

ステップ サイズ a を選択する経験は次のとおりです。反復が正常に続行できない場合 (J が増加すると、ステップ サイズが大きすぎ、ボウルの底を超えてしまいます)、毎回、前の数値の約 3 倍の値を選択します。 )、収束が遅い場合は、より小さいステップ サイズの使用を検討してください。値の例は、

…、0.001、0.003、0.01、0.03、0.1、0.3、1…です。

4、固有値の正規化

ロジスティック回帰は、勾配法を使用して多次元特徴トレーニングデータを回帰する場合、その固有値をスケーリングして、その値の範囲を確保する必要があります。計算プロセスは同じスケール内でのみ収束します (特徴値の値の範囲は大きく異なる場合があるため、たとえば、特徴 1 の値は (1000-2000)、特徴 2 の値は (1000-2000) です。 (0.1-0.2))。特徴スケーリングの方法はカスタマイズできます:

1) 平均正規化 (または標準化)

(X - means(X))/std(X)、std(X) は、サンプルの標準 差

2) リスケーリング

(X - min) / (max - min)

5、アルゴリズムの最適化 - 確率的勾配法

勾配上昇 (下降) ) それぞれのアルゴリズム 回帰係数を更新するたびに、データ セット全体を走査する必要があります。この方法は、約 100 のデータ セットを処理する場合には許容できますが、数十億のサンプルと数万の特徴がある場合、この方法の計算は複雑すぎます。高い。 。改良された方法は、一度に 1 つのサンプル ポイントのみを使用して回帰係数を更新することであり、これは確率的勾配アルゴリズムと呼ばれます。新しいサンプルが到着すると分類器は段階的に更新できるため、バッチ処理のためにデータ セット全体を再度読み取る必要がなく、新しいデータが到着するとパラメーターの更新を完了できます。したがって、確率的勾配アルゴリズムはオンライン学習アルゴリズムです。 (「オンライン学習」に相当し、全てのデータを一度に処理することを「バッチ処理」といいます。)確率的勾配アルゴリズムは勾配アルゴリズムと同等ですが、計算効率がより優れています。

(3) Python でのロジスティック回帰アルゴリズムの実装

前のセクションでは、Andrew Ng のアルゴリズムを通じて J(θ)=-(1/m)l(θ) を解く勾配降下法を使用したロジスティック回帰について説明しました。もちろん、このセクションの Python の解法プロセスでは、J(θ) を解くために勾配上昇法または確率的勾配上昇法を直接使用します。LRTrain オブジェクトも問題を解決するために勾配上昇法または確率的勾配上昇法を実装します。

LR 分類器学習パッケージには、lr.py/object_json.py/test.py の 3 つのモジュールが含まれています。 lr モジュールは、オブジェクト logisticRegres を通じて LR 分類器を実装し、gradAscent('Grad') と randomGradAscent('randomGrad') という 2 つのソリューション メソッドをサポートします (2 つのうちの 1 つを選択します。classifierArray は 1 つの分類ソリューション結果のみを保存します。もちろん、保存することもできます) 2 つの classifierArray を定義すると、両方の解決方法がサポートされます)。

このテスト モジュールは、LR 分類器を使用してヘルニアの症状に基づいて病気の馬の死亡率を予測するアプリケーションです。このデータには問題があります。このデータには 30% の損失率があり、0 は LR 分類器の重み更新に影響を与えないため、特別な値 0 に置き換えられます。

トレーニングデータ内のサンプル特徴値の部分的な欠落は非常に厄介な問題であり、データを直接捨てるのは残念であり、コストもかかるため、多くの文献がこの問題の解決に注力しています。それを再取得します。欠損データを処理するためのオプションの方法には次のものがあります。

□ 欠損値を埋めるために利用可能な特徴の平均を使用します。

□ 欠損値を修正するには、

などの特別な値を使用します。

□ 欠損値のあるサンプルを無視します。

□ 類似したサンプルの平均を使用して欠損値を埋めます。

□ 別の機械学習アルゴリズムを使用して欠損値を予測します。

LR分類器アルゴリズム学習パッケージのダウンロードアドレスは:

機械学習 ロジスティック回帰

(4) ロジスティック回帰アプリケーション

ロジスティック回帰の主な用途:

探しています危険因子の場合: 特定の病気などの危険因子を探します。

予測: モデルに従って、さまざまな独立変数の下で特定の病気または状況の確率を予測します。

識別: 上記。これは、ある人が特定の病気または特定の状態に属する確率を決定する、つまり、その人が特定の病気に属する可能性を確認するためのモデルにもある程度似ています。

ロジスティック回帰は主に疫学で使用され、特定の病気の危険因子を調査したり、危険因子に基づいて特定の病気の確率を予測したりする場合に使用されます。たとえば、胃がんの危険因子を調査したい場合は、2 つのグループの人々を選択できます。1 つは胃がんグループ、もう 1 つは非胃がんグループです。この 2 つのグループの人々は、異なる身体的特性を持っている必要があります。サインとライフスタイル。ここでの従属変数は、胃がんであるかどうか、つまり「はい」か「いいえ」です。独立変数には、年齢、性別、食習慣、ヘリコバクター・ピロリ感染など、多くの変数が含まれます。独立変数は連続変数またはカテゴリ変数のいずれかになります。


関連する推奨事項:

最大値を計算するためのロジスティック回帰ラダー降下計算

LRの深い理解

機械学習に一般的に使用されるアルゴリズム (LDA、CNN、LR) 原理の概要

LR 導出

以上がPython は LR クラシック アルゴリズムを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート