Python と PyTorch の線形回帰モデルの詳細な実装: 基本的な機械学習テクノロジーを完全に理解するための記事

1 はじめに

1.1 線形回帰モデルの概要

ファイル

線形回帰は、2 つ以上の変数間の関係をモデル化するために使用される統計における予測分析です。線形回帰では、最適直線 (回帰直線とも呼ばれます) を使用して、独立 (入力) 変数と従属変数 (出力) の間の直感的な関係を確立します。単純線形回帰は入力変数と出力変数の間の線形関係であり、多重線形回帰は複数の入力変数と出力変数の間の線形関係です。

1.2 Python と PyTorch の概要

ファイル

Python は強力なプログラミング言語であり、特にビッグ データの処理と分析に適しており、さまざまな科学技術コンピューティングで広く使用されています。Python には、NumPy、Pandas、Matplotlib など、さまざまな高度な機能を簡単に実装できるライブラリが多数あります。

PyTorch は、Torch に基づくオープンソースの Python 機械学習ライブラリです。これは主に、深層学習アルゴリズムを実装するために Facebook の AI 研究チームによって開発されました。PyTorch は、GPU または CPU で計算できる基本データ構造としてテンソルを使用します。計算グラフを動的に定義する機能により、PyTorch はモデルの作成とデバッグにおいてさらに有利になります。

次のセクションでは、Python と PyTorch ライブラリを使用して線形回帰モデルを実装します。

2. ツールとライブラリの準備

線形回帰モデルの実装を開始する前に、関連するツールとライブラリを準備する必要があります。プログラミング言語として Python を使用し、メインの深層学習ライブラリとして PyTorch を使用します。

2.1 Pythonの環境構成

まず、Python をインストールする必要があります。Python がコンピュータにインストールされていない場合は、Python の公式 Web サイト: https://www.python.org/downloads/ からダウンロードできます
。インストールが完了したら、次のコマンドを実行して Python が正常にインストールされたことを確認できます。コマンドライン:

python --version

Python のバージョン番号が表示されるはずです。Python が正常にインストールされたら、必要な Python ライブラリのインストールを開始できます。これらのライブラリには、NumPy、Pandas、Matplotlib、および PyTorch が含まれます。

2.2 PyTorch のインストールと使用の概要

次に、PyTorch ライブラリをインストールする必要があります。PyTorch のインストール プロセスは、オペレーティング システムと CUDA がインストールされているかどうかによって異なります (GPU で PyTorch を実行する予定の場合は、CUDA が必要になります)。詳細なインストール ガイドは、PyTorch の公式 Web サイト (https://pytorch.org/get-started/locally/) で見つけることができます。

コマンド ラインで次のコマンドを実行し、環境に応じて適切なコマンドを選択します。

# For CPU only
pip install torch==1.9.0+cpu torchvision==0.10.0+cpu torchaudio===0.9.0 -f https://download.pytorch.org/whl/torch_stable.html

# For CUDA 10.2
pip install torch==1.9.0+cu102 torchvision==0.10.0+cu102 torchaudio===0.9.0 -f https://download.pytorch.org/whl/torch_stable.html

インストールが完了したら、次の Python コードを実行して、PyTorch が正常にインストールされたことを確認できます。

import torch
print(torch.__version__)

3. データの準備

3.1 データセットの概要

この例では、家のサイズと価格に関する情報を含む架空のデータセットを使用します。私たちの目標は、典型的な線形回帰問題であるエリアごとの住宅価格を予測することです。

次のデータがあるとします。

面積(平方メートル) 価格(10,000元)
50 300
60 360
70 420

3.2 データのロードと前処理

次に、データをロードして前処理する必要があります。これには通常、欠損値の処理、データの正規化などの手順が含まれます。この例では、すべてのデータが完全であり、欠損値の処理が必要ないことを前提としています。ただし、勾配降下法アルゴリズムをより速く収束させるには、データを正規化する必要があります。

import numpy as np

# 房屋面积
areas = np.array([50, 60, 70, ..., 120, 130, 140], dtype=float)

# 房价
prices = np.array([300, 360, 420, ..., 720, 780, 840], dtype=float)

# 数据规范化
areas = (areas - np.mean(areas)) / np.std(areas)
prices = (prices - np.mean(prices)) / np.std(prices)

上記のコードは、まず住宅面積と価格の配列を定義し、次に 2 つの配列の値が標準偏差 1 で 0 を中心に変動するように 2 つの配列を正規化します。この処理の利点は、勾配降下法の収束を高速化できることです。

4. 線形回帰の理論的基礎

このパートでは、線形回帰の数学モデルや勾配降下法など、線形回帰の基礎的な理論的知識を紹介します。

4.1 線形回帰モデルの式

線形回帰モデルの基本式は次のとおりです。

y = wx + b

このうち、y は予測するターゲット変数、x は特徴変数、w と b はモデル パラメーターであり、それぞれ重みとバイアスを表します。

4.2 損失関数と勾配降下法

モデルをトレーニングするには、モデルの予測と実際の値の差を測定する方法が必要です。これは損失関数 (コスト関数とも呼ばれます) です。線形回帰モデルの場合、通常、損失関数として平均二乗誤差 (MSE) を使用します。

L = 1/N * ∑(y_pred - y_actual)^2

このうち、y_pred はモデルの予測値、y_actual は実際の値、N はサンプル数です。

私たちの目標は、モデルのパラメーター w と b を調整することで損失関数を最小化することです。このプロセスは最適化と呼ばれます。勾配降下法は一般的な最適化手法であり、その動作原理は、パラメータに対する損失関数の勾配 (導関数) を計算し、勾配の逆方向にパラメータを調整して損失関数上に降下させることです。

5. PyTorch を使用して線形回帰モデルを実装する

これまでの理論的基盤が整ったので、PyTorch を使用して線形回帰モデルの実装を開始できます。

5.1 モデルの定義

まず、モデルを定義する必要があります。PyTorch では、torch.nn.Moduleクラスを継承してモデルを定義し、forward順伝播を定義するメソッドを実装できます。

import torch
import torch.nn as nn

class LinearRegressionModel(nn.Module):
    def __init__(self):
        super(LinearRegressionModel, self).__init__()
        self.linear = nn.Linear(1, 1)  # 输入和输出的维度都是1

    def forward(self, x):
        out = self.linear(x)
        return out

5.2 モデルクラスのインスタンス化

次に、モデルのインスタンスを作成できます。

model = LinearRegressionModel()

5.3 損失関数とオプティマイザの設定

次に、損失関数とオプティマイザーを定義します。損失関数として平均二乗誤差を使用し、オプティマイザーとして確率的勾配降下法を使用します。

criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

5.4 トレーニングモデル

最後に、モデルのトレーニングを開始できます。

# 转换为 PyTorch 张量
inputs = torch.from_numpy(areas)
targets = torch.from_numpy(prices)

# 转换为二维张量
inputs = inputs.view(-1,1)
targets = targets.view(-1,1)

# 进行 60 轮训练
for epoch in range(60):
    # 前向传播
    outputs = model(inputs)
    loss = criterion(outputs, targets)
    
    # 反向传播和优化
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    
    if (epoch+1) % 5 == 0:
        print ('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, 60, loss.item()))

上記のコードにより線形回帰モデルのトレーニング プロセスが完了し、トレーニング結果がコンソールに出力されます。

6. モデルの評価と予測

トレーニング後は、モデルのパフォーマンスを評価し、そのモデルを使用して予測を行う必要があります。

6.1 モデルの評価

まず、すべてのトレーニング データに対するモデルの平均損失を計算できます。

model.eval()  # 将模型设置为评估模式
with torch.no_grad():  # 不需要计算梯度
    predictions = model(inputs)
    loss = criterion(predictions, targets)
print('Final Loss:', loss.item())

ここでは、model.eval()モデルは評価モードに設定されているため、勾配を計算するときにドロップアウトやバッチ正規化などの操作は考慮されません。torch.no_grad()モデルの最適化を行う必要がないため、勾配を計算する必要がないことを PyTorch に伝えることです。

6.2 モデルの予測

トレーニングされたモデルを使用して予測を行ってみましょう。

# 预测一个 100 平方米的房子的价格
area = torch.tensor([100.0])
area = (area - torch.mean(inputs)) / torch.std(inputs)  # 需要进行同样的数据规范化
price = model(area)
print('Predicted price:', price.item())

上記のコードは、トレーニングされたモデルを使用して、100 平方メートルの住宅の価格を予測します。新しいデータを予測する場合、新しいデータに対してトレーニング データと同じ前処理操作を実行する必要があることに注意してください。

これまでに、理論的知識の学習、PyTorch を使用したモデルの実装とトレーニング、モデルの評価と予測を含む、線形回帰モデルのすべての内容が完了しました。

7. まとめ

私たちは完全な線形回帰モデルの構築、トレーニング、予測プロセスを完了しました。このプロセスでは、線形回帰モデルの基本的な理論的知識、PyTorch を使用して線形回帰モデルを実装する方法、トレーニングされたモデルを評価および使用する方法を学びました。

7.1 重要なポイントのまとめ

このホワイトペーパーでは、主に次のことを行いました。

  1. 線形回帰モデルの基本概念と数学的原理を紹介します。
  2. 線形回帰モデルのトレーニングと予測のプロセスは、Python と PyTorch を使用して実装されます。
  3. モデルのパフォーマンスを評価する方法を示します。

この学習を通じて、線形回帰モデルについて理解を深め、実際の問題で柔軟に使用できるようになることを願っています。

7.2 展望

線形回帰モデルは最も基本的な機械学習モデルですが、その考え方と手法は多くの複雑なモデルに反映されています。たとえば、ニューラル ネットワークは、線形回帰モデルを拡張し深めたものとみなすことができます。したがって、線形回帰モデルを理解して習得することは、より複雑な機械学習モデルを学習するために非常に重要です。

役立つ場合は、
WeChat の個人公開アカウントにもっと注目してください: [TechLead] AI およびクラウド サービスの研究開発に関する全次元の知識を共有し、TechLead としてのテクノロジーに対する独自の洞察について話します。
TeahLead KrisChang、インターネットおよび人工知能業界で 10 年以上の経験、テクノロジーおよびビジネス チーム管理で 10 年以上の経験、Tongji ソフトウェア エンジニアリング学士、復丹エンジニアリング管理マスター、Alibaba Cloud 認定クラウド サービス シニア アーキテクト、AI 製品ビジネス数億の収益元本。

おすすめ

転載: blog.csdn.net/magicyangjay111/article/details/131981675
おすすめ