ホームページ  >  記事  >  バックエンド開発  >  Pythonの勾配降下法アルゴリズムを詳しく解説

Pythonの勾配降下法アルゴリズムを詳しく解説

WBOY
WBOYオリジナル
2023-06-10 14:30:152603ブラウズ

勾配降下法は一般的に使用される最適化アルゴリズムであり、機械学習で広く使用されています。 Python はデータ サイエンスに最適なプログラミング言語であり、勾配降下法アルゴリズムを実装するための既製のライブラリが多数あります。この記事では、Python の勾配降下法アルゴリズムについて、概念や実装を含めて詳しく紹介します。

1. 勾配降下法の定義
勾配降下法は、関数のパラメーターを最適化するために使用される反復アルゴリズムです。機械学習では通常、損失関数を最小化するために勾配降下法を使用します。したがって、勾配降下法は関数を最小化する方法と考えることができます。勾配降下法アルゴリズムは、線形回帰、ロジスティック回帰、ニューラル ネットワークなど、勾配を計算できるあらゆるシステムで使用できます。

2. 勾配降下の原理
勾配降下アルゴリズムの基本原理は、関数の最小値を見つけることです。通常、関数の最小値は、関数のパラメーターの関数の最小値と考えられます (パラメーターとは、最適化する必要がある変数を指します)。したがって、パラメーター関数の導関数を計算する必要があります。導関数を使用して関数の現在の傾きを決定し、それに学習率を乗算して、次に進むべき方向を決定します。関数の導関数がゼロの場合、関数の最小値が見つかったことになります。実際のアプリケーションでは、関数の大域最小値が見つかることを保証する必要はなく、局所最小値を見つけるだけで十分です。

3. 勾配降下法アルゴリズムの手順
1. パラメーターを初期化します。最適化関数に必要なパラメータを初期値に設定する必要があります。たとえば、パラメータをゼロまたは乱数に設定します。
2. 損失関数を計算します。指定されたパラメーターを使用して損失関数を計算します。
3. 勾配を計算します。損失関数の勾配を計算します。勾配は、現在のパラメータの下での関数の傾きを示します。
4. パラメータを更新します。グラデーションに基づいてパラメータを更新します。更新されたパラメーターにより、損失関数が最適解に近づきます。
5. 停止条件が満たされるまで手順 2 ~ 4 を繰り返します。停止条件は、特定の反復回数に達するか、特定の最適化レベルに達することです。

4. Python で勾配降下法 (バッチ勾配降下法) を実装する
次に、Python でバッチ勾配降下法アルゴリズムを実装する方法を紹介します。すべてのトレーニング サンプルを一度に処理するのに十分なメモリがあると仮定します。

データの準備
バッチ勾配降下法を実装するためのサンプル データとして、sklearn の組み込みデータセット IRIS を使用します。以下は、使用する必要がある Python パッケージと、データ セットをインポートするためのコードです。

from sklearn.datasets import load_iris
import numpy as np

iris = load_iris()
X = iris.data
y = iris.target

データ前処理
バッチ勾配降下法を実行する前に、データを正規化する必要があります。これは、各特徴の平均と標準偏差を計算することで実行できます。

mean = np.mean(X,axis=0)
std = np.std(X,axis=0)
X = (X - mean)/std

損失関数を定義する
二乗誤差関数をモデルの損失関数として使用します。私たちの損失関数は次のとおりです。

def loss_function(X,y,theta):
    m = len(y)
    predictions = np.dot(X,theta)
    cost = (1/(2*m)) * np.sum((predictions-y)**2)
    return cost

トレーニング関数を定義する
次に、バッチ勾配降下法アルゴリズムを実装する関数を定義します。

def gradient_descent(X,y,theta,learning_rate,num_iterations):
    m = len(y)
    cost_history = np.zeros(num_iterations)
    theta_history = np.zeros((num_iterations,theta.shape[0]))
    for i in range(num_iterations):
        prediction = np.dot(X,theta)
        theta = theta - (1/m)*learning_rate*(X.T.dot((prediction - y)))
        theta_history[i,:] = theta.T
        cost_history[i]  = loss_function(X,y,theta)
        
    return theta, cost_history, theta_history

トレーニング関数の実行
モデル トレーニング関数を実行し、最終モデルのコスト値とパラメーター値を出力し、トレーニング データをモデルに適合させます。

theta = np.zeros(X.shape[1])
learning_rate = 0.1
num_iterations = 1000
theta,cost_history,theta_history = gradient_descent(X,y,theta,learning_rate,num_iterations)

print('Theta: ',theta)
print('Final cost/MSE: ',cost_history[-1])

5. 概要
この記事では、Python の勾配降下法アルゴリズムについて、概念と実装を含めて説明します。まず、勾配降下法アルゴリズムの定義と原理を紹介し、次に勾配降下法アルゴリズムの手順を詳細に説明します。最後に、バッチ勾配降下法を実装し、サンプル データ セットを実行して、トレーニングされたモデルとそのコストを取得しました。

勾配降下法アルゴリズムは機械学習において不可欠な知識ポイントであり、Python はデータ サイエンスで最も広く使用されているプログラミング言語の 1 つであるため、Python で勾配降下法アルゴリズムを学習することは非常に重要です。この記事が Python の勾配降下アルゴリズムを学ぶのに役立つことを願っています。

以上がPythonの勾配降下法アルゴリズムを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。