ロジスティック回帰を用いた分類

ロジスティック回帰を用いた分類

[[345345]]

ロジスティック回帰は機械学習でよく使われる手法です。教師あり機械学習に属します。ロジスティック回帰の名前には「回帰」という言葉が含まれていますが、実際には分類手法です。この記事では、ロジスティック回帰を分類に使用する方法を紹介します。

まず、ロジスティック回帰の基本原理を紹介します。

図1. ロジスティック関数グラフ

ロジスティック回帰は、ロジスティック関数(シグモイド関数とも呼ばれる)を使用するため、「ロジック」と呼ばれます。ロジスティック関数の形式は図 2 の式 (1) に示され、グラフは図 1 に示されています。ロジスティック回帰は分類法なので、最も単純な2値分類を使って説明します。2値分類の出力はy = 0または1でマークされ、線形回帰によって生成される予測値はz = ω^Tx+bです。t = zとし、zの式を式(1)に代入して式(2)を取得し、変換して式(3)を取得します。 yは必要な正の例であり、1-yは負の例です。2つの比率は確率と呼ばれるため、式(3)は「対数確率」と呼ぶことができます。次に、最大尤度推定法を使用して ω と b を解く必要があります。 yを事後確率推定値p(y=1|x)とみなすと、図3の式(4)と(5)が得られます。次に、β = (ω; b)、x = (x; 1)とすると、式(6)が得られます。式(6)から、図4の(7)、(8)、(9)が得られます。(9)は目的関数です。目的関数を解くと、最適なパラメータが得られます。これらの導出はかなり複雑なので、ここでは主要な部分のみを記載しました。ご興味があれば、関連情報をご自身で調べてください。

図2 ロジスティック回帰の導出式(1)~(3)

図3 ロジスティック回帰の導出式(4)-(6)

図4. ロジスティック回帰の導出式(7)-(9)

ロジスティック回帰の基本原理を理解した後、例を使用してロジスティック回帰の使用方法を紹介しましょう。

この記事で使用するロジスティック回帰モデルは scikit-learn から取得したもので、使用するデータセットも scikit-learn から取得したものです。コードは次のとおりです。

  1. matplotlib.pyplot をpltとしてインポートします。
  2. sklearn.metricsからclassification_reportをインポート
  3. sklearn.datasetsからmake_classification をインポートします
  4. sklearn.linear_modelからLogisticRegression をインポートします
  5. sklearn.model_selectionからtrain_test_split をインポートします
  6.  
  7. X, y = make_classification(n_samples=100, n_features=2,
  8. n_informative=2、n_redundant=0、n_clusters_per_class=1、
  9. クラス_sep = 2.0、ランダム_状態 = 15)
  10. 図、ax = plt.subplots(figsize=(8, 6))
  11. plt.scatter(X[:, 0], X[:, 1], マーカー= 'o' , c=y)
  12. plt.xlabel( '機能1' )
  13. plt.ylabel( '機能2' )
  14. plt.show()


図 5. この例で使用されるデータ ポイント。

結果を図5に示します。このデータセットは、make_classification メソッドによって生成されます。100 個のポイントと 2 つの機能 (次元) があります。すべてのデータは 2 つのカテゴリに分けられます。図から、紫色の点が 1 つのカテゴリに分類され、黄色の点が別のカテゴリに分類されていることがわかります。次に、データセットをトレーニング セットとテスト セットに分割します。コードは次のとおりです。 X_train、X_test、y_train、y_test = train_test_split(X、y、test_size=0.30、random_state=30) です。

ここでは、テスト セット データの数を 30 に設定し、ランダム状態 random_state を 30 に設定します。この数は任意に設定できます。次に、ロジスティック回帰を使用してトレーニングと予測を実行し、classification_reportメソッドを使用して結果を出力します。

  1. model = LogisticRegression() #モデルの生成
  2. model.fit(X_train, y_train) # トレーニングデータを入力する
  3. y_predict = model.predict(X_test) # 予測データを出力する
  4. print(classification_report(y_test, y_predict)) #予測結果レポートを生成する

結果は図6に示されています。図 6 から、モデルの精度は 0.97 であることがわかります。テスト データは合計 30 個あるため、誤って予測したのは 1 点のみであり、モデルの分類効果が依然として非常に優れていることがわかります。

図6. モデル結果レポート

次に、モデルの分類効果についてさらに理解を深めていただくために、著者はここでさらに研究を進めます。ロジスティック回帰モデルの分類境界、つまりモデルが分割し始める場所を見てみましょう。コードは次のとおりです。

  1. step = 0.01 # 等価ステップ長。ポイントが小さいほど密度が高くなります。
  2. x_min = X[:, 0] .min () -1 #メッシュの境界を設定する
  3. x_max = X[:, 0] .max () + 1
  4. y_min = X[:, 1] .min () - 1
  5. y_max = X[:, 1] .max () + 1
  6. x_mesh、y_mesh = np.meshgrid(np.arange(x_min、x_max、ステップ)、np.arange(y_min、y_max、ステップ))
  7. data_mesh = np.stack([x_mesh.ravel(), y_mesh.ravel()], axis=-1) #メッシュを2列のデータに変換
  8. Z = モデル.予測(データメッシュ)
  9. Z = Z.reshape(x_mesh.shape)
  10. 図、ax = plt.subplots(figsize=(8,6))
  11. plt.pcolormesh(x_mesh, y_mesh, Z, cmap=plt.cm.cool) #メッシュの色を描画します
  12. plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.ocean)
  13. plt.show()

ここのコードは少し複雑なので、説明させてください。私たちの設計思想は、今回使用したロジスティック回帰モデルはバイナリ分類モデル、つまり結果が 2 つのカテゴリに分かれているため、モデル内の各カテゴリの領域を 1 つの色でマークし、2 つの色が存在するというものです。各領域に該当するポイントは、この領域、つまりこのクラスに属します。 x_mesh, y_mesh = np.meshgrid(np.arange(x_min, x_max, step), np.arange(y_min, y_max, step)) このコード行は、領域全体のポイント (つまり、2 つのクラスの領域の合計) を取得します。この領域は、使用するデータ セットの範囲よりも広くなっています。x_min、x_max、y_min、y_max は、領域全体の境界です。 data_mesh = np.stack([x_mesh.ravel(), y_mesh.ravel()], axis=-1) このコード行は、上のエリア全体のポイントを、後で予測できるように 2 列のデータに変換します。Z = model.predict(data_mesh) は、エリア内の各ポイントの予測値です。次に、plt.pcolormesh と plt.scatter を使用して、それぞれエリアの色とデータ ポイントの色を描画し、どのポイントがどのエリアにあるかを明確に確認できるようにします。結果を図7に示します。

図7. 異なるパーティション領域を異なる色で表す

結果から、緑色の点が間違った領域に入っていることがわかります。これは、この点が誤って予測されたことを示しています。これは、以前の分類レポートで得られた結果と一致しています。

ロジスティック回帰は機械学習で広く使用されており、良好な結果が得られますが、非線形問題を解決できない、多重共線性データに敏感である、データの不均衡の問題に対処するのが難しいなどの欠点もあります。その原理は私が紹介したものよりはるかに複雑です。深く理解したい読者は、関連情報を見つけて自分で学ぶことができます。

著者について: Mort はデータ分析愛好家で、データの視覚化が得意で、機械学習の分野に特に注目しています。業界の友人ともっと学び、コミュニケーションを取りたいと考えています。

<<:  トラックに「透明マント」を装着し、自動運転車を衝突させる。これは誰がより早く攻撃できるかを競う競争だ

>>:  2023年までにスマートホームとモノのインターネットは完全に相互運用可能になると予想されている。

ブログ    
ブログ    
ブログ    

推薦する

GPT-4 は生物兵器を作成できません! OpenAIの最新の実験では、大規模モデルはほぼ0であることが証明されている

GPT-4 は生物兵器の開発を加速させるでしょうか? AIが世界を支配することを心配する前に、人類は...

...

...

IoTとAIがスマートホームにもたらす効果

スマートシティ建設が国家戦略となり、ハイテクが急速に発展するにつれて、スマートシティはバージョン1....

NTRU 1.2 リリース Java 用 NTRU 暗号化アルゴリズム ライブラリ

NTRU 1.2 バージョンには多くの機能強化とバグ修正が含まれていますが、このバージョンは以前のバ...

...

...

機械学習を予知保全に適用するにはどうすればよいでしょうか?

機械学習と産業用 IoT (IIoT) デバイスから収集されたデータを組み合わせることで、プロセスの...

...

1780億のパラメータを持つこの言語モデルは、王者GPT-3に挑戦するためだけに作られたのでしょうか?

誰かがGPT-3の独占に挑戦しなければなりません! GPT-3 は発売以来、最大の AI 言語モデル...

...

看護ロボットは医療従事者の仕事に完全に取って代わることができるのでしょうか?

研究によると、共感と前向きな指導は、医師が患者の痛みを和らげ、術後の回復を早め、精神科薬の使用を減ら...

...