Skip to content

第 3 回 質問と回答

このページでは、第 3 回「機械学習の基礎」に関して寄せられた質問・要望と、それに対する回答をまとめています。質問者の氏名や学籍番号は掲載せず、匿名で扱います。

質問の送り方

質問は 「📮 連絡フォーム」 または「各回の演習確認フォーム」からお寄せください。いただいた内容は、同様の疑問を持つ他の受講生にも役立つようこのページに随時追加していきます。


A. 教師あり学習・回帰の応用例

教師あり学習の例についてもう少し詳しく知りたい / 今日やった内容や活用法について詳しく知りたい

代表的な応用例を「回帰」「分類」に分けて整理します。第 1 回・第 3 回ですでに紹介したスパム判定・手書き数字認識・住宅価格予測・試験点数予測といった典型例は省き、ここでは少し業界寄りの応用例を取り上げます。

回帰(数値を当てる)

応用 入力(特徴量) 出力(ラベル)
中古車の価格予測 走行距離・年式・車種・修復歴 買取価格(万円)
配送時間(ETA)予測 出発地・到着地・時刻・道路状況・天気 所要時間(分)
為替レート(USD/JPY)の予測 過去のレート・金利差・物価指数・経済指標 翌営業日のレート(円)
顧客生涯価値(LTV)の予測 取引履歴・年齢・取引頻度・残高 将来 N 年間の取引総額(円)

分類(カテゴリを当てる)

応用 入力(特徴量) 出力(ラベル)
クレジットカードの不正検知 取引時刻・金額・場所・利用頻度の異常度 正常 / 不正
顧客の解約予測 利用頻度・契約期間・問い合わせ履歴 解約する / 継続する
製造ラインの外観検査 製品の画像(傷・色ムラ・形状) 良品 / 不良品
与信審査 年収・勤続年数・取引履歴 貸せる / 貸せない

第 4 回では「回帰」、第 5 回では「分類」を実際にコードで動かしながら詳しく扱います。


B. NumPy と reshape について

もし x が 3 次元のデータだったら、どう reshape するのですか?

「3 次元」が何を指すかで答えが変わります。

(1) サンプルが 3 つの特徴量を持つ場合

身長・体重・年齢の 3 つを使って何かを予測する、というケースです。この場合の X は 2 次元配列 で、形状は (サンプル数, 特徴量の数) になります。

X = np.array([
    [170, 65, 20],   # サンプル 1
    [165, 55, 22],   # サンプル 2
    [180, 75, 19],   # サンプル 3
])
print(X.shape)  # (3, 3) — サンプル 3 件 × 特徴量 3 つ

特徴量が複数ある場合は reshape は不要です。すでに (n_samples, n_features) の形になっているからです。

(2) 本当の意味で 3 次元のデータ(画像など)

例えば 28×28 のグレースケール画像が 100 枚ある場合、X.shape == (100, 28, 28) となります。scikit-learn の古典的なモデル(線形回帰など)は 2 次元配列しか受け付けないため、画像を 1 次元に「平らに伸ばす」必要があります。

X = np.random.rand(100, 28, 28)        # 形状 (100, 28, 28)
X_flat = X.reshape(100, -1)            # 形状 (100, 784) に変換
# または X.reshape(-1, 28*28) でも同じ

-1 は「残りの次元から自動計算してね」という意味で、28 × 28 = 784 を計算しなくて済みます。

なお、画像を平らにせずそのまま扱う方法(畳み込みニューラルネットワーク)は、授業の後半で扱う予定です。

y を reshape しないのはなぜですか?

scikit-learn の API 設計上、入力 X と出力 y で要求される形状が違うためです。

引数 期待される形状 意味
X 2 次元 (n_samples, n_features) サンプル × 特徴量の表
y 1 次元 (n_samples,) 各サンプルの正解値が並んだベクトル

X は「複数の特徴量を扱える」ように常に 2 次元で受け取る設計になっています。一方、y は「1 つの予測対象」が普通なので 1 次元で十分、というのが scikit-learn の考え方です。

x = np.array([2, 3, 5, 6, 7])
y = np.array([40, 50, 55, 62, 65])

X = x.reshape(-1, 1)   # X は 2 次元 (5, 1) にする必要がある
# y はそのまま 1 次元 (5,) で OK

model.fit(X, y)

※ 複数の値を同時に予測する「多出力回帰」の場合は y も 2 次元 (n_samples, n_targets) にしますが、本講義では扱いません。


C. Python・scikit-learn の使い方

import 文が長いので覚えるのが大変です

import 文をすべて暗記する必要はありません。実務でも、公式ドキュメントやテンプレートからコピーしたり、エディタの補完機能を使ったりすることが一般的です。ただし、import 文を見たときに、それがどのような役割を持つものであるかについては、把握できるようになっておいてください。

機械学習でよく使う import は一覧にしておくと便利です。

# 数値計算・データ処理
import numpy as np
import pandas as pd

# 可視化
import matplotlib.pyplot as plt
import seaborn as sns

# 機械学習(scikit-learn)
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

D. 学習リソース

データサイエンティストになるために、読んだほうがいい専門書を教えてほしい

目的とレベル別に、定番とされる書籍を幾つか紹介します。

入門〜中級(実装重視)

  • 「Python 機械学習プログラミング」(Sebastian Raschka) — scikit-learn を使った機械学習全般の定番。本講義の内容を発展させた構成
  • 「ゼロから作る Deep Learning」(斎藤康毅) — ライブラリに頼らずニューラルネットを自作する。仕組みの理解に最適
  • 「Python データサイエンスハンドブック」(Jake VanderPlas) — NumPy・pandas・matplotlib・scikit-learn を一冊で網羅

理論を深く知りたい場合

  • 「パターン認識と機械学習」(C.M. ビショップ、通称 PRML) — 機械学習の数学的基礎の名著。難易度は高め
  • 「統計的学習の基礎」(Hastie, Tibshirani, Friedman) — 統計学の観点から機械学習を解説

実務・キャリア寄り

  • 「仕事ではじめる機械学習」(有賀康顕 ほか) — モデル開発だけでなく、運用や評価設計まで扱う実務書
  • 「Kaggle で勝つデータ分析の技術」(門脇大輔 ほか) — コンペで使われる実践テクニック集

E. 演習・レポートの運営について

自分が提出したレポートの点数を知る方法はありますか?

現時点では、各回の演習確認フォームに対する個別フィードバックや点数公開は行っていません。全体の傾向や典型的なつまずき方は、このような Q&A ページにまとめて還元する形を取っています。個別に評価が気になる場合は「📮 連絡フォーム」または講義後に直接お声掛けください。

演習確認フォームの (2) で、コードを 1 つだけ提出するのと、2 つ提出するのでは得点に差はありますか?

提出数による加点・減点はありません。第4回目以降は、演習確認の方式を変更する予定ですので、ご注意ください。