第 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 は一覧にしておくと便利です。
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回目以降は、演習確認の方式を変更する予定ですので、ご注意ください。