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

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

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

ブログ    
ブログ    

推薦する

大国同士が競争する中、なぜ彼らは人工知能で優位に立とうとするのでしょうか?

不確実性が人間関係を形作ります。感染症は、かつては直線的でスムーズで予測可能だった社会を予期せぬ形で...

スマートインフラがコミュニティを良くする5つの方法

フロスト&サリバンによる最近の分析によると、スマートシティ技術への世界的な投資は2025年までに22...

人工知能は医療の未来をどう変えるのか

この病気の症状の多くは心配なものであり、めまいや不安感から始まることもあります。心臓のあたりがバクバ...

Julia vs Python: 2019 年に機械学習でナンバー 1 になるプログラミング言語はどれでしょうか?

[[252207]] [51CTO.com クイック翻訳] Juliaは2018年に登場し、現在最...

Amazon Lexについて

Amazon Lex は、音声とテキストを使用してあらゆるアプリケーションに会話型インターフェースを...

Googleは「ロボット工学の3原則」をシステムに導入:ロボットが人間に危害を加えることを厳しく防止

1月5日、有名なSF作家アイザック・アシモフが「ロボット工学三原則」を提唱しました。 Googleは...

配達員はSF映画のハイテク技術を駆使し、平地を歩いているかのように100キロの重量を運ぶ。

昨日、配達員の動画がインターネット上で話題になった。動画では、ハミングバードデリバリーの配達員がテイ...

倪光南:AI開発は教訓を学ぶべき、コア技術は購入したり置き換えたりすることはできない

「ここ数年、情報技術分野で私たちが学んだ最大の教訓の一つは、主要な中核技術は私たち自身の独立したイノ...

130 の大学が人工知能専攻を追加。次の「陥没穴」専攻になるのでしょうか?

大学の専攻の盛衰は、時代の発展と技術の進歩を最もよく物語る証拠でもあります。今日のいわゆる「落とし穴...

企業が人工知能を活用してサービスをパーソナライズする方法

パーソナライズされたサービスが大きなメリットをもたらすことは間違いありません。うまく行けば、投資収益...

...

ディープラーニング可視化ツールの包括的なレビュー(リソース付き)

ディープネットワークは機械学習の研究・応用分野に大きな影響を与えてきましたが、同時にディープネットワ...

2030 年までに人工知能はどのようになるでしょうか?

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

グラフニューラルネットワークに基づくOPPOの検索推奨アルゴリズムと実践

1. グラフニューラルネットワーク入門グラフ ニューラル ネットワークについて説明する前に、まずグラ...

9つの一般的な畳み込みニューラルネットワークの紹介

畳み込みの目的は、入力から有用な特徴を抽出することです。画像処理では、さまざまなフィルターを選択でき...