私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
ロジスティック回帰は一般的に使用される統計学習方法であり、主に分類問題を解決するために使用されます。名前に「回帰」という言葉が含まれていますが、実際には分類アルゴリズムです。
これは、ロジスティック回帰の最も基本的で一般的な使用法です。イベントが発生し、出力結果が「はい」または「いいえ」になるかどうかを予測できます。
例えば:
これらの例にはすべて共通の特徴があります。つまり、結果は true (1) と false (0) の 2 つだけです。
ロジスティック回帰は、One-vs-Rest やソフトマックスなどの方法を通じて、複数カテゴリの分類問題に拡張できます。
例えば:
これらの例にはすべて共通の特徴があります。つまり、一般的な多肢選択式の質問と同様に、同じオブジェクトには複数の可能な結果がありますが、答えに最もよく適合する選択肢は 1 つだけです。
ロジスティック回帰は分類結果を与えるだけでなく、確率値も出力するため、多くのシナリオで非常に役立ちます。
例えば:
これらの例にはすべて、予測という共通の機能があります。つまり、既知の結果を使用して未知の結果を推定します。
あなたが医師で、患者が特定の病気に罹患しているかどうかを判断する必要があると想像してください。ロジスティック回帰は、この判断を支援するインテリジェントなアシスタントのようなものです。医師が患者のさまざまな身体検査指標を調べるのと同じように、ロジスティック回帰では複数の関連する要因 (これらを特徴と呼びます) が考慮されます。一部の指標は他の指標よりも重要な場合があります。ロジスティック回帰では、各要素に「重み」を割り当て、その重要性を反映します。最後に、単に「はい」または「いいえ」を言うのではなく、確率を示します。たとえば、「この患者が病気にかかる確率は 70% です。」たとえば、50% を超えた場合は「はい」とみなされ、それ以外の場合は「いいえ」とみなされます。ロジスティック回帰は、多数の既知のケースから「学習」します。医師が数多くの症例を経験して経験を積むのと同じです。
もちろん、ロジスティック回帰の役割はこれをはるかに超えており、スペースによって制限されます (本当はただ怠けたいだけなんだ)、あまり多くの紹介はしません。
私個人としては、長々とたくさんの数式を提示して、その根底にある原理はこの数式ですと言って、自分でゆっくり理解してもらう、というのは好きではありません。私が望んでいるのは、いくつかの核となる公式を分析できることと、これらのいくつかの公式を使用する必要がある理由について、私の記事で明確に説明できることです。
y = b0 + b1x1 + b2x2 + ... + bn*xn
コードがわからなくても写真を見てください。
- import matplotlib.pyplot as plt
- import numpy as np
- import matplotlib.font_manager as fm
-
- # Generate some simulated house data
- np.random.seed(0)
- area = np.random.rand(100) * 200 + 50 # House area (square meters)
- price = 2 * area + 5000 + np.random.randn(100) * 500 # House price (ten thousand yuan)
-
- # Fit the data using linear regression
- from sklearn.linear_model import LinearRegression
- model = LinearRegression()
- model.fit(area.reshape(-1, 1), price)
-
- # Get the regression coefficients
- b0 = model.intercept_
- b1 = model.coef_[0]
-
- # Plot the scatter plot
- plt.scatter(area, price, label="House Data")
-
- # Plot the regression line
- plt.plot(area, b0 + b1*area, color="red", label="Linear Regression")
-
- # Set the plot title and axis labels
- plt.title("Linear Regression of House Area and Price")
-
- # Set the font to SimSun (楷体)
- font_prop = fm.FontProperties(fname=r"C:WindowsFontssimkai.ttf", size=12) # Replace with your SimSun font path
-
- plt.xlabel("House Area (Square Meters)", fontproperties=font_prop)
- plt.ylabel("House Price (Ten Thousand Yuan)", fontproperties=font_prop)
-
- # Add legend
- plt.legend()
-
- # Show the plot
- plt.show()
1. 100軒の住宅シミュレーションデータを生成
- np.random.seed(0)
- area = np.random.rand(100) * 200 + 50
- price = 2 * area + 5000 + np.random.randn(100) * 500
2. 線形回帰を使用してデータを当てはめます
- from sklearn.linear_model import LinearRegression
- model = LinearRegression()
- model.fit(area.reshape(-1, 1), price)
3.回帰係数(b0~bn)を求める
- b0 = model.intercept_
- 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. フォントを斜体に設定し、フォント サイズ (存在する場合) を設定します。
- font_prop = fm.FontProperties(fname=r"C:WindowsFontssimkai.ttf", size=12)
- plt.xlabel("House Area (Square Meters)", fontproperties=font_prop)
- plt.ylabel("House Price (Ten Thousand Yuan)", fontproperties=font_prop)
8. 凡例を追加する
plt.legend()
9. チャートを表示する
plt.show()
このコードは、線形回帰を使用して住宅面積と価格の関係を当てはめます (エラーを避けるために、水平方向と垂直方向のタイトルは英語で記述されています)。
「なぜこれほど大量のデータが生成されるのでしょうか?」と疑問に思う人もいるかもしれません。
いい質問ですね~
これらのデータを使用して、大まかに計算できますか? y = b0 + b1x1 + b2x2 + ... + bn*xn 係数はどうでしょうか?
具体的には:
大量のデータを収集することで、線形回帰モデルを使用してこれらの係数を計算し、予測モデルを構築できます。このモデルは、ターゲット変数に対するさまざまな要因の影響を理解し、将来のターゲット変数の値を予測するのに役立ちます (数学における y = kx + b と同様です。特定の k と b を使用して、x を取得することで y を予測できます)違いは、ここではより多くの係数 k があることです)
σ(x) = 1 / (1 + exp(-x))
sig 関数のイメージは次のようになります。
前に述べたように、ロジスティック回帰の最も基本的な使用法は、二項分類問題を解決することです。
ロジスティック回帰の目的は、線形モデルの出力 (任意の実数) を、イベントが発生する可能性を表す確率値に変換することです。確率値は当然 0 から 1 の範囲でなければなりません。
シグモイド関数はこのタスクを完全に実行します。線形モデルの出力を 0 から 1 の間に圧縮し、入力値が増加するにつれて出力値も徐々に増加します。これは、確率値の変化傾向と一致します。
sig の関数を見てください。正の無限大に近づくと、無限に 1 に近づきます。これは、0 または 1 の問題に当てはまります。
では、誰かがもう一度言いたいのですが、それならあなたは間違っています。両辺は無限に近づくことができると言われていますが、例えば 0.5 は 0 と 1 の間にあるのに、0.5 は 0 に近いと言います。それとも1に近づいているのでしょうか?
真ん中の数字は近づけないと言われていますが、人為的に設定することはできますよ~
たとえば、0.5 以上の数値を 1 のカテゴリーに、0.5 未満の数値を 0 のカテゴリーに入れると、問題は解決します~
したがって、0.5 は臨界点ではなく、分類のために人為的に設定した閾値です。
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 交換する
それで、これは何をするのでしょうか?
よし、見てみましょう〜
ロジスティック回帰の本質は、出来事が起こる確率を予測する 。データを直接分類するのではなく、関数 (シグモイド関数) を通じて線形回帰の結果を 0 ~ 1 の区間にマッピングします。この区間の値はイベントが発生する可能性を表します。
ロジスティック回帰の基礎は線形回帰です。線形回帰では、線形モデルを構築し、データを線形関数で近似して予測値を取得しようとします。この予測値は任意の値にすることができ、0 ~ 1 の範囲に制限されません。
シグモイド関数は、線形回帰で得られた予測値を0~1の区間に変換する「魔法」の関数で、この区間の値を事象が発生する確率として解釈できます。
バイナリ分類を実行するには、しきい値 (通常は 0.5) を設定する必要があります。予測確率が閾値より大きければ陽性クラスと判定し、そうでない場合は陰性クラスと判定する。
例えば:
左側の関数は線形回帰関数として見ることができ、右側の関数はマップされたシグモイド関数です。