- 技術 💻
機械学習とは|種類・ディープラーニングとの違いを実行結果で解説
結論
機械学習とは、人がルールを書く代わりに、データから規則性をコンピューターに見つけさせ、新しいデータの予測や判断に使う技術です。AIの一分野で、ディープラーニングも生成AIもその中に入ります。
この記事でわかること
- AI・機械学習・ディープラーニング・生成AIの関係と、3つの学習の種類
- 分類・回帰・クラスタリング・強化学習を scikit-learn で動かした学習前後の数値
- 過学習の実物(深さ・次数ごとの正解率)、仕事での使われ方、学ぶ順番
検索で「機械学習とは」を調べる人には、初めて学ぶ人と、仕事で「機械学習で何とかならないか」と言われて困っている人がいます。この記事は、言葉の説明だけで終わらせず、4種類の機械学習を実際に動かして「学習する前は正解率33%、学習したら98%」のように数値で見せます。
flowchart TD
AI[AI 人工知能<br>人の知的な働きを機械で行う<br>ルールベースの仕組みも含む] --> ML[機械学習<br>データから規則性を学ぶ<br>決定木・回帰・k-means など]
ML --> DL[ディープラーニング<br>多層ニューラルネットワーク<br>画像・音声・文章に強い]
DL --> GEN[生成AI<br>ChatGPT・Claude・画像生成<br>文章や画像を新しく作る]
よく調べられることの答えを先にまとめます。
| 知りたいこと | 答え | 詳しい節 |
|---|---|---|
| 機械学習とは(わかりやすく) | データから規則性を学び、予測・判断に使う技術 | 機械学習とは |
| AIと機械学習の違い | AIが広い概念、機械学習はその実現方法の1つ | AI・機械学習・ディープラーニング・生成AIの関係 |
| 機械学習とディープラーニングの違い | 特徴を人が設計するか、機械が見つけるか | 機械学習とディープラーニングの違い |
| 教師あり・教師なし・強化学習の違い | 正解あり・正解なし・報酬で学ぶ | 機械学習の種類 |
| 学習すると何が変わるか | 正解率 33%→98%(手元の分類の例) | 教師あり学習(1)分類 |
| 過学習とは | 訓練データに合わせすぎて新しいデータに弱くなること | 過学習とは |
| 仕事でどう使われるか | 需要予測・異常検知・振り分け・推薦など | 仕事での使われ方 |
| 何から学べばよいか | Python→scikit-learn→評価の読み方→統計→深層学習 | 機械学習を学ぶ順番 |
確認環境:Ubuntu 24.04.5 LTS(CPU 2コア、Intel Xeon 2.10GHz、GPUなし)の上に Python 3.13.18 の仮想環境を作り、scikit-learn 1.9.1・NumPy 2.5.4 を入れて、記事中のコードをすべて実行しました。分類は scikit-learn 付属のアヤメ(iris)と手書き数字(digits)、回帰は糖尿病(diabetes)のデータ、過学習の曲線は make_classification で作った人工データ、強化学習は自作の 5×5 の格子で Q学習を書いて確かめています。乱数の種(random_state)を固定しているため、同じ版なら同じ数値になります。用語の定義は Google の機械学習クラッシュコースと scikit-learn の公式ドキュメントで確かめました。図は mermaid で描画を確かめています(確認日 2026年10月29日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「機械学習とは|種類・ディープラーニングとの違いを実行結果で解説」
機械学習とは(わかりやすく一言で)
この節では、機械学習の定義と、従来のプログラミングと何が違うのかが分かります。
機械学習(Machine Learning・ML)は、大量のデータから規則性(パターン)をコンピューター自身に見つけさせ、新しいデータに対する予測や判断に使う技術です。 Google の機械学習クラッシュコースは「モデルと呼ばれるソフトウェアをトレーニングして、有用な予測を行ったり、データからコンテンツを生成したりするプロセス」と定義しています。
従来のプログラミングとの違いは「ルールを誰が書くか」です。たとえば迷惑メールの判定を考えます。
迷惑メールの判定を作るとき
入力と答えの例から、ルール(モデル)を機械が作る
できあがった「ルールのかたまり」をモデル、ルールを作る作業を学習(訓練)、モデルに新しいデータを入れて答えを出すことを予測(推論)と呼びます。この3語を押さえると、機械学習の説明の大半が読めるようになります。
1モデル
データから作られた、入力を受けて答えを返す仕組み。中身は数式の係数や、条件分岐の木など。
2学習(訓練・fit)
データをもとにモデルの中身を決める作業。scikit-learn では fit() の1行。
3予測(推論・predict)
学習済みモデルに新しいデータを入れて答えを出すこと。predict() の1行。
AI・機械学習・ディープラーニング・生成AIの関係
この節では、似た言葉の包含関係と、それぞれが指す範囲が分かります。
AI(人工知能)が最も広く、その中に機械学習、機械学習の中にディープラーニング、ディープラーニングの代表的な応用として生成AIがあります。 AI の中には機械学習を使わない「ルールベース」(人が書いた条件分岐で動く仕組み)もあります。
| 言葉 | 指す範囲 | 例 |
|---|---|---|
| AI(人工知能) | 人の知的な働きを機械で行うもの全般 | チェスのプログラム、チャットボット、自動運転 |
| 機械学習 | データから規則性を学んで予測・判断する手法 | 需要予測、迷惑メール判定、商品の推薦 |
| ディープラーニング(深層学習) | 多層のニューラルネットワークを使う機械学習 | 画像認識、音声認識、機械翻訳 |
| 生成AI | 文章・画像・音声などを新しく作るモデル | ChatGPT、Claude、画像生成 |
| ルールベース | 人が書いた条件で動く AI(学習しない) | 「在庫が10未満なら発注」の自動化 |
「AI を入れたい」という相談のうち、実際に必要なのが機械学習ではなく、ルールベースの自動化や、生成AI の API を呼ぶだけで済むことも多くあります。どれが当てはまるかは、この記事の後半の判断表で分けます。
機械学習の種類(教師あり・教師なし・強化学習)
この節では、機械学習の3つの学習方法と、それぞれが解ける問題が分かります。
機械学習は「何を手がかりに学ぶか」で、教師あり学習・教師なし学習・強化学習の3つに分かれます。 仕事で使われるものの多くは教師あり学習です。
教師あり学習
「入力」と「正解」のペアで学ぶ。正解が数値なら回帰、種類なら分類。
売上予測・迷惑メール判定
教師なし学習
正解なしで、データの構造を見つける。似たもの同士をまとめるクラスタリング、情報を圧縮する次元削減。
顧客のグループ分け・異常検知
強化学習
正解の代わりに「報酬」を受け取り、試行錯誤で報酬が最大になる行動を学ぶ。
ゲーム・ロボット制御・広告配信
自己教師あり学習
文章の次の語を当てるなど、データ自体から正解を作る。大規模言語モデルの土台。
ChatGPT・Claude の事前学習
| 種類 | 渡すもの | 代表的な手法 | この記事で動かした例 |
|---|---|---|---|
| 教師あり(分類) | 入力+正解の種類 | 決定木・ロジスティック回帰・k近傍法・SVM | アヤメの品種、手書き数字、問い合わせの振り分け |
| 教師あり(回帰) | 入力+正解の数値 | 線形回帰・Ridge・ランダムフォレスト | 1年後の病気の進行度 |
| 教師なし | 入力だけ | k-means・主成分分析(PCA) | アヤメを正解なしで3グループに |
| 強化学習 | 環境と報酬 | Q学習・DQN | 5×5 の格子でゴールまで歩く |
教師あり学習(1)分類を実行する:学習前後の正解率
この節では、最も基本的な分類を scikit-learn で動かし、「学習すると何が変わるのか」が数値で分かります。
アヤメ(iris)150件を、4つの測定値(がくの長さ・幅、花びらの長さ・幅)から3品種のどれかに分類します。 データの7割で学習し、残り3割で採点しました。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.dummy import DummyClassifier
from sklearn.metrics import accuracy_score
iris = load_iris()
X, y = iris.data, iris.target # X: 150件×4列の数値、y: 品種(0,1,2)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=0, stratify=y)
# 学習前の目安:何も学ばず、いちばん多い品種をいつも答える
dummy = DummyClassifier(strategy="most_frequent").fit(X_tr, y_tr)
print("学習前:", accuracy_score(y_te, dummy.predict(X_te)))
model = DecisionTreeClassifier(random_state=0)
model.fit(X_tr, y_tr) # 学習
print("学習後:", accuracy_score(y_te, model.predict(X_te))) # 予測して採点
データ数: (150, 4) 特徴量: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
訓練: 105 テスト: 45
学習前(最頻ラベル) 正解率: 0.333
学習前(ランダム) 正解率: 0.422
決定木: 学習 1.1ms 訓練正解率 1.000 テスト正解率 0.978 5分割CV 0.960±0.033
ロジスティック回帰: 学習 14.0ms 訓練正解率 0.943 テスト正解率 1.000 5分割CV 0.973±0.025
k近傍法(k=5): 学習 0.8ms 訓練正解率 0.962 テスト正解率 1.000 5分割CV 0.973±0.025
決定木が「学んだルール」は、そのまま文字で出せます。深さ2に制限した木です。
|--- petal width (cm) <= 0.80
| |--- class: 0 (setosa)
|--- petal width (cm) > 0.80
| |--- petal width (cm) <= 1.75
| | |--- class: 1 (versicolor)
| |--- petal width (cm) > 1.75
| | |--- class: 2 (virginica)
「花びらの幅が 0.8cm 以下なら setosa、1.75cm を超えたら virginica」という条件分岐を、人は1行も書いていません。 データから機械が見つけたこのルールだけで、テストの正解率は 95.6% でした。これが「ルールを機械が作る」の実物です。
間違いの中身は混同行列(行が実際の品種、列が予測)で見ます。virginica の1件を versicolor と答えたのが唯一の誤りでした。
[[15 0 0]
[ 0 15 0]
[ 0 1 14]]
新データの予測: ['setosa', 'virginica']
確率: [[0.976 0.024 0. ]
[0. 0.108 0.892]]
新しい測定値を渡すと品種と確率が返ります。業務では、この確率を「0.9 以上なら自動処理、それ未満は人が確認」のように使います。
教師あり学習(2)回帰を実行する:数値を予測する
この節では、種類ではなく「数値」を当てる回帰を動かし、誤差の読み方が分かります。
回帰は、売上・来客数・価格のような連続した数値を予測する教師あり学習です。 scikit-learn 付属の糖尿病データ(442人、年齢・BMI・血圧など10項目)から、1年後の病気の進行度(25〜346)を予測しました。
from sklearn.datasets import load_diabetes
from sklearn.linear_model import LinearRegression
from sklearn.dummy import DummyRegressor
from sklearn.metrics import mean_absolute_error, r2_score
d = load_diabetes()
X_tr, X_te, y_tr, y_te = train_test_split(d.data, d.target, test_size=0.3, random_state=0)
base = DummyRegressor().fit(X_tr, y_tr) # 学習前の目安:いつも平均値を答える
lr = LinearRegression().fit(X_tr, y_tr) # 線形回帰で学習
for name, m in [("学習前", base), ("線形回帰", lr)]:
p = m.predict(X_te)
print(name, "MAE", mean_absolute_error(y_te, p), "R2", r2_score(y_te, p))
目的変数(1年後の病気の進行度) 平均 152.1 最小 25 最大 346
学習前(平均を答える): MAE 59.5 R2 -0.000
線形回帰: MAE 44.6 R2 0.393
Ridge回帰: MAE 44.3 R2 0.402
ランダムフォレスト: MAE 47.6 R2 0.316
係数: {'age': -52, 'sex': -194, 'bmi': 579, 'bp': 272, 's1': -505, ...}
最初の5件 実際: [321. 215. 127. 64. 175.] 予測: [240. 251. 165. 120. 182.]
| 指標 | 意味 | 手元の結果の読み方 |
|---|---|---|
| MAE(平均絶対誤差) | 予測と実際のずれの平均。単位は目的変数と同じ | 平均を答えると 59.5 のずれ、学習すると 44.6 に縮んだ |
| R2(決定係数) | 1 に近いほど説明できている。平均を答えると 0 | 0.39。4割ほど説明できた(医療データは難しい) |
| 係数 | 線形回帰では各項目が答えにどれだけ効くか | bmi が +579 で最も強く効く |
複雑な手法ほど良いとは限らない点も、この結果に出ています。 木を200本使うランダムフォレスト(R2 0.316)より、単純な線形回帰(0.393)のほうが良い成績でした。データが少なく、関係がほぼ直線的なときは単純な手法が勝ちます。線形回帰が係数を決める計算の中身は、関連記事「最小二乗法とは|公式・手計算の例とPythonでの求め方を実例で解説」で扱っています。
教師なし学習:クラスタリングを実行する
この節では、正解を渡さずにデータをグループ分けする k-means を動かし、結果の読み方が分かります。
教師なし学習は正解ラベルを使いません。 アヤメの4つの測定値だけを渡し、品種の情報を隠したまま k-means で3つのグループに分けてみます。
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
Xs = StandardScaler().fit_transform(iris.data) # 列ごとの単位の差をそろえる
km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(Xs) # y は渡さない
print(km.labels_[:10]) # 各行がどのグループか(0,1,2)
k=2: 慣性(inertia) 222.4 シルエット 0.582
k=3: 慣性(inertia) 139.8 シルエット 0.460
k=4: 慣性(inertia) 114.1 シルエット 0.387
k=5: 慣性(inertia) 90.8 シルエット 0.346
クラスタごとの件数: [53 50 47]
正解ラベルとの一致(調整ランド指数): 0.62
クラスタ0: {'versicolor': 39, 'virginica': 14}
クラスタ1: {'setosa': 50}
クラスタ2: {'versicolor': 11, 'virginica': 36}
正解を一度も見せていないのに、setosa の50件はすべて1つのグループにまとまりました。残り2品種は測定値が似ているため混ざっています(調整ランド指数 0.62。1 なら完全一致)。
教師あり学習(分類)
正解ラベルが要る(ラベル付けの手間がかかる)
正解率で採点できる
「この顧客は解約するか」のように問いが決まっている
教師なし学習(クラスタリング)
正解ラベルが要らない
採点に正解が無いので、人が意味を読み取る
「顧客にどんなグループがあるか」のように問いを探す
グループ数 k は人が決めます。k を増やすほど慣性(グループ内のばらつき)は減りますが、増やし続けると1件1グループになって意味を失います。シルエット係数などを見ながら、業務で説明できる数に決めます。次元削減のもう1つの代表、主成分分析は関連記事「主成分分析(PCA)とは|手順・寄与率・負荷量の読み方をPythonで実演」で扱っています。
強化学習を実行する:報酬で学ぶ
この節では、正解も入力データもない強化学習が、試行錯誤でどう上達するのかが実行結果で分かります。
強化学習は「正解」の代わりに「報酬」を受け取り、報酬の合計が最大になる行動の方針(方策)を学びます。 5×5 の格子で、左上から右下のゴール(+10点)まで歩き、穴(×)に落ちると −10 点、1歩ごとに −1 点という環境を作り、Q学習(状態ごとに各行動の価値を表で覚える手法)を Python だけで書きました。
Q = {(r, c): [0.0] * 4 for r in range(5) for c in range(5)} # マスごとに 上下左右 の価値
alpha, gamma = 0.5, 0.9
for ep in range(1, 301):
eps = max(0.05, 1.0 - ep / 150) # 最初はほぼランダム、だんだん学んだ通りに動く
s, done = (0, 0), False
while not done:
a = random.randrange(4) if random.random() < eps else max(range(4), key=lambda i: Q[s][i])
ns, r, done = step(s, a) # 環境が次の状態と報酬を返す
Q[s][a] += alpha * (r + gamma * max(Q[ns]) - Q[s][a]) # 価値を更新(Q学習の式)
s = ns
エピソード 1〜 20: 平均歩数 8.9 平均報酬 -17.9 穴に落ちた 20/20 ゴール 0/20
エピソード 21〜 50: 平均歩数 6.3 平均報酬 -15.3 穴に落ちた 30/30 ゴール 0/30
エピソード 51〜100: 平均歩数 9.0 平均報酬 -13.6 穴に落ちた 39/50 ゴール 11/50
エピソード101〜150: 平均歩数 8.8 平均報酬 -1.0 穴に落ちた 8/50 ゴール 42/50
エピソード151〜200: 平均歩数 8.3 平均報酬 2.3 穴に落ちた 1/50 ゴール 49/50
エピソード251〜300: 平均歩数 8.2 平均報酬 2.0 穴に落ちた 2/50 ゴール 48/50
学習後の方策(各マスで最も良い行動):
→ → → → ↓
↓ × ↓ × ↓
→ → → ↓ ↓
× ↓ × ↓ ↓
← → → → G
学習後の経路: (0,0)→(0,1)→(0,2)→(0,3)→(0,4)→(1,4)→(2,4)→(3,4)→(4,4) 歩数 8
最初の50回は全部穴に落ちていたのが、150回を超えると50回中49回ゴールし、最短の8歩で着く経路を見つけました。 誰も「右に行け」と教えていません。報酬の積み重ねだけで方針が決まるのが強化学習です。ゲームAI、ロボットの歩行、広告の出し分けなどで使われています。
訓練データとテストデータを分ける理由(機械学習の流れ)
この節では、機械学習プロジェクトの5つの段階と、なぜデータを分けて採点するのかが分かります。
学習に使ったデータで採点すると、答えを見ながらテストを受けるのと同じで、成績が実力より高く出ます。 そのため、最初にデータを「訓練用」と「テスト用」に分け、テスト用は学習に一切使わず、最後の採点だけに使います。
問いを決め、データを集める
「何を」「何から」予測したいかを決める。売上を予測するなら、過去の売上と、天候・曜日・販促などの記録を集める。ここが全体の時間の半分以上を占める。
前処理する
欠損値を埋める、文字を数値に変える、単位をそろえる(標準化)。手元の k-means でも StandardScaler で単位をそろえた。
訓練用とテスト用に分ける
train_test_split で 7:3 や 8:2 に分ける。時系列のデータは、未来の情報が訓練に混ざらないように「前の期間で学習、後の期間で採点」にする。
学習し、評価する
単純な手法から試し、正解率・MAE などでテスト用の成績を見る。学習前の目安(最頻値・平均値)と比べ、どれだけ良くなったかで判断する。
使い、見直す
モデルを業務に組み込み、新しいデータが溜まったら学習し直す。世の中が変わるとモデルの精度は下がる(ドリフト)。
1回の分け方で成績が偶然良い(悪い)こともあるため、分け方を変えて何度も採点する交差検証(cross-validation)も使います。手元の5分割交差検証では、決定木 0.960±0.033、ロジスティック回帰 0.973±0.025 でした。「±」は分け方による成績のぶれです。
データの量と成績の関係(学習曲線)も測りました。訓練データが少ないと訓練の成績だけ高く、検証の成績は低くなります。
| 訓練データの件数 | 訓練の正解率 | 検証の正解率 |
|---|---|---|
| 40件 | 1.000 | 0.662 |
| 80件 | 0.978 | 0.792 |
| 160件 | 0.970 | 0.807 |
| 320件 | 0.920 | 0.850 |
| 800件 | 0.911 | 0.872 |
40件では訓練 100%・検証 66% と大きく開き、800件では 91%・87% まで近づきました。「データが足りない」が機械学習の失敗の最も多い原因で、この表のように件数を変えて測ると、あと何件要るかの見当がつきます。
過学習とは(深さ・次数ごとの正解率の実物)
この節では、機械学習で最もよく起きる失敗「過学習」を、モデルの複雑さを変えた実測の表で分かります。
過学習(オーバーフィッティング)は、モデルが訓練データの細かな癖やノイズまで覚えてしまい、訓練の成績は上がるのにテストの成績が下がる状態です。 人工データ(1,000件・20列・1割のラベルにノイズ)で、決定木の深さを変えて測りました。
| 木の深さ(max_depth) | 葉の数 | 訓練の正解率 | テストの正解率 |
|---|---|---|---|
| 1 | 2 | 0.837 | 0.850 |
| 2 | 4 | 0.869 | 0.880 |
| 3 | 8 | 0.884 | 0.873 |
| 4 | 13 | 0.903 | 0.867 |
| 6 | 27 | 0.936 | 0.853 |
| 8 | 46 | 0.970 | 0.823 |
| 12 | 70 | 1.000 | 0.820 |
| 制限なし | 70 | 1.000 | 0.820 |
深さを増やすほど訓練の正解率は 100% に向かいますが、テストの正解率は深さ2の 0.880 が最高で、その後は 0.820 まで下がりました。訓練 100%・テスト 82% という「開き」が過学習のサインです。 回帰でも同じことが起きます。30点のデータに多項式を当てはめ、次数を変えた結果です。
次数 1: 訓練RMSE 0.522 テストRMSE 0.538 ← 単純すぎる(未学習)
次数 3: 訓練RMSE 0.332 テストRMSE 0.309
次数 5: 訓練RMSE 0.314 テストRMSE 0.297 ← ちょうどよい
次数 9: 訓練RMSE 0.310 テストRMSE 0.293
次数15: 訓練RMSE 0.303 テストRMSE 0.338 ← 訓練は良くなりテストは悪化(過学習)
- 1訓練とテストの成績を必ず両方見る訓練だけ高いなら過学習、両方低いなら未学習(モデルが単純すぎる・特徴量が足りない)
- 2モデルの複雑さを制限する決定木の max_depth、回帰の正則化(Ridge・Lasso)、ニューラルネットのドロップアウト
- 3データを増やす学習曲線の表のとおり、件数が増えるほど訓練とテストの差は縮む
- 4テスト用で何度も調整しないテストの成績を見ながら設定を変え続けると、テスト用にも過学習する。調整は交差検証で行い、テストは最後に1回
機械学習とディープラーニングの違い
この節では、検索で最も多い疑問「機械学習とディープラーニングは何が違うのか」が、同じデータで比べた結果つきで分かります。
ディープラーニングは機械学習の一手法で、違いは「特徴(手がかり)を人が設計するか、機械が見つけるか」です。 従来の機械学習では、売上予測なら「曜日」「前週の平均」のような特徴量を人が考えて表にします。ディープラーニングは、多層のニューラルネットワークが画素や音声波形のような生データから特徴を自分で作ります。
| 従来の機械学習 | ディープラーニング | |
|---|---|---|
| 特徴量 | 人が設計する(表の列を作る) | 生データから機械が見つける |
| 得意なデータ | 表形式(売上・顧客属性・センサー値) | 画像・音声・文章 |
| 必要なデータ量 | 数百〜数万件でも成り立つ | 数万〜数億件。少ないと過学習しやすい |
| 計算資源 | ノートPC の CPU で数秒〜数分 | GPU が前提。学習に時間とお金がかかる |
| 説明のしやすさ | 決定木や回帰係数は読める | 中身は読みにくい(ブラックボックス) |
| 代表的なライブラリ | scikit-learn・LightGBM | PyTorch・TensorFlow/Keras |
手書き数字(8×8 画素=64列、1,797枚)を、従来の手法と小さなニューラルネットワークで比べました。画素値をそのまま64個の特徴量として渡しています。
1枚目(数字 0):
:*=
*#+#:
.#. +=
:* ==
:= ==
:+ *-
.#:+*
-*+
決定木: 学習 0.02秒 テスト正解率 0.843
ロジスティック回帰: 学習 0.04秒 テスト正解率 0.970
SVM(RBF): 学習 0.02秒 テスト正解率 0.987
ニューラルネット(隠れ層64): 学習 1.29秒 テスト正解率 0.978
この小さな画像では、SVM が 98.7% でニューラルネットワーク(97.8%)を上回りました。「ディープラーニングのほうが常に高精度」ではなく、データの種類と量で決まります。 写真のように大きく多様な画像になると、画素を特徴量として扱う従来の手法は追いつかず、畳み込みニューラルネットワークなどのディープラーニングが必要になります。
従来の機械学習を選ぶ
データが表(Excel・DB)の形
件数が数万件まで
「なぜその予測か」を説明したい
GPU が無い・すぐ試したい
ディープラーニングを選ぶ
画像・音声・自由な文章が入力
大量のデータがある、または学習済みモデルを流用できる
精度が最優先で、中身の説明は後回しでよい
GPU か、クラウドの API を使える
ニューラルネットワークの中で何が計算されているかは、関連記事「ニューラルネットワークとは|仕組み・学習・AttentionをNumPyで実演」で、時系列を扱う代表的な構造は関連記事「LSTMとは|仕組み・3つのゲート・RNNとの違いをPythonで実演」で扱っています。
仕事での使われ方と、機械学習が向く仕事・向かない仕事
この節では、業務のどこで機械学習が使われているかと、「機械学習で何とかしたい」と言われたときの切り分けが分かります。
業務で使われる機械学習の大半は、表のデータを使った教師あり学習(予測と分類)です。 身近な例を、学習の種類と一緒に並べます。
| 業務 | 入力→出力 | 種類 | 学習に要るもの |
|---|---|---|---|
| 需要・売上予測 | 過去の売上・天候・販促→来週の数量 | 回帰 | 1〜2年分の日次データ |
| 解約・離反の予測 | 利用履歴→解約するか | 分類 | 解約した/しなかった記録 |
| 問い合わせの振り分け | メール本文→担当部署 | 分類 | 過去の振り分け済みメール |
| 異常検知・故障予兆 | センサー値→正常か異常か | 分類・教師なし | 正常時の大量データ |
| 商品の推薦 | 購買履歴→次に買いそうな商品 | 教師なし・分類 | 閲覧・購買のログ |
| 与信・不正検知 | 取引の属性→不正の確率 | 分類 | 不正と判明した取引の記録 |
| 画像検査 | 製品の写真→良品・不良品 | 分類(深層学習) | 不良品の写真を数百枚以上 |
「問い合わせの振り分け」を、10件の文章だけで最小の形で動かしました。文字2つ組(2-gram)を数えてナイーブベイズで分類しています。
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
docs = ["請求書の金額が違います", "請求書を再発行してほしい", "ログインできません", "パスワードを忘れました", ...]
labels = ["経理", "経理", "技術", "技術", ...]
model = make_pipeline(CountVectorizer(analyzer="char", ngram_range=(2, 2)), MultinomialNB()).fit(docs, labels)
print(model.predict(["ログイン画面でエラーが出ます"]))
請求書はいつ届きますか -> 経理 (技術 0.10 / 経理 0.90)
ログイン画面でエラーが出ます -> 技術 (技術 0.94 / 経理 0.06)
パスワードの変更方法 -> 技術 (技術 0.96 / 経理 0.04)
振込先の口座を教えてください -> 経理 (技術 0.06 / 経理 0.94)
「振込先」「口座」は学習データに1度も出ていませんが、「ください」「教え」のような周辺の文字の組み合わせから経理と判定しました。本番では数千件の過去メールで学習し、確率が低いものは人に回します。
判断表:機械学習が必要か
「AI で自動化したい」と言われたとき、次の順に問うと、機械学習が要るかどうかが決まります。
- 1ルールを人が全部書けるか → 書けるならルールベース「金額が100万円以上なら承認へ」は if 文で済む。機械学習にすると説明も保守も難しくなる
- 2文章・画像を読み書きする作業か → 生成AI の API要約・下書き・分類の多くは、学習させなくても既存のモデルで動く
- 3自社のデータに固有の「予測」か → 教師あり学習自社の売上・顧客・設備の数値から未来を当てる。過去の記録と正解が要る
- 4正解が無く、構造を知りたいか → 教師なし学習顧客の分類、異常の発見。結果の意味づけは人が行う
- 5どれでも無理なら、まずデータを集める仕組みから正解の記録が無い・件数が数十件しかない状態では、どの手法も成り立たない
| 向く | 向かない |
|---|---|
| 同じ判断を大量に繰り返す | 年に数回しか起きない判断 |
| 過去の記録と正解が溜まっている | 記録が無い・正解を誰も決められない |
| 多少の誤りを人が後から直せる | 1件の誤りが取り返しのつかない結果になる |
| 規則が複雑で人が書き切れない | 規則が3〜4個の if 文で書ける |
| 傾向が安定している | 制度変更などで過去の傾向が通用しなくなる |
機械学習を学ぶ順番
この節では、初めて学ぶ人がどの順に何を学ぶと遠回りしないかが分かります。
順番は「Python → scikit-learn で動かす → 評価の読み方 → 統計の基礎 → ディープラーニング」です。 数学から入ると、何のための数式か分からないまま止まりやすいため、先に動かして、必要になった数学を戻って学ぶ順をすすめます。
- 1Python の基本と NumPy・pandasリスト・関数・ファイルの読み書き。表のデータを読み込んで集計できるところまで
- 2scikit-learn で fit → predict を動かすこの記事の分類・回帰のコードを写して動かし、データを自分のものに差し替える
- 3評価の読み方(正解率・MAE・混同行列・過学習)「高い数字が出た」で終わらず、学習前の目安と比べ、訓練とテストの差を見る
- 4統計の基礎(平均・分散・相関・回帰・検定)結果の説明に必要になる。最小二乗法・p値・PCA の記事はここで読む
- 5ディープラーニング(PyTorch か Keras)ニューラルネットワークの仕組み→画像や文章の学習済みモデルの流用。GPU はクラウドで借りる
資格を目標にするなら、G検定(知識)と E資格(実装)が一般的な順です。仕事としての入り口と役割の違いは、関連記事「未経験からAIエンジニアになるには|3種類の違いと現実的な入口・学ぶ順番」で扱っています。結果を報告するときに避けて通れない「有意差」の読み方は、関連記事「p値とは|意味・有意水準・よくある誤解をPythonで実演」で扱っています。
よくあるエラー・つまずき(scikit-learn の原文つき)
この節では、初めて scikit-learn を動かすときに出るエラーと、その意味が分かります。
手元で意図的に起こしたエラーの原文です。どれもデータの「形」に関するもので、メッセージを読めば直せます。
| やったこと | エラーの原文(先頭) | 直し方 |
|---|---|---|
| 文字列(「東京」など)を含む列を渡した | ValueError: dtype='numeric' is not compatible with arrays of bytes/strings. |
OneHotEncoder などで数値に変換する |
| 学習前に predict した | NotFittedError: This LogisticRegression instance is not fitted yet. Call 'fit' with appropriate arguments |
先に fit(X, y) を呼ぶ |
1件のデータを [3] のように渡した |
ValueError: Expected 2D array, got 1D array instead |
[[3]] のように2次元(行×列)で渡す |
| 学習時と列数が違うデータで予測した | ValueError: X has 3 features, but LinearRegression is expecting 2 features as input. |
学習時と同じ列を同じ順で渡す |
| 欠損値(NaN)が残っている | ValueError: Input X contains NaN. |
SimpleImputer で埋めるか、行を除く |
| 正解ラベルが1種類しかない | ValueError: This solver needs samples of at least 2 classes in the data |
両方のクラスが入るようにデータを集める・分ける |
| X と y の件数が違う | ValueError: Found input variables with inconsistent numbers of samples: [3, 2] |
行の数をそろえる(前処理で行を落としていないか) |
| 反復回数が足りない | ConvergenceWarning: lbfgs failed to converge after 5 iteration(s) |
StandardScaler で単位をそろえる、max_iter を増やす |
エラーではないつまずきもあります。
- 訓練の正解率が 100% で喜んでしまう:テストの成績を見ます。決定木は制限しないと訓練データを丸暗記します(過学習の表のとおり)。
- 学習前の目安と比べていない:正解率 90% でも、9割が同じラベルのデータなら「全部そのラベル」と答えるだけで 90% になります。DummyClassifier と必ず比べます。
- テストデータの情報が前処理に混ざる(リーク):標準化や欠損の補完は訓練データだけで fit し、テストには transform だけを使います。Pipeline にまとめると防げます。
- 時系列をランダムに分けた:未来の情報で過去を学習してしまい、本番で精度が出ません。時間順で分けます。
よくある質問
Q. 機械学習とは何ですか?一言で言うと? A. 人がルールを書く代わりに、データから規則性をコンピューターに見つけさせ、新しいデータの予測や判断に使う技術です。手元の例では、品種の見分け方を1行も書かずに、データだけから正解率 98% の分類器ができました。
Q. AI と機械学習は同じですか? A. 同じではありません。AI が広い概念で、機械学習はそれを実現する方法の1つです。人が書いたルールで動く AI(ルールベース)は機械学習ではありません。
Q. 機械学習とディープラーニングの違いは? A. ディープラーニングは機械学習の一手法で、多層のニューラルネットワークを使い、特徴量を機械が自分で見つけます。表のデータなら従来の手法、画像・音声・文章ならディープラーニングが向きます。手元の小さな手書き数字では SVM(98.7%)が小さなニューラルネット(97.8%)を上回りました。
Q. 生成AI(ChatGPT など)は機械学習ですか? A. はい。生成AI はディープラーニングで作られた、文章や画像を生成するモデルで、機械学習の中に含まれます。大量の文章から「次の語」を当てる自己教師あり学習で土台を作っています。
Q. 教師あり学習と教師なし学習の違いは? A. 教師あり学習は「入力と正解」のペアで学び、新しい入力の正解を当てます。教師なし学習は正解なしで、似たもののグループ分けや構造の発見を行います。手元の k-means は品種を教えなくても setosa の50件を1グループにまとめました。
Q. 強化学習は何が違うのですか? A. 正解も入力データも事前に与えず、行動の結果として受け取る「報酬」だけで学びます。手元の格子では、最初の50回は全部穴に落ちていたのが、150回を超えると 98% ゴールするようになりました。
Q. 過学習とは何ですか?どう防ぎますか? A. 訓練データに合わせすぎて、新しいデータで成績が下がる状態です。手元の決定木では深さ12で訓練 100%・テスト 82% でした。モデルの複雑さを制限する、データを増やす、交差検証で設定を決める、の3つで防ぎます。
Q. データはどれくらい必要ですか? A. 問題と手法によります。手元の人工データでは 40件で検証 66%、800件で 87% でした。表のデータの教師あり学習は数百〜数千件から成り立つことが多く、画像のディープラーニングは数千枚以上が目安です。件数を変えて学習曲線を描くと、あと何件要るかの見当がつきます。
Q. 機械学習に数学は必要ですか? A. 動かすだけなら scikit-learn が中身を隠してくれるため、最初は要りません。結果を説明する・手法を選ぶ段階で、平均・分散・相関・行列の積・微分の基礎が必要になります。先に動かし、必要になった所を戻って学ぶ順をすすめます。
Q. 機械学習と統計学の違いは? A. 使う手法は重なります。統計学は「なぜそうなるかの説明」、機械学習は「新しいデータに対する予測の精度」を主な目的にする、という違いで語られることが多いです。
Q. Excel でも機械学習はできますか? A. 線形回帰(近似曲線・FORECAST 関数)は Excel でもできます。分類・クラスタリング・交差検証まで行うなら Python と scikit-learn のほうが短く書けます。
Q. 学習済みのモデルは保存できますか?
A. できます。scikit-learn のモデルは joblib.dump(model, "model.joblib") で保存し、joblib.load で読み込んで predict だけを行えます。scikit-learn の公式ドキュメントは、信頼できない出所のファイルを読み込まないよう注意しています。
まとめ
- 機械学習は、人がルールを書く代わりに、データから規則性を機械に見つけさせて予測・判断に使う技術。AI ⊃ 機械学習 ⊃ ディープラーニング ⊃ 生成AI の関係にある。
- 種類は教師あり(分類・回帰)・教師なし(クラスタリング・次元削減)・強化学習の3つ。業務で使われる大半は表データの教師あり学習。
- 手元の実行では、分類は学習前 33%→学習後 98%、回帰は MAE 59.5→44.6、クラスタリングは正解なしで setosa を完全に分離、強化学習は300回の試行で最短経路に到達した。
- データは訓練用とテスト用に分け、学習前の目安(最頻値・平均値)と比べる。訓練 100%・テスト 82% のような開きは過学習。
- ディープラーニングとの違いは特徴量を人が作るか機械が見つけるか。表のデータは従来の手法、画像・音声・文章はディープラーニング。学ぶ順は Python → scikit-learn → 評価 → 統計 → 深層学習。
参考・出典
確認日はいずれも 2026年10月29日です。
- Google for Developers「機械学習とは」(機械学習クラッシュコース):https://developers.google.com/machine-learning/intro-to-ml/what-is-ml?hl=ja
- scikit-learn「Getting Started」:https://scikit-learn.org/stable/getting_started.html
- scikit-learn「1. Supervised learning」:https://scikit-learn.org/stable/supervised_learning.html
- scikit-learn「2. Unsupervised learning」:https://scikit-learn.org/stable/unsupervised_learning.html
- scikit-learn「3.1. Cross-validation: evaluating estimator performance」:https://scikit-learn.org/stable/modules/cross_validation.html
- scikit-learn「Underfitting vs. Overfitting」:https://scikit-learn.org/stable/auto_examples/model_selection/plot_underfitting_overfitting.html
- scikit-learn「11. Model persistence」:https://scikit-learn.org/stable/model_persistence.html
- scikit-learn「9.1. Toy datasets」(iris・diabetes・digits):https://scikit-learn.org/stable/datasets/toy_dataset.html
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「機械学習とは|種類・ディープラーニングとの違いを実行結果で解説」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。