技術共有

ロジスティック回帰 (純粋理論)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. ロジスティック回帰とは何ですか?

ロジスティック回帰は一般的に使用される統計学習方法であり、主に分類問題を解決するために使用されます。名前に「回帰」という言葉が含まれていますが、実際には分類アルゴリズムです。

2. 機械学習ではなぜロジスティック回帰を使用する必要があるのですか?

1.二項分類

これは、ロジスティック回帰の最も基本的で一般的な使用法です。イベントが発生し、出力結果が「はい」または「いいえ」になるかどうかを予測できます。

例えば:

  • ユーザーが広告をクリックするかどうかを予測する
  • 電子メールがスパムかどうかを判断する
  • 患者が病気に罹患しているかどうかを診断する

これらの例にはすべて共通の特徴があります。つまり、結果は true (1) と false (0) の 2 つだけです。

2. 複数カテゴリの分類

ロジスティック回帰は、One-vs-Rest やソフトマックスなどの方法を通じて、複数カテゴリの分類問題に拡張できます。

例えば:

  • 画像認識における物体分類
  • テキスト分類(ニュース分類、センチメント分析など)

これらの例にはすべて共通の特徴があります。つまり、一般的な多肢選択式の質問と同様に、同じオブジェクトには複数の可能な結果がありますが、答えに最もよく適合する選択肢は 1 つだけです。

3. 確率の予測

ロジスティック回帰は分類結果を与えるだけでなく、確率値も出力するため、多くのシナリオで非常に役立ちます。

例えば:

  • 顧客が製品を購入する確率を予測する
  • ローン申請者の債務不履行リスクの確率を評価する

これらの例にはすべて、予測という共通の機能があります。つまり、既知の結果を使用して未知の結果を推定します。

ロジスティック回帰の役割を理解していなくても、わかりやすい例を示しますので、問題ありません。

あなたが医師で、患者が特定の病気に罹患しているかどうかを判断する必要があると想像してください。ロジスティック回帰は、この判断を支援するインテリジェントなアシスタントのようなものです。医師が患者のさまざまな身体検査指標を調べるのと同じように、ロジスティック回帰では複数の関連する要因 (これらを特徴と呼びます) が考慮されます。一部の指標は他の指標よりも重要な場合があります。ロジスティック回帰では、各要素に「重み」を割り当て、その重要性を反映します。最後に、単に「はい」または「いいえ」を言うのではなく、確率を示します。たとえば、「この患者が病気にかかる確率は 70% です。」たとえば、50% を超えた場合は「はい」とみなされ、それ以外の場合は「いいえ」とみなされます。ロジスティック回帰は、多数の既知のケースから「学習」します。医師が数多くの症例を経験して経験を積むのと同じです。

もちろん、ロジスティック回帰の役割はこれをはるかに超えており、スペースによって制限されます (本当はただ怠けたいだけなんだ)、あまり多くの紹介はしません。

3.OK、ロジスティック回帰の公式を導入しましょう

私個人としては、長々とたくさんの数式を提示して、その根底にある原理はこの数式ですと言って、自分でゆっくり理解してもらう、というのは好きではありません。私が望んでいるのは、いくつかの核となる公式を分析できることと、これらのいくつかの公式を使用する必要がある理由について、私の記事で明確に説明できることです。

1. 線形回帰式

y = b0 + b1x1 + b2x2 + ... + bn*xn

  • ええは従属変数、つまり予測したい値です。
  • 0 ...は切片で、すべての独立変数が 0 の場合の従属変数の値を示します。
  • b1、b2、...、bnは回帰係数であり、各独立変数が従属変数に及ぼす影響の程度を示します。
  • x1、x2、...、xn独立変数、つまり従属変数を予測するために使用される値です

これは線形回帰の例です

コードがわからなくても写真を見てください。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import matplotlib.font_manager as fm
  4. # Generate some simulated house data
  5. np.random.seed(0)
  6. area = np.random.rand(100) * 200 + 50 # House area (square meters)
  7. price = 2 * area + 5000 + np.random.randn(100) * 500 # House price (ten thousand yuan)
  8. # Fit the data using linear regression
  9. from sklearn.linear_model import LinearRegression
  10. model = LinearRegression()
  11. model.fit(area.reshape(-1, 1), price)
  12. # Get the regression coefficients
  13. b0 = model.intercept_
  14. b1 = model.coef_[0]
  15. # Plot the scatter plot
  16. plt.scatter(area, price, label="House Data")
  17. # Plot the regression line
  18. plt.plot(area, b0 + b1*area, color="red", label="Linear Regression")
  19. # Set the plot title and axis labels
  20. plt.title("Linear Regression of House Area and Price")
  21. # Set the font to SimSun (楷体)
  22. font_prop = fm.FontProperties(fname=r"C:WindowsFontssimkai.ttf", size=12) # Replace with your SimSun font path
  23. plt.xlabel("House Area (Square Meters)", fontproperties=font_prop)
  24. plt.ylabel("House Price (Ten Thousand Yuan)", fontproperties=font_prop)
  25. # Add legend
  26. plt.legend()
  27. # Show the plot
  28. plt.show()

1. 100軒の住宅シミュレーションデータを生成

  1. np.random.seed(0)
  2. area = np.random.rand(100) * 200 + 50
  3. price = 2 * area + 5000 + np.random.randn(100) * 500

2. 線形回帰を使用してデータを当てはめます

  1. from sklearn.linear_model import LinearRegression
  2. model = LinearRegression()
  3. model.fit(area.reshape(-1, 1), price)

3.回帰係数(b0~bn)を求める

  1. b0 = model.intercept_
  2. b1 = model.coef_[0]

4. 散布図を描く

plt.scatter(area, price, label="House Data")

5. 回帰直線を引く

plt.plot(area, b0 + b1*area, color="red", label="Linear Regression")

6.記事タイトルを設定する

plt.title("Linear Regression of House Area and Price")

7. フォントを斜体に設定し、フォント サイズ (存在する場合) を設定します。

  1. font_prop = fm.FontProperties(fname=r"C:WindowsFontssimkai.ttf", size=12)
  2. plt.xlabel("House Area (Square Meters)", fontproperties=font_prop)
  3. plt.ylabel("House Price (Ten Thousand Yuan)", fontproperties=font_prop)

8. 凡例を追加する

plt.legend()

9. チャートを表示する

plt.show()

このコードは、線形回帰を使用して住宅面積と価格の関係を当てはめます (エラーを避けるために、水平方向と垂直方向のタイトルは英語で記述されています)。

実行結果は次のとおりです。

「なぜこれほど大量のデータが生成されるのでしょうか?」と疑問に思う人もいるかもしれません。

いい質問ですね~

これらのデータを使用して、大まかに計算できますか? y = b0 + b1x1 + b2x2 + ... + bn*xn 係数はどうでしょうか?

具体的には:

  • y は、住宅価格など、予測したいターゲット変数を表します。
  • x1、x2、...xn は、家の面積、部屋の数、地理的位置など、ターゲット変数に影響を与える要因を表します。
  • b0、b1、b2、...bn は目的変数に対する各因子の影響度を表し、計算したい係数です。

大量のデータを収集することで、線形回帰モデルを使用してこれらの係数を計算し、予測モデルを構築できます。このモデルは、ターゲット変数に対するさまざまな要因の影響を理解し、将来のターゲット変数の値を予測するのに役立ちます (数学における y = kx + b と同様です。特定の k と b を使用して、x を取得することで y を予測できます)違いは、ここではより多くの係数 k があることです)

2.シグモイド関数の公式

σ(x) = 1 / (1 + exp(-x))

sig 関数のイメージは次のようになります。

質問 1: シグモイド関数を選択する理由は何ですか?

前に述べたように、ロジスティック回帰の最も基本的な使用法は、二項分類問題を解決することです。

ロジスティック回帰の目的は、線形モデルの出力 (任意の実数) を、イベントが発生する可能性を表す確率値に変換することです。確率値は当然 0 から 1 の範囲でなければなりません。

シグモイド関数はこのタスクを完全に実行します。線形モデルの出力を 0 から 1 の間に圧縮し、入力値が増加するにつれて出力値も徐々に増加します。これは、確率値の変化傾向と一致します。

sig の関数を見てください。正の無限大に近づくと、無限に 1 に近づきます。これは、0 または 1 の問題に当てはまります。

質問 2: シグモイド関数を分類するにはどうすればよいですか?

では、誰かがもう一度言いたいのですが、それならあなたは間違っています。両辺は無限に近づくことができると言われていますが、例えば 0.5 は 0 と 1 の間にあるのに、0.5 は 0 に近いと言います。それとも1に近づいているのでしょうか?

真ん中の数字は近づけないと言われていますが、人為的に設定することはできますよ~

たとえば、0.5 以上の数値を 1 のカテゴリーに、0.5 未満の数値を 0 のカテゴリーに入れると、問題は解決します~

したがって、0.5 は臨界点ではなく、分類のために人為的に設定した閾値です。

3. ロジスティック回帰式

p = σ(b0 + b1*x1 + b2*x2 + ... + bn*xn) = 1 / (1 + exp(-(b0 + b1*x1 + b2*x2 + ... + bn*xn)))

この公式を紹介するためだけに、これまで多くのことを述べてきました。

見ているだけで頭が痛くなりませんか?見ているだけで頭が痛くなるので、簡略化してみませんか~

ほら、このほうが爽やかな感じで、着飾るのが苦手なイケメンがちょっと身だしなみを整えたら、この人、すごくイケメンになったんだよね~。

えっと、話が逸れました~それではロジスティック回帰は実際には線形回帰 + シグモイド関数です

シグモイド関数の z は線形回帰を使用します y = b0 + b1x1 + b2x2 + ... + bn*xn 交換する

それで、これは何をするのでしょうか?

よし、見てみましょう〜

4. ロジスティック回帰の本質と機能

ロジスティック回帰の本質は、出来事が起こる確率を予測する 。データを直接分類するのではなく、関数 (シグモイド関数) を通じて線形回帰の結果を 0 ~ 1 の区間にマッピングします。この区間の値はイベントが発生する可能性を表します。

ロジスティック回帰の基礎は線形回帰です。線形回帰では、線形モデルを構築し、データを線形関数で近似して予測値を取得しようとします。この予測値は任意の値にすることができ、0 ~ 1 の範囲に制限されません。

シグモイド関数は、線形回帰で得られた予測値を0~1の区間に変換する「魔法」の関数で、この区間の値を事象が発生する確率として解釈できます。

バイナリ分類を実行するには、しきい値 (通常は 0.5) を設定する必要があります。予測確率が閾値より大きければ陽性クラスと判定し、そうでない場合は陰性クラスと判定する。

例えば:

左側の関数は線形回帰関数として見ることができ、右側の関数はマップされたシグモイド関数です。

この記事の写真はすべて出典【機械学習】ロジスティック回帰が10分でわかりやすく学べる(スパーク解法含む)_bilibili_bilibili