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

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

[[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年までにスマートホームとモノのインターネットは完全に相互運用可能になると予想されている。

ブログ    
ブログ    
ブログ    

推薦する

...

...

独立サイトへのアクセス数が10万を超えました。YidiantianxiaのKreadoAIのサポートにより、海外のウィッグ市場でこのように活躍できることがわかりました。

近年、ウィッグ業界は海外進出のホットな分野として、国際市場で急速に台頭してきました。 Statist...

...

企業向けローコードAI開発プラットフォーム

ソフトウェアとアプリケーションは今日世界を支配しており、ビジネスを成功させるにはトレンドに遅れずにつ...

...

最新の NaViT モデルは最高です!あらゆるアスペクト比と解像度に対応する強力なトランスフォーマー

本日は、あらゆるアスペクト比と解像度で動作する Transformer モデルである NaViT を...

...

AIは地球上のあらゆる言語を翻訳できるよう自ら学習できる

fastcompany によると、最近登場した 2 つの機械翻訳システムは、人間が翻訳したテキストか...

アラスカ航空は人工知能を活用して時間、燃料、費用を節約

[[405121]] 【51CTO.com クイック翻訳】企業の AI プロジェクトの失敗率が 85...

マスク氏のニューラリンクが人間の脳にインターフェースを挿入するにはどれくらいの時間がかかるのでしょうか?

マスク氏は常にその知名度の高さで知られている。彼はテスラとスペースXという2つの大企業を所有している...

不均衡なデータを処理する Python ライブラリ トップ 10

データの不均衡は機械学習における一般的な課題であり、あるクラスの数が他のクラスを大幅に上回り、偏った...

人工知能がスマートファクトリーにもたらす力

現在、製造業における人工知能技術の応用が急成長しています。自社にとって適切な人工知能ツールをどのよう...