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

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

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

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

ドイツ反トラスト長官:AIは大企業の支配を強める可能性がある

ドイツ独占禁止局のアンドレアス・ムント局長は10月10日、人工知能によって大手テクノロジー企業の市場...

AIはソフトウェア開発の特効薬ではない

AIプログラミングツールを使っている開発者のみなさん、作業効率はどれくらい向上しましたか?最近、AI...

人工知能と自然言語処理技術が産業のアップグレードエンジンを牽引

人工知能は将来の技術開発の最前線分野として、ディープラーニング、レコメンデーションエンジン、コンピュ...

人気の「GPT-4 MIT学部数学フルスコア」論文が不正、データセット自体に問題あり

過去 2 日間で、GPT-4 が MIT EECS と数学の学部試験に満点で合格したという論文が T...

「紫禁城の戦い」 - ディープラーニング フレームワーク: Keras VS PyTorch

TensorFlow は、多くの科学者、エンジニア、開発者にとって主要なディープラーニング フレー...

2018年末のAI分野におけるオープンソースフレームワークのまとめ

[[253605]] [やや活発な***四半期] 2018.3.04——OpenAIはオープンソース...

...

今後 20 年以内に、完全自動運転のコネクテッドカーが登場するでしょうか?

20 年後の旅行と交通の未来はどうなるでしょうか? おそらく、この質問への答えははるかに複雑です。...

...

Σco Time | AIセキュリティ、インテリジェンスの新時代における双方にメリット

[原文は51CTO.comより]先日、#Σcotimebetween#ライブブロードキャストプラット...

...

...

ものづくりを変える6つのAI活用法!

1. 欠陥検出のためのディープラーニング[[391865]]製造業では、生産ラインにおける欠陥検出...

兵馬俑は「Subject Three」を演奏したが、これは予想外のことだった

ご家族の皆さん、世界中で人気の魔法のダンス「Subject Three」、まさか兵馬俑も踊り始めると...

企業におけるビッグデータ活用のための実践的AI技術

ビッグデータ、クラウド コンピューティング、高度なアルゴリズムという 3 つの主要なトレンドのユニー...