blog
AIブログ
Pythonを使って機械学習を実装する
機械学習は、膨大なデータから法則性を見つけ出し自律的に学習する技術です。近年ではビジネス・研究・サービス開発など幅広い領域で活用されており、その実装手段としてPythonが事実上の標準言語となっています。本記事では、機械学習の基本的な種類と概念を整理したうえで、Pythonを使った実際のコードを交えながら、機械学習をどのように実装していくかをステップごとに解説します。Google Colaboratoryを使えば環境構築不要で手元でそのまま試せるため、初めて取り組む方にも役立つ内容です。
機械学習とは?3種類の学習方法を理解する
機械学習には大きく分けて「教師あり学習」「教師なし学習」「強化学習」の3種類があります。それぞれ目的や使いどころが異なるため、実装に入る前にしっかり理解しておくことが重要です。
教師あり学習
教師あり学習は、あらかじめ正解ラベルが付いたデータ(教師データ)をもとにモデルを訓練し、未知のデータに対して予測を行う方法です。入力と出力のペアから規則性を学ぶため、精度の高い予測が期待できます。ビジネス現場での活用事例が最も多く、スパムメール判定・株価予測・医療診断支援などで広く使われています。
教師あり学習の中には、主に以下の2種類のアプローチがあります。
- 回帰:正解データから法則性(数式的な関係)を認識し、未知のデータに当てはめることで連続的な値を予測する方法。たとえば「がく片の長さ」から「花びらの長さ」を推測するといった用途に使われます。
- 分類:複数のカテゴリに対してデータを振り分ける方法。正解データが境界線を明確にするために使われ、たとえばあやめの品種を特徴量から判別するといった処理が該当します。
なお、回帰分析の視覚的なイメージをつかみたい場合は、YouTubeなどに多数の解説動画が公開されており、参考にすると理解が深まります。
教師なし学習
教師なし学習は、正解ラベルなしのデータから、データ自体の構造・規則性・パターンを自動的に発見する方法です。正解が定義しにくい問題、あるいは大量のラベルなしデータしか存在しないケースで威力を発揮します。顧客セグメンテーション・異常検知・文書の自動分類などが代表的な応用例です。
教師なし学習の主なアプローチは次の2つです。
- 次元削減:多次元のデータが持つ変数(特徴量)の数を減らし、本質的な情報を保ちながらデータを扱いやすくする技術。主成分分析(PCA)などが代表的で、可視化や前処理にも使われます。
- クラスタリング:データの特徴量をもとに、似た性質を持つデータ同士を自動的にグループ(クラスター)に分ける手法。k-meansアルゴリズムが広く知られています。正解なしでもデータの傾向を浮かび上がらせることができます。
強化学習
強化学習は、エージェント(AI)が環境と相互作用しながら、報酬を最大化する行動を自律的に学習していく方法です。教師データを必要とせず、試行錯誤を繰り返すことで最適な行動戦略を獲得します。アルゴリズムの選定もAI自身が行うため、人間の介入を最小限に抑えられます。チェス・囲碁・ゲームAI・ロボット制御などの分野で特に注目されており、OpenAIのChatGPTの訓練にも一部強化学習(RLHF)が活用されています。
【比較まとめ】3種類の機械学習
| 種類 | 正解データ | 主な手法 | 代表的な用途 |
|---|---|---|---|
| 教師あり学習 | 必要 | 回帰・分類 | 価格予測・スパム判定・品種分類 |
| 教師なし学習 | 不要 | クラスタリング・次元削減 | 顧客分類・異常検知・可視化 |
| 強化学習 | 不要(報酬で代替) | Q学習・方策勾配法 | ゲームAI・ロボット制御・対話システム |
機械学習の実装言語としてPythonが選ばれる理由
機械学習の開発で最も広く使われているプログラミング言語はPythonです。なぜPythonがこれほど支持されているのか、主な理由を整理します。
1. 文法がシンプルで習得しやすい
Pythonの最大の特徴のひとつが、その文法のシンプルさです。他の言語と比べてコード量が少なく、英語に近い直感的な記述ができるため、初心者から職業プログラマーまで幅広く使われています。
機械学習・データサイエンスの分野では、数学・統計・物理などの専門家がプログラミングを後から習得するケースが少なくありません。そうした「プログラミングに不慣れな専門家」でも比較的短期間で実用レベルに達しやすいという点が、Pythonが選ばれる大きな理由のひとつです。
また、YouTubeやInstagramといったグローバル規模のサービスがシステムの根幹にPythonを採用していることも、言語としての信頼性・スケーラビリティの証明といえます。
2. 機械学習向けライブラリが圧倒的に豊富
Pythonが機械学習開発で選ばれる最大の理由は、充実したライブラリ・フレームワークのエコシステムです。やりたい処理のほぼすべてが既製ライブラリとして公開されており、ゼロから実装する必要がありません。
代表的な機械学習関連ライブラリには以下のものがあります。
- scikit-learn:分類・回帰・クラスタリング・次元削減など機械学習の基本手法がほぼ網羅されており、本記事の実装例でも使用します。
- NumPy:数値計算・行列演算の基盤ライブラリ。機械学習の演算処理に必須です。
- Pandas:データの読み込み・加工・集計を効率的に行うためのライブラリ。
- Matplotlib / Seaborn:データの可視化に使用するライブラリ。学習結果のグラフ描画に活用されます。
- TensorFlow / PyTorch:ディープラーニング(深層学習)向けの高機能フレームワーク。大規模なニューラルネットワークを構築する際に使います。
これらのライブラリを活用することで、数学的に複雑なアルゴリズムでも数行のコードで実装できるのがPythonの強みです。
Pythonの実行環境を準備する:Google Colaboratoryの使い方
実際に機械学習を実装するには、Pythonの実行環境が必要です。環境構築の方法は複数ありますが、最も手軽に始められるのがGoogle Colaboratory(Colab)です。
Google ColabはGoogleが提供するブラウザ上のPython実行環境で、以下の特徴があります。
- インストール不要:ブラウザとGoogleアカウントがあればすぐ使える
- 主要ライブラリがプリインストール済み:scikit-learn・NumPy・Matplotlibなど最初から使える
- 無料でGPUも利用可能:ディープラーニングの学習にも対応
- 大学の研究・商業データ分析・個人学習など幅広い用途で実績あり
アクセス先:https://colab.research.google.com/
実際の使い方は次のとおりです。リンクにアクセスするとチュートリアル画面が表示されます。左上の「コード+」をクリックすると、左端に再生ボタンのようなアイコンが付いたコードセル(入力欄)が追加されます。そこにコードを入力し、再生ボタン(▶)をクリックするとセル内のコードが即座に実行されます。以降の実装例もすべてこの方法で順番に実行できます。
【補足】ローカル環境で使いたい場合
Anacondaディストリビューションを使うと、Python本体と主要ライブラリを一括インストールできます。Jupyter NotebookやJupyterLabを使えばColab同様のノートブック形式で実行できます。本格的な開発ではVS CodeやPyCharmなどのIDEを組み合わせるのが一般的です。
Python「教師あり学習」実装例:Irisデータセットで学ぶ
ここからは実際に教師あり学習をPythonで実装する手順を見ていきます。使用するデータは機械学習の練習用として定番のIrisデータセット(あやめデータ)です。このデータセットには、アヤメ属の花150個について「がく片の長さ・幅」「花びらの長さ・幅」と「品種(3種類)」が記録されています。scikit-learnに組み込まれているため、インストール不要でそのまま使えます。
以下のコードをGoogle ColabのコードセルにステップごとにコピーアンドペーストしてA順に実行すると、同じ結果が再現できます。

① モジュール・学習データの読み込み
まず、データを構造的に扱うためのライブラリと、学習に使うIrisデータセットをインポートします。
import numpy as np # 数値計算・配列操作のライブラリ
import matplotlib.pyplot as plt # グラフ描画・データ可視化のライブラリ
%matplotlib inline # Colab上でグラフをインライン表示する設定
from sklearn import datasets # scikit-learnのデータセット群
Learning_Data = datasets.load_iris() # Irisデータセットを変数に格納
ここで行っていることのイメージは、「外部にある手法一覧(ライブラリ)を手元に置いておく」作業です。numpyは行列計算の基盤、matplotlibは結果の可視化、sklearnは機械学習手法の実装に使います。load_iris()でIrisデータを丸ごと変数に格納した状態がスタート地点です。
② 散布図の描画(データの関係性を確認する)
次に、データの中から「0番目:がく片の長さ」と「2番目:花びらの長さ」を取り出し、散布図で関係性を確認します。
x = Learning_Data.data[:, 0] # 0列目「がく片の長さ」をxに格納
y = Learning_Data.data[:, 2] # 2列目「花びらの長さ」をyに格納
plt.scatter(x, y) # (x, y) の散布図を表示
plt.xlabel("Sepal Length")
plt.ylabel("Petal Length")
plt.title("Sepal vs Petal Length")
plt.show()
この散布図を描くと、がく片が長いほど花びらも長い傾向、つまり強い正の相関があることが視覚的に確認できます。2変数の関係性を目で見てから機械学習に進むのは、分析の基本的なステップです。この確認なしに学習を進めると、不適切な手法を選んでしまうリスクがあります。
③ 線形単回帰分析で関係性をモデル化する
散布図で確認した正の相関関係を、線形単回帰(直線的な関係式)でモデル化します。scikit-learnのLinearRegressionを使うことで、数式の導出をライブラリが自動で処理してくれます。
from sklearn import linear_model # 線形モデルのモジュールをインポート
model = linear_model.LinearRegression()
model.fit(Learning_Data.data[:, 0].reshape(-1, 1), Learning_Data.data[:, 2])
# .fit() でモデルが学習データを「学習」する
def f(x):
return model.coef_[0] * x + model.intercept_
# coef_[0] が回帰係数(傾き)、intercept_ がy切片
xmin = x.min()
xmax = x.max()
plt.plot([xmin, xmax], [f(xmin), f(xmax)], color="red", label="Regression Line")
plt.scatter(x, y, label="Data")
plt.xlabel("Sepal Length")
plt.ylabel("Petal Length")
plt.legend()
plt.show()
実行すると、散布図に重なる形で回帰直線が描かれます。この直線の式が求まると、「がく片の長さがわかれば花びらの長さを推測できる」という予測モデルとして機能します。これが回帰(教師あり学習)の基本的な使い方です。
model.fit()が機械学習の核心部分です。内部ではデータ全体の誤差(予測値と実際の値のズレ)が最小になるよう、最小二乗法によって係数とy切片が自動的に算出されています。
④ サポートベクトルマシン(SVM)による分類
続いて、教師あり学習の「分類」アルゴリズムのひとつであるサポートベクトルマシン(SVM)を実装します。SVMはデータを異なるクラスに分割する境界線(決定境界)を最適化するアルゴリズムで、特にクラス間の境界が明確なケースで高い精度を発揮します。
まず、品種ごとに色分けした散布図を作成して、種類による特性の違いを確認します。
training_data = Learning_Data.data[:, [1, 3]] # 1列目「がく片幅」と3列目「花びら幅」を使用
target = Learning_Data.target # 品種ラベル(0, 1, 2の3種類)
for i, color in enumerate("rgb"):
plt.scatter(training_data[target == i, 0],
training_data[target == i, 1],
color=color,
label=f"Species {i}")
plt.xlabel("Sepal Width")
plt.ylabel("Petal Width")
plt.legend()
plt.title("Iris Species by Color")
plt.show()
このグラフで、3種類のあやめが特徴量(がく片幅・花びら幅)によって明確に異なる分布を持つことがわかります。特に赤・青・緑がそれぞれ別の塊を形成しており、SVMで分類境界を引きやすい状況であることが見て取れます。
次に、SVMで学習し、決定境界を可視化します。
from sklearn import svm
model = svm.SVC()
model.fit(training_data, target) # SVMによる学習完了
# 決定境界の可視化(グリッドに対して予測を行い背景色で塗り分ける)
xmin = training_data[:, 0].min()
xmax = training_data[:, 0].max()
ymin = training_data[:, 1].min()
ymax = training_data[:, 1].max()
xs = np.linspace(xmin - 0.1, xmax + 0.1, 300)
ys = np.linspace(ymin - 0.1, ymax + 0.1, 300)
xmesh, ymesh = np.meshgrid(xs, ys)
plt.contourf(xmesh, ymesh,
model.predict(np.c_[xmesh.ravel(), ymesh.ravel()]).reshape(xmesh.shape),
levels=[-0.5, 0.5, 1.5, 2.5, 3.5],
colors=["r", "g", "b"],
alpha=0.3)
for i, color in zip(range(3), "rgb"):
plt.scatter(training_data[target == i, 0],
training_data[target == i, 1],
color=color, linewidth=1, edgecolor="k", marker="o")
plt.xlabel("Sepal Width")
plt.ylabel("Petal Width")
plt.title("SVM Decision Boundary")
plt.show()
実行すると、背景が3色のゾーンに塗り分けられ、各ゾーン内にその色の散布点がほぼ収まっているグラフが得られます。これがSVMが学習した「決定境界」の可視化です。
この分類モデルが構築されると、品種が不明な新しいあやめでも、がく片幅と花びら幅の測定値さえあればどの品種に属するか推測できるようになります。これが機械学習における「分類」の実用的な意義です。
【処理フロー】教師あり学習の実装ステップ
→
→
→
→
機械学習実装で押さえておきたい追加ポイント
モデルの評価指標を確認する
機械学習の実装では、モデルを学習させるだけでなく、そのモデルがどれくらい正確に予測できているかを数値で評価することが重要です。scikit-learnには評価用の関数が充実しています。
回帰モデルの場合はmean_squared_error(平均二乗誤差)やr2_score(決定係数)を使って精度を測ります。分類モデルの場合はaccuracy_score(正解率)やclassification_report(適合率・再現率・F1スコア)が代表的な評価指標です。
from sklearn.metrics import accuracy_score
# 学習データに対する予測
predictions = model.predict(training_data)
# 正解率の表示
print(f"Accuracy: {accuracy_score(target, predictions):.4f}")
ただし、学習データ自体に対して評価すると過学習(データを丸暗記した状態)を見逃すリスクがあります。実際の開発ではデータを訓練用とテスト用に分割(train_test_split)して、テストデータで評価するのが基本です。
データの前処理が精度を左右する
機械学習の精度はアルゴリズムの選択だけでなく、データの前処理(前準備)の質に大きく依存します。現実のデータには欠損値・外れ値・スケールの不均一さなどの問題が含まれることが多く、そのまま学習させると精度が大幅に低下します。
代表的な前処理の手法は以下のとおりです。
- 欠損値処理:欠損データを平均値・中央値で補完するか、その行を削除する(
pandasのfillnaやdropnaを活用) - スケーリング(標準化・正規化):特徴量ごとにスケールが異なる場合(例:身長と体重)に、値の範囲をそろえる処理。SVMや距離ベースのアルゴリズムでは特に重要(
StandardScalerやMinMaxScalerを使用) - カテゴリ変数のエンコーディング:文字列のカテゴリデータを数値に変換する(One-Hot EncodingやLabel Encodingなど)
過学習を防ぐ:汎化性能の向上
機械学習の実装でよく直面する問題が過学習(オーバーフィッティング)です。訓練データに対しては高い精度を示すものの、未知のデータには全く対応できない状態を指します。過学習を防ぐための主なアプローチには以下があります。
- 交差検証(クロスバリデーション):データを複数のグループに分割して繰り返しテストし、汎化性能を安定的に評価する手法
- 正則化:モデルの複雑さにペナルティを与えてシンプルなモデルを促す(Ridge回帰・Lasso回帰など)
- 学習データの拡充:データ量が少ない場合は、データ拡張やサンプリング手法で対処

まとめ
本記事ではPythonを使った機械学習の実装について、基礎概念から実際のコードまでをステップごとに解説しました。ポイントを整理します。
- 機械学習には教師あり学習・教師なし学習・強化学習の3種類があり、目的と手持ちのデータに応じて使い分ける
- Pythonは文法のシンプルさとライブラリの豊富さから機械学習の標準言語となっている
- 実行環境はGoogle Colaboratoryを使えばブラウザだけですぐに始められる
- scikit-learnの
fit()メソッドを呼ぶだけでモデルが学習し、predict()で予測が得られる - 線形回帰で連続値の予測、SVMで分類境界の構築という2つの実装パターンをIrisデータセットで実践した
- 実際の開発ではデータの前処理・モデル評価・過学習対策が精度を左右する重要なステップ
機械学習の実装は「難しいアルゴリズムを理解してからコードを書く」順番ではなく、「まず動かしてみて、結果を見ながら理解を深める」アプローチが効果的です。本記事で紹介したコードをそのままColabで実行し、パラメータを変えながら挙動を確かめることが、実装スキル向上への最短ルートです。
(コード引用元:Pythonの機械学習ライブラリ「scikit-learn」で実践する「教師あり学習」「教師なし学習」 – @IT)
監修
河合 継(クリスタルメソッド株式会社 代表取締役)
AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番組でのAI解説実績を持つAI研究者として、AIの研究開発を主導している。
運営会社について | 編集方針
Study about AI
AIについて学ぶ
-
OpenAI×企業・教育機関AI連携事例:日本企業が今すぐ検討すべき戦略
OpenAI×FEU Tech提携:企業・教育機関AI連携の最新事例が示す構造変化 2026年6月、フィリピンのFar Eastern University I...
-
Anthropic AI研究者採用動向——ノーベル賞受賞者移籍が日本企業に問うもの
ノーベル賞受賞AI研究者がAnthropicへ——何が起きたのか 2026年6月19日(金)、ジョン・ジャンパー(John Jumper)がGoogle Dee...
-
AIエージェント デジタルID ガバナンス 責任追跡——エストニア構想が日本企業に突きつける問い
エストニアが示した「AIエージェント デジタルID」の核心——なぜ今、責任追跡が問われるか 2026年6月17日前後、エストニアのKristen Michal首...