Pythonでロジスティック回帰を実装する方法!機械学習の基本を完全解説
生徒
「機械学習って難しそうですけど、初心者でもできるんですか?特に『ロジスティック回帰』っていう名前が難しそうで不安です。」
先生
「名前に『回帰』と付いていますが、実は『合格か不合格か』『YESかNOか』という分類をするための基本テクニックなんです。Pythonを使えば、パソコンに慣れていない方でも数行の命令を書くだけで実行できますよ。」
生徒
「なるほど、二択の予想をするための道具なんですね!具体的にどうやって使うのか教えてください!」
先生
「それじゃあ、まずはロジスティック回帰がどんな仕組みなのか、簡単な例えから一緒に見ていきましょう!」
1. ロジスティック回帰とは?初心者向けに徹底解説
機械学習(きかいがくしゅう)の世界へようこそ!プログラミング未経験の方が最初に「ロジスティック回帰」と聞くと、数学の難しい公式を想像してしまうかもしれません。しかし、その正体はとてもシンプルです。
ロジスティック回帰とは、「ある出来事が起こるか、起こらないか」という確率を予測する手法のことです。例えば、明日の天気が「雨」か「晴れ」か、メールが「迷惑メール」か「そうでない」か、試験の結果が「合格」か「不合格」か、といった二つの選択肢を判断するときに大活躍します。
普通の計算機と違うのは、過去のデータを学習して「このくらいの勉強時間なら合格する確率が高いですよ」とコンピュータが自分で判断してくれる点にあります。この「学習」という仕組みこそが、人工知能(AI)の基礎となる機械学習の面白いところです。
2. Python(パイソン)が機械学習に最適な理由
なぜ機械学習を学ぶのに、多くの人がPython(パイソン)というプログラミング言語を選ぶのでしょうか。それは、Pythonが初心者にとって非常に読みやすく、書きやすい言葉だからです。
また、Pythonには「ライブラリ」という便利な道具箱がたくさん用意されています。本来なら何千行も書かなければならない複雑な計算も、誰かが作ってくれた道具(ライブラリ)を借りることで、たった数行で終わらせることができます。
特に「scikit-learn(サイキット・ラーン)」というライブラリは、機械学習を始めたい人にとって必須の道具です。これを使いこなすだけで、あなたも今日からデータサイエンティストの一歩を踏み出すことができます。
3. 準備運動!まずは基本的なライブラリを使ってみよう
プログラムを書き始める前に、まずは「道具」を取り出す練習をしましょう。ここでは、数値計算が得意なNumPy(ナンパイ)というライブラリを使って、簡単なデータを作ってみます。
まずは、「勉強時間」と「合格・不合格」という関係をコンピュータに教えるための準備をします。
import numpy as np
# 勉強時間のデータ(1時間から10時間まで)
study_hours = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).reshape(-1, 1)
# 合否のデータ(0が不合格、1が合格)
# 5時間以下は不合格(0)、6時間以上は合格(1)とする
pass_fail = np.array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1])
print("勉強時間のデータ:")
print(study_hours)
print("合否のデータ:")
print(pass_fail)
このコードでは、データを整理して箱(変数)に入れています。reshapeという言葉が出てきましたが、これはコンピュータが読み込みやすいようにデータの形を整える呪文だと思ってください。
勉強時間のデータ:
[[ 1] [ 2] [ 3] [ 4] [ 5] [ 6] [ 7] [ 8] [ 9] [10]]
合否のデータ:
[0 0 0 0 0 1 1 1 1 1]
4. いよいよ実践!ロジスティック回帰を動かしてみる
それでは、実際にロジスティック回帰のモデルを作ってみましょう。「モデル」とは、データの法則性を学んだコンピュータの中の「判断基準」のことです。
ここでは「scikit-learn」という魔法の道具箱から、LogisticRegressionという機能を取り出して使います。
from sklearn.linear_model import LogisticRegression
# 1. ロジスティック回帰の道具(モデル)を準備する
model = LogisticRegression()
# 2. 勉強時間と合否のデータをコンピュータに学習させる
model.fit(study_hours, pass_fail)
# 3. 5.5時間勉強したときの合否を予測してみる
prediction = model.predict([[5.5]])
if prediction[0] == 1:
print("予測結果: 合格!")
else:
print("予測結果: 不合格...")
fit(フィット)という言葉は「学習させる」という意味です。人間が練習問題を解いてパターンを覚えるように、コンピュータにデータを与えて勉強させています。
予測結果: 不合格...
5.5時間は合格ラインの6時間に届かないので、コンピュータは「不合格」と予測しました。驚くほど簡単ですよね。
5. 確率はどのくらい?予測の裏側を覗いてみよう
ロジスティック回帰の素晴らしいところは、単に「合格か不合格か」を決めるだけでなく、「何%の確率で合格か」まで教えてくれる点です。
日常の例で言えば、「雨が降るか降らないか」だけでなく「降水確率は70%」と言われるほうが、傘を持っていくかどうか判断しやすいですよね。プログラムでもその確率を表示してみましょう。
# 5.5時間勉強したときの「不合格の確率」と「合格の確率」を表示
probabilities = model.predict_proba([[5.5]])
print(f"不合格になる確率: {probabilities[0][0] * 100:.1f}%")
print(f"合格になる確率: {probabilities[0][1] * 100:.1f}%")
predict_proba(プレディクト・プロバ)という命令を使うと、確率が計算されます。
不合格になる確率: 59.8%
合格になる確率: 40.2%
このように、データが境界線(今回は5.5時間)に近いときは、コンピュータも「たぶん不合格だけど、合格する可能性も4割くらいあるよ」と教えてくれるのです。
6. 応用編:複数のデータを使って予測の精度を上げよう
現実の世界では、合否が決まる理由は一つではありません。「勉強時間」だけでなく「これまでの模試の点数」なども関係しますよね。ロジスティック回帰は、複数のデータ(特徴量といいます)を同時に扱うことも得意です。
今度は「勉強時間」と「出席率」の2つのデータを使って、新しい予測モデルを作ってみましょう。
# [勉強時間, 出席率] の組み合わせデータ
X = np.array([
[1, 20], [2, 30], [3, 40], [5, 60], [6, 70], [8, 80], [9, 90]
])
# 0が不合格、1が合格
y = np.array([0, 0, 0, 0, 1, 1, 1])
# 新しいモデルを作成して学習
multi_model = LogisticRegression()
multi_model.fit(X, y)
# 「勉強時間7時間、出席率50%」の人の合否を予測
test_data = [[7, 50]]
new_prediction = multi_model.predict(test_data)
result = "合格" if new_prediction[0] == 1 else "不合格"
print(f"予測結果: {result}")
複数の要素が絡み合っても、プログラムの書き方はほとんど変わりません。これがPythonと機械学習の強力なポイントです。
予測結果: 合格
7. パソコン初心者でも怖くない!エラーが出たときの対処法
プログラミングをしていると、必ず「エラー」という怖い画面に出会います。でも安心してください。エラーは「壊れた」という合図ではなく、パソコンが「ここが分からないから直してほしいな」と送っているメッセージです。
よくある間違いは、「大文字と小文字を間違える」、「カッコが閉じられていない」、「ライブラリの名前を書き間違える」などです。
例えば、LogisticRegressionの「L」や「R」を小文字にしてしまうだけで、コンピュータは命令を認識できなくなります。まずは、お手本となるコードを一文字ずつ丁寧に入力することから始めてみてください。
8. 機械学習を学ぶ上で大切な「データの分け方」
最後に、機械学習で最も大切なルールを一つお伝えします。それは、「練習問題で使ったデータを、テストに使ってはいけない」ということです。
人間も、テストの答えを丸暗記してしまったら、本当の実力は分かりませんよね。コンピュータも同じです。持っているデータを「学習用(練習用)」と「テスト用(本番用)」の二つに分けて、学習に使っていないデータで正解できるかを確かめるのが一般的です。
これを「訓練(トレイン)」と「テスト」の分割と呼びます。ロジスティック回帰だけでなく、どんなに高度なAI開発でも欠かせないステップですので、覚えておくと役立ちますよ!
まとめ
この記事では、Pythonを使用したロジスティック回帰の基本実装から、機械学習の基礎知識について詳しく解説してきました。 ロジスティック回帰は、名前に「回帰」と付いていながらも、実際には「二値分類(2つのクラスに分けること)」を得意とする非常に強力なアルゴリズムです。 「合格・不合格」「購入する・しない」といった、ビジネスや日常生活における意思決定をデータに基づいて予測できるため、データサイエンスの入り口として最も適しています。
ロジスティック回帰をマスターするための重要ポイント
Pythonで機械学習を実装する際に、最低限押さえておきたいポイントを整理しましょう。 これらを理解しておくことで、ロジスティック回帰以外のアルゴリズム(決定木やSVM、ニューラルネットワークなど)を学ぶ際にも、スムーズに知識を応用できるようになります。
- 1. ライブラリの活用: Pythonの「scikit-learn(サイキット・ラーン)」を使えば、複雑な数式を自力で計算しなくても、高度な予測モデルを構築できます。
- 2. データの学習(fit): 過去のデータをコンピュータに読み込ませる作業を「fit」と呼びます。この工程で、AIはデータのパターンを学習します。
- 3. 確率の算出(predict_proba): 単なる「YES/NO」の判定だけでなく、その自信の度合い(確率)を知ることで、より柔軟な判断が可能になります。
- 4. 特徴量の選定: 勉強時間だけでなく、過去の成績や集中力など、複数の要素(特徴量)を組み合わせることで、予測精度は飛躍的に向上します。
実践!さらに一歩進んだサンプルプログラム
ここでは、学んだ内容をさらに深めるために、データの標準化(スケーリング)を取り入れた、より実戦に近いコードを紹介します。 データの単位(例えば、時間は0〜10、出席率は0〜100など)が大きく異なると、AIが混乱してしまうことがあります。 これを防ぐために「StandardScaler」という道具を使って、データを整えるのがプロのテクニックです。
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
import numpy as np
# 1. データの準備(勉強時間, 過去のテスト点数)
X_train = np.array([
[1, 40], [2, 45], [3, 50], [5, 65], [6, 75], [8, 85], [10, 95]
])
y_train = np.array([0, 0, 0, 0, 1, 1, 1])
# 2. データの標準化(スケールを揃えて学習しやすくする)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
# 3. モデルの作成と学習
final_model = LogisticRegression()
final_model.fit(X_train_scaled, y_train)
# 4. 新しいデータで予測(例:勉強時間7時間、過去の点数70点)
X_new = np.array([[7, 70]])
X_new_scaled = scaler.transform(X_new) # 予測用データも同じように標準化
final_prediction = final_model.predict(X_new_scaled)
final_proba = final_model.predict_proba(X_new_scaled)
# 5. 結果の表示
status = "合格圏内" if final_prediction[0] == 1 else "努力が必要"
print(f"診断結果: {status}")
print(f"合格の可能性: {final_proba[0][1] * 100:.2f}%")
いかがでしょうか。このように、標準化という一工程を加えるだけで、モデルの安定性が増し、より正確な予測が行えるようになります。 Pythonの機械学習ライブラリは、こうした補助的なツールも充実しているのが魅力ですね。
機械学習エンジニアへの道
ロジスティック回帰を理解できれば、あなたはすでに機械学習の基礎の50%をクリアしたと言っても過言ではありません。 なぜなら、データの準備、学習(fit)、予測(predict)、そして評価という一連の流れは、ディープラーニングのような最新技術でも全く同じだからです。
大切なのは、最初から完璧を目指さないことです。 まずは「動くコード」を書いてみて、数値を変えたら結果がどう変わるのかを観察する。 その繰り返しが、データサイエンスという魔法の杖を使いこなす一番の近道になります。 エラーを恐れず、Pythonの世界をどんどん冒険していきましょう。
生徒
「先生、ありがとうございました!ロジスティック回帰って、実は確率を計算して分類してくれるすごく賢い仕組みだったんですね。Pythonのコードも思ったより短くて驚きました。」
先生
「その通りです。複雑な数式を裏側でPythonが全部やってくれるから、私たちは『どんなデータを使って予測したいか』を考えることに集中できるんです。実際に動かしてみて、どう感じましたか?」
生徒
「5.5時間勉強したときの確率が40%って出たときは、リアリティがあって面白かったです。単に『ダメ』って言われるより、『あと少し頑張ればいけるかも!』って前向きになれますよね。」
先生
「素晴らしい視点ですね!その『確率』が、ビジネスの現場でも重宝される理由なんです。最後に紹介した『データの標準化』のように、少しずつ工夫を重ねることで、AIの判断はどんどん人間に近づいていきますよ。」
生徒
「標準化についても、単位がバラバラだとAIが困るっていう例えでよく分かりました。もっといろんなデータを入れて試してみたいです。次は、もっと複雑な条件で予測に挑戦してみます!」
先生
「その意気です!まずは身近なデータをPythonに読み込ませることから始めてみましょう。エラーが出ても、それはAIがもっと良くなるためのヒントをくれているだけですから、楽しんでいきましょうね。」