第3回:機械学習概論:考え方と枠組み†
3.1 機械学習イントロダクション†
機械学習とは†
学習 (Learning)†
大辞林より
- まなびおさめること.勉強すること.「新しい教科を―する」
- 〔生〕 生後の反復した経験によって,個々の個体の行動に環境に対して適応した変化が現れる過程.ヒトでは社会的生活に関与するほとんどすべての行動がこれによって習得される.
- 〔心〕 過去の経験によって行動の仕方がある程度永続的に変容すること.新しい習慣が形成されること.
- 〔教〕 新しい知識の獲得,感情の深化,よき習慣の形成などの目標に向かって努力を伴って展開される意識的行動.
図1: ヒトの学習
機械学習 (Machine Learning)†
- 統計的手法を使用して,明示的にプログラムされずにコンピューターが学習して意思決定できるようにする人工知能のアプリケーションの1つ 【Great Learning】
- コンピューターが新しいデータから学習してタスクの実行方法を変容していくプロセス; この時,人間がプログラムの形で明示的な指示を与えることがない 【Camridge Dictionary】
- データを分析する方法の1つで,データから,「機械」(コンピューター)が自動で「学習」し,データの背景にあるルールやパターンを発見する方法.近年では、学習した成果に基づいて「予測・判断」することが重視されるようになった.【野村総研】
- 機械学習とは,AIが人間のような高度な判断を実行するに必要な「法則」を、コンピュータに探させる方法(アルゴリズム)の総称 【スッキリわかる機械学習】
- 観測センサーやその他の手段で収集されたデータの中から一貫性のある規則を見つけだそうとする研究です.数学の統計の分野と強い関連があります.また,機械学習はAIの他のほとんどの分野で利用されています.【人工知能学会】
プログラミングと機械学習†
従来,機械(コンピュータ)に仕事をさせるには,人間が情報処理の手順や法則をプログラムとして記述し,機械に与えて実行していた
- プログラムは人間の英知によって書かれるもの
- 【メリット】100%指示した通りに動作する.テスト可能である
- 【デメリット】人間の経験と勘の域を出ない
図2: プログラミングによる情報処理
一方,機械学習による情報処理では,機械(コンピュータ)がデータから法則を自動的・統計的に学習する
- 学習によって得られた法則に基づいて,機械は新しいデータに対する予測・推論ができる
- もちろん,データの前処理や学習の手順は人間がプログラミングする必要がある
- 【メリット】人間には見つけられない法則・パターンを見つけてくれる.
- 【デメリット】100%の正しさを保証できない.
図3: 機械学習による情報処理
機械学習に向いていること,向いてないこと†
目的・問いを明確化する†
- まず初めに,やりたいこと,目的,問い(Research Question)を明確化する
- 商品Aの翌日の売上個数を予想したい
- 商品Aのこの先1週間の売り上げ金額を予想したい
- 商品Aに対する広告の効果を売り上げ個数で評価したい
- 商品Aが既存の商品Bに比べてどれだけ売れているか知りたい
- 商品A
- 機械学習はあくまで目的を実現するための一つの手段.目的化してはいけない
- コストの高い
機械学習向いている場合†
チャレンジ†
3.2 アヤメ(Iris) の分類問題†
アヤメ問題†
- アヤメ(花)の観測データ(特徴)から,その品種を見分ける問題.機械学習の例題としてよく使われる
- 特徴: がくの長さ(cm),がくの幅(cm),花びらの長さ(cm),花びらの幅(cm)
- 品種:以下の3種類
図3:分類するアヤメの品種
Google Colabでやってみよう†
Google Colabの起動†
データのロード†
データを眺める†
アヤメ問題の定式化†
- がくの長さ,がくの幅,花びらの長さ,花びらの幅から 品種を当てる問題
- 【入力 X】: 4つの数値 ex: 4.8, 3.3, 1.4, 0.2
- Xは特徴量(feature),説明変数などと呼ばれる.予測のための手がかり
- 【出力 y】: Iris-setosa, Iris-versicolor, Iris-virginicaのいずれかの品種
- yは正解データ,ラベル,目的変数などと呼ばれる.予測の答え
- この問題において,機械学習で行うこと: y=f(X)のfを見つけること
- データを読み込んで,入力Xと出力yの関係を学習し,法則 fを発見する
- fはモデル(model)と呼ばれる
- モデルfの見つけ方には様々な手法(アルゴリズム)が存在する

図4: アヤメ問題への機械学習の適用
機械学習を実行し,モデルを構築する†
#特徴に使う列名リスト
features = ["がくの長さ", "がくの幅", "花びらの長さ", "花びらの幅"]
#正解データに使う列名
label = "品種"
X = data[features]
y = data[label]
from sklearn import tree
#決定木による分類モデルの構築
model = tree.DecisionTreeClassifier(random_state = 0)
model.fit(X,y)
未知のデータで予測してみる†
- 元のデータを参考に,それぞれの品種に似たデータを3つ用意する
#未知のデータで予測してみる
new_data = pd.DataFrame([[4.8, 3.3, 1.4, 0.2],[7.3, 3.2, 4.4, 1.3],[5.5, 2.6, 5.5, 2.7] ], columns=features)
new_data
#予測してみる
model.predict(new_data)
アプリに組み込んでみる†
#ユーザから入力を受け付けて,答えを出すプログラム
print("■アヤメの品種予測アプリ")
while True:
input_str = input("がくの長さ・幅,花びらの長さ・幅をコンマ区切りで入力(0で終了):")
if (input_str == "0"):
break
vals = np.array(input_str.split(",")).astype(float)
if (len(vals) != 4):
print(" ×エラー:4つの数値が必要です.やり直し")
continue
df_params = pd.DataFrame([vals], columns=features)
print(f" ○AI:品種は{model.predict(df_params)[0]}と思われます")
print("終了します")
3.2 機械学習のタイプ†
ある基準に基づいて,
- 人間の関与のもとで訓練されるかどうか?
- 一気に学習するか,少しずつ学習するか?
教師あり/教師なし学習†
教師あり学習(Supervised Learning)†
応用例†
- 郵便番号の読み取り
- スパムメール分類
- 商品の需要予測,在庫予測
- 会社の収益の予測
- 機械の故障予知
- 状況(コンテキスト)推定
- 医療画像
- 顧客を嗜好でグループに分類する
- ブログ円手取りからのトピック特定
- Webサイトへの異常なアクセスパターンの検知
バッチ学習とオンライン学習†
インスタンスベース†
3.3 全体フレームワーク†
3.4 実装フロー†