#author("2024-06-04T08:36:23+09:00","default:cmdsadmin","cmdsadmin")
#author("2024-06-18T23:37:12+09:00","default:cmdsadmin","cmdsadmin")
* 機械学習概論:考え方と枠組み [#b4d05eef]

#contents

* 1. 機械学習の考え方 [#z144176a]

** 機械学習とは [#m86fa502]

*** 学習 (learning) [#u44cd8a4]
大辞林より
+ まなびおさめること.勉強すること.「新しい教科を―する」
+〔生〕 生後の反復した経験によって,個々の個体の行動に環境に対して適応した変化が現れる過程.ヒトでは社会的生活に関与するほとんどすべての行動がこれによって習得される.
+〔心〕 過去の経験によって行動の仕方がある程度永続的に変容すること.新しい習慣が形成されること.
+〔教〕 新しい知識の獲得,感情の深化,よき習慣の形成などの目標に向かって努力を伴って展開される意識的行動.

CENTER:&attachref(./3_gakushu.png,70%);~
CENTER:図1: ヒトの学習

*** 機械学習 (machine learning)[#i0bf0e0e]
- 統計的手法を使用して,明示的にプログラムされずにコンピューターが学習して意思決定できるようにする人工知能のアプリケーションの1つ [[【Great Learning】:https://www.mygreatlearning.com/blog/what-is-machine-learning/]]
- コンピューターが新しいデータから学習してタスクの実行方法を変容していくプロセス; この時,人間がプログラムの形で明示的な指示を与えることがない [[【Camridge Dictionary】:https://dictionary.cambridge.org/ja/dictionary/english/machine-learning]]
- データを分析する方法の1つで,データから,「機械」(コンピューター)が自動で「学習」し,データの背景にあるルールやパターンを発見する方法.近年では、学習した成果に基づいて「予測・判断」することが重視されるようになった.[[【野村総研】:https://www.nri.com/jp/knowledge/glossary/lst/ka/machine_learning]]
- 機械学習とは,AIが人間のような高度な判断を実行するに必要な「法則」を、コンピュータに探させる方法(アルゴリズム)の総称 [[【スッキリわかる機械学習】:https://sukkiri.jp/books/sukkiri_ml]]
- 観測センサーやその他の手段で収集されたデータの中から一貫性のある規則を見つけだそうとする研究です.数学の統計の分野と強い関連があります.また,機械学習はAIの他のほとんどの分野で利用されています.[[【人工知能学会】:https://www.ai-gakkai.or.jp/whatsai/AIresearch.html]]



*** プログラミングと機械学習 [#u8726945]
従来,機械(コンピュータ)に仕事をさせるには,人間が情報処理の手順や法則をプログラムとして記述し,機械に与えて実行していた
- プログラムは人間の英知によって書かれるもの
- 【メリット】100%指示した通りに動作する.テスト可能である
- 【デメリット】人間の経験と勘の域を出ない.仕事が変わればプログラムを書き直さなければならない

CENTER:&attachref(./3_programming.png,75%);~
CENTER:図2: プログラミングによる情報処理

一方,機械学習による情報処理では,機械(コンピュータ)がデータから法則を''自動的・統計的''に学習する
- 学習によって得られた法則に基づいて,機械は新しいデータに対する''予測・推論''ができる
-- もちろん,データの前処理や学習の手順は人間がプログラミングする必要がある
- 【メリット】人間には見つけられない法則・パターンを見つけてくれる.
- 【デメリット】100%の正しさを保証できない.データの品質が悪いと使い物にならない

CENTER:&attachref(./3_machine_learning.png,75%);~
CENTER:図3: 機械学習による情報処理


** 機械学習の種類 [#f7293c5c]
*** 教師あり学習 (supervised learning) [#uedaa2db]
データにおける''入力X(特徴量)''と出力''y(正解データ)''の''関係f (y = f(X))''を学習する.
データにおける''入力X(特徴量)''と''出力y(正解データ)''の''関係f (y = f(X))''を学習する.
機械学習の最も代表的なアプローチ.''回帰''と''分類''の2タイプに大別される.

- ''回帰 (regression) ''
-- yを数値(連続値)として,Xから予測するモデルを構築する
-- 応用例:売上予測,需要予測,リードタイム予測,収穫量予測
-- モデル:線形回帰,リッジ回帰,ラッソ回帰,回帰木

- ''分類 (classification)''
-- yをカテゴリ(離散値)として,予測する問題
-- 応用例:故障予測,文字認識,感情認識,スパム判定
-- モデル:決定木,ロジスティック回帰,k近傍法,サポートベクタマシン(SVM)

*** 教師なし学習 (unsupervised learning) [#m576b3cd]
正解データを指定せず,データそのものがどのような性質を持っているかを学習する.
代表的な方法に''次元削減'',''クラスタリング''がある.

- ''次元削減 (dimensionality reduction)''
-- 変数(列)同士の関係に着目して,情報をなるべく失わないように変数の数を削減する
-- 応用例:可視化,データの圧縮,特徴量の抽出
-- モデル:主成分分析(PCA)

- ''クラスタリング(clustering)''
--  サンプル(行)同士の関係に着目して,似た性質を持つデータをグループに分ける
-- 応用例:顧客のセグメンテーション(類型化),ブランド・商品イメージのカテゴリー分析,画像・音声分類
-- モデル:k-means,階層的クラスタリング


*** その他 [#j27ae6a5]
- ''強化学習 (reinforcement learning)''
-- ある環境の下で,行動の結果が最も良くなるように,適切な行動を学習する
-- 応用例:ゲーム,ロボット制御
- ''深層学習 (deep learning)''
-- 学習モデルに多層ニューラルネットワークを使用
-- 重要な特徴量を機械が自動的に学習し,データから結果までを一気通貫で行う(end-to-end)
-- 応用例:画像認識,音声認識,自然言語処理,異常検知

** 機械学習を使うべきか使わざるべきか? [#jc802fd4]
- 機械学習はあくまで目的を実現する''手段''に過ぎない.使うことを目的としてはいけない
- 機械学習はコストの高い手法.解決したい課題に対して本当に使うべきかどうかを吟味する必要がある
-- ちょっとしたデータ分析で済む問題に対して,無理やり使おうとしていないか?
-- プログラム(ルール)が書ける問題に対して,データで説明しようとしていないか?

*** 目的・問いを明確化する [#b5819eae]
- まず初めに,やりたいこと,目的,''問い(Research Question)''を明確化する
-- なるべく具体的(Sharp)な質問を考える
--- ×売り上げがどうなるか?
--- △明日の売上個数はどうなるか?
--- ○商品Aの翌日の売上個数が何個になるか予測できるか?
- よく似た文章でも,RQとして考えると全く別物になる
-- 商品Aの翌日の売上個数は何個か?
-- 商品Aのこの先1週間の売上金額はいくらになるか?
-- 商品Aの売上個数の傾向に似た別の商品をどれか?
-- 商品Aに対する広告の効果があったか・なかったか?
-- 商品Aが既存の商品Bに比べてどれだけ売れているか?
-- 商品Aはこれまで何曜日に一番多く売れたか?
-- 商品Aに適用する消費税率はいくらか?

*** 機械学習向いている問題 [#z3122ebc]
- 目的に関連する質の良いデータが豊富にある
- 自明・既知のルールがない,あるいは,ルール化できない問題
- 既存のアルゴリズムでは性能に限界がある問題


** 機械学習とPython [#k99ee9ac]

- ''scikit-learn (サイキット・ラーン)''
-- 機械学習のための強力なライブラリ
--- [[API一覧:https://scikit-learn.org/stable/modules/classes.html]]
-- 基本的な教師あり学習と教師なし学習に対応
-- 強化学習,深層学習,シーケンス予測には対応しない

- データ操作・可視化のためのライブラリ
-- Pandas
-- Numpy
-- Matplotlib
-- Seaborn: Matplotlibより高級な描画ライブラリ

- 他のライブラリ
-- Tensorflow: Googleが開発した深層学習のフレームワーク
-- Keras: ニューラルネットワーク向けのライブラリ.Tensorflowと組み合わせて動作する
--- 画像認識,音声認識,文章の生成,botシステムの作成などの応用
-- PyTorch: Facebookが開発した深層学習のフレームワーク
--- 自然言語処理への応用

* 2. 機械学習の体験(教師あり学習・分類) [#r528285d]

** アヤメ(Iris)の分類問題 [#hcca53cd]
- 教育目的によく用いられる古典的な分類問題.アヤメ(花)の「花びら」と「がく」の長さ・幅から3種類の品種を見分ける
- RQ:アヤメ(花)の観測データから,その品種を見分けることができるか?
-- 特徴: がくの長さ(cm),がくの幅(cm),花びらの長さ(cm),花びらの幅(cm)
-- 品種:以下の3種類
- [[データ:https://www2.cmds.kobe-u.ac.jp/~masa-n/dshandson/iris-sample.csv]]

|''ヒオウギ・アヤメ(Iris-Setosa)''|''ブルーフラッグ (Iris-Versicolour)''|''バージニカ (Iris-Virginica)''|h
|&attachref(./iris_setosa.jpg,80%);|&attachref(./iris_versicolour.jpg,80%);|&attachref(./iris_verginica.jpg,80%);|
|[[(C) Malcolm Manners - CC BY 2.0:https://www.flickr.com/photos/mmmavocado/4337131055]]| [[(C) Maja Dumat - CC BY 2.0:https://www.flickr.com/photos/blumenbiene/5398377209]]|[[(C) Frank Mayfield - CC BY-SA 2.0:https://www.flickr.com/photos/gmayfield10/3352169862]]|

CENTER:図3:分類するアヤメの品種

** Google Colabでやってみよう [#kb059adf]
*** Google Colabの起動 [#of1ee063]
- Webブラウザを立ち上げ,[[''Googld Drive'':https://drive.google.com]] を開く
- +新規→(その他)→ Google Colaboratory
-- Google Colaboratoryが見つからない場合は,+アプリを追加で,虫眼鏡→「Colab」で検索→インストールする
- 上部にあるファイル名を,''iris.ipynb''に変更する
- 以下を貼り付けて実行
 #準備(すべてに共通)
 # PandasとNumpyをインポート
 import pandas as pd
 import numpy as np
 
 # 日本語化Matplotlibもインポート
 import matplotlib.pyplot as plt
 !pip install japanize-matplotlib 
 import japanize_matplotlib
 
 # Seabornもインポート
 import seaborn as sns
 
 # pickleをインポート(モデルの保存用)
 import pickle

*** データのロード [#vbfc854f]
- コードセルを一つ追加し,以下を貼り付けて実行
 #アヤメデータの取得
 iris_data = pd.read_csv("https://www2.cmds.kobe-u.ac.jp/~masa-n/dshandson/iris-sample.csv")
 
 #確認
 iris_data

*** データを眺める [#k60bcad5]
- データをよく眺めてみよう
-- 「表のマーク」アイコンを押すと,表データを見やすく操作できる
- 表のサイズ
 iris_data.shape
- 各列の統計量
 iris_data.describe()
- それぞれの品種のサンプル数
 iris_data["品種"].value_counts()
- 散布図行列 (詳細は第4回で)
 #Seabornのペアプロットを使う
 sns.pairplot(data=iris_data, hue="品種")
~
 #Pandasにも機能がある.ただし,色分けするのに手間なので,Seabornを使おう
 pd.plotting.scatter_matrix(iris_data)


*** アヤメ問題の定式化 [#b68752ef]
- がくの長さ,がくの幅,花びらの長さ,花びらの幅から 品種を当てる問題
-- ''【入力 X】:'' 4つの数値 ex: 4.8, 3.3, 1.4, 0.2
--- Xは''特徴量(feature),説明変数''などと呼ばれる.予測のための手がかり
-- ''【出力 y】:'' Iris-setosa, Iris-versicolor, Iris-virginicaのいずれかの品種
--- yは''正解データ,ラベル,目的変数 (target)''などと呼ばれる.予測の答え
- ''この問題において,機械学習で行うこと: y=f(X)のfを見つけること''
-- データを読み込んで,入力Xと出力yの関係を学習し,法則 fを発見する
-- fは''モデル(model)''と呼ばれる
--- モデルfには,最初は値が決まっていない変数(''パラメータ (parameters)'')が1つ以上入っている
--- 学習とは,大量のデータを読み込んで,Xとyの対応関係にもっとも当てはまる( ''フィット(fit)'' する)ようなパラメータの値を自動的に探すこと
--- パラメータの探し方には,様々な ''手法(アルゴリズム)'' が存在する
-- アルゴリズムを動かす際に,人間が設定するパラメータを ''ハイパーパラメータ (hyper parameters)''と呼ぶ
--- 決定木の深さの上限:max_depth,葉ノードの数の上限:max_leaf_nodes

&attachref(./3_formulation.png,70%);~
図4: アヤメ問題への機械学習の適用


*** 機械学習を実行し,モデルを構築する [#ge41e7df]
- 決定木による分類モデル(DecisionTreeClassifier)を使ってみる

 #特徴に使う列名リスト
 features = ["がくの長さ", "がくの幅", "花びらの長さ", "花びらの幅"]
 #正解データに使う列名
 target = ["品種"]
 
 X = iris_data[features]
 y = iris_data[target]
 
 from sklearn import tree
 #決定木による分類モデルの構築.木の深さの上限を3とする(ハイパーパラメータ)
 model = tree.DecisionTreeClassifier(random_state=0, max_depth=3)
 model.fit(X,y)
 
*** 未知のデータで予測してみる [#x4991115]
- 元のデータを参考に,それぞれの品種に似たデータを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)

*** アプリに組み込んでみる [#vf64588a]
- ユーザと対話的に答えを出力するAIアプリ

 #ユーザから入力を受け付けて,答えを出すプログラム
 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("終了します")

** 何が起きたのか? [#q51fed6d]
- 機械学習アルゴリズムの1つである''決定木''によって,X(アヤメの特徴量)からy(品種)を予測するモデルが構築された
- ''条件分岐''によって分類モデルを構築する機械学習アルゴリズム
-- 回帰モデルにも応用可能

*** モデルを確認する [#xeb6de71]
- 構築された決定木のモデルを表示する
 tree.plot_tree(model, feature_names=X.columns)

CENTER:&attachref(3_decision_tree_iris.png);~
CENTER:図5: 決定木によるアヤメの分類モデル

*** 決定木アルゴリズムの直感的な解説 [#s2e2bc87]
+ はじめは全体グループを表す根ノードから始める
+ 特徴量に関する条件を探し,それを満たすデータと満たさないデータに分割して,2つの子ノードを作る
-- この時,子ノードの''不純度 (gini)''がなるべく低くなるような条件を探索する
-- 決定木ではこの分割条件(変数名 <= 閾値)がパラメータとなる
+ 不純度が0になる,あるいは,指定された深さ(この場合3)まで到達すれば終了.そうでなければ,2.に戻る

CENTER:&attachref(3_bunkatsu.png);~
CENTER:図6: 決定木によって分割されたデータ


※[[アルゴリズム詳細:https://scikit-learn.org/stable/modules/tree.html#tree]]



*** 疑問 [#i214365f]
- このモデルってどこまで信頼していいの?
- 未知のデータに対して,アプリの出力は完ぺきなの?何パーセント当たるの?

→ ''モデルの評価'' が必要
- どうやって評価するの?

** モデルを評価する [#xfe72f74]
- すべてのデータで学習するのではなく,学習用のデータ(訓練データ)と評価用のデータ(テストデータ)に分ける
- 訓練データで作成したモデルを,テストデータを未知のデータとして評価する
- モデルの予測とテストデータの正解がどれだけ合致するかを評価する

*** データを分割する:ホールドアウト法 [#xb7970ad]
- 与えられたデータを2つに分割する (本当は3つに分けるのが望ましいが次回以降で)
-- ''訓練データ'':  モデルの学習に使うデータ
-- ''テストデータ'': モデルの性能評価に使うデータ
- 特徴量X, 正解データyをそれぞれ同じところで分割する

CENTER:&attachref(./3_train_test_split.png,80%);~
CENTER:図7: 訓練データとテストデータの分割


- Pythonのコードでは,scikit-learnが提供する関数 train_test_split()を使うと便利
- パラメータ:
-- X: 特徴量
-- y: 正解データ
-- train_size: 訓練データの割合 (デフォルト0.75)
-- test_size: テストデータの割合(デフォルト0.25)
-- shuffle: ランダムに分割(デフォルトTrue)
-- random_state: 乱数シード
-- stratify: 指定したデータの分布が均一になるよう分割 (デフォルトNone)

 #X, yのそれぞれを訓練データとテストデータに分ける (訓練:テスト=2:1)
 from sklearn.model_selection import train_test_split
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=0)
 
 #それぞれ確認してみる
 print(X_train, X_test, y_train, y_test)

*** モデルの学習 [#lc2d562e]
- モデルの学習では訓練データのみを使う
 model.fit(X_train, y_train)

*** モデルの評価 [#rcee5596]
- モデルの評価ではテストデータのみを使う
 acc = model.score(X_test, y_test)
 print(f"分類精度: {acc}")
- model.score()は,分類モデルの場合,''精度(Accuracy)''を表す
-- 全テストデータのうち,いくつのデータを正確に当てられたか?

- Pandasにテスト結果を書き出してみよう
 #実際にあっているかどうかを評価
 y_eval = pd.DataFrame()                    #空のデータフレームを作成
 y_eval["正解"] = y_test["品種"]            #正解はテストデータにある品種
 y_eval["予測"] = model.predict(X_test)     #予測はモデルが予測した品種
 y_eval["結果"] = y_eval["正解"] == y_eval["予測"]  #予測と正解が合致したかどうか
 #表示
 y_eval

- 分類問題の場合,''混同行列(confution_matrix)'' で評価することがある(詳細は次回以降の回で)
 #混同行列を表示する
 from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
 cm = confusion_matrix(y_test, model.predict(X_test))
 disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=model.classes_)
 disp.plot()


CENTER:&attachref(3_confusion_matrix.png);~
CENTER:図8: 混同行列


- 決定木の場合,どの特徴量が分類に重要だったかを表す''重要度''を表示できる
 
 #決定木分類における重要度を表示する
 importance = pd.DataFrame(index=features)
 importance["重要度"] = model.feature_importances_
 
 #確認
 print(importance)
 
- 評価結果に満足がいかない場合は,設定を変えてモデルを再構築する
-- データの品質を上げる (サンプル数を増やす,欠損値を埋める,外れ値を除く)
-- 特徴量を絞ってみる(正解データに関連しないものは除去する)
-- 違う手法・アルゴリズムを選ぶ
-- パラメータを調整する(e.g., 決定木の深さ)

** モデルを保存する [#c480615a]
- 満足のいくモデルができたら,ファイルに書き出して保存しておこう
-- Pythonのpickleモジュールを使う
-- Google Driveに書き出す場合は,Colabにドライブをマウントして,保存先のフォルダの''パス名''を取得しておく

*** モデルのセーブ [#rc738d48]
 import pickle
 with open("フォルダのパス名/保存ファイル名", "wb") as f:
   pickle.dump(model, f)

*** モデルのロード [#d191a618]
 import pickle
 with open("フォルダのパス名/保存ファイル名", "rb") as f:
   model = pickle.load(f)
 #以降,アプリでmodelを利用する


** アヤメの分類問題・プログラム全体 [#od9ef16e]
+ 必要なライブラリのインポート
 ###################  ライブラリのインポート #########################
 #いつものPandasとNumPyをインポート
 import pandas as pd
 import numpy as np
 
 #日本語化MatplotLib
 import matplotlib.pyplot as plt
 !pip install japanize-matplotlib
 import japanize_matplotlib
 
 # Seabornをインポート
 import seaborn as sns
 
 # Pickleをインポート
 import pickle
 
+ データの取得
 ########################### データの取得 ############################
 #アヤメデータの取得
 iris_data = pd.read_csv("https://www2.cmds.kobe-u.ac.jp/~masa-n/dshandson/iris-sample.csv")
 
+ データの理解・可視化
 ここでは省略.様々な角度から,データを眺めてみる(探索的データ分析:次回)
+ 前処理
 ############################## 前処理 ################################
 
 #特徴量に指定する列名リスト
 features = ["がくの長さ", "がくの幅", "花びらの長さ", "花びらの幅"]
 
 # 正解データに指定する列名
 target = ["品種"]
 
 #特徴量
 X = iris_data[features] 
 
 #正解データ
 y = iris_data[target]
 
 #X, yのそれぞれを訓練データとテストデータに分ける (訓練:テスト=2:1)
 from sklearn.model_selection import train_test_split
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=0)
 
+ モデルの選択と学習
 ###################### モデルの選択と学習 #############################
 
 #モデルの選択
 from sklearn import tree
 model = tree.DecisionTreeClassifier(max_depth=3, random_state=0)
 
 #モデルの学習(訓練データを使う)
 model.fit(X_train, y_train)
 
 #モデルの表示(オプショナル)
 tree.plot_tree(model, feature_names=X.columns)
 plt.show()
+ モデルの評価
 ########################### モデルの評価 ###############################
 
 #分類精度
 acc = model.score(X_test, y_test)
 print(f"分類精度: {acc}")
 
 #実際にあっているかどうかを確認してみる (オプショナル)
 y_eval = pd.DataFrame()
 y_eval["正解"] = y_test["品種"]
 y_eval["予測"] = model.predict(X_test)
 y_eval["結果"] = (y_eval["正解"] == y_eval["予測"])
 print(y_eval)
 
 #混同行列を表示する (オプショナル)
 from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
 cm = confusion_matrix(y_test, model.predict(X_test))
 disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=model.classes_)
 disp.plot()
+ モデルの保存
 with open("/content/drive/MyDrive/フォルダ名/ファイル名.pkl", "wb") as f:
    pickle.dump(model, f)



//* 4. 機械学習の枠組み [#f7be4b61]
* 3. 機械学習の枠組み [#f7be4b61]


** 教師あり機械学習の実装の流れ [#tbabfd7f]
- 今回行った機械学習体験を振り返りながら,教師あり機械学習の実装プロセスを見ておこう
-- 図には今回行わなかった作業も含まれている

CENTER:&attachref(./3_process.png,70%);~
CENTER:図12: 教師あり機械学習モデルの開発プロセス

** CRISP-DM: データ分析の標準的な手順 [#b8defa9e]
- [[CRISP-DM(CRoss-Industry Standard Process for Data Mining):https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining]]
-- データマイニング専門家によく利用される汎用的なアプローチを記述したモデル.6つのフェーズからなる
-- 図12のものと流れはほぼ同じ

CENTER:&attachref(./3_CRISP-DM_Process_Diagram.png,50%);~
CENTER:図13: CRISP-DMの構成図 ([[Wikipedia:https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining]]より)

+ ''ビジネス理解 (Business Understanding)''
-- 対象とするビジネスがどのようなのものなのか,課題は何かを理解する
-- データ分析の具体的な目標を決める.何をどこまで解決したいのか?
-- ''問いを立てる''
+ ''データ理解 (Data Understanding)''
-- 分析するデータ(一次データ,生データ)がどのようなものなのかを理解する
-- 目標達成のために必要なデータ項目があるかを吟味する
-- 難しければフェーズ1に立ち返ってよい
+ ''データ準備 (Data Preparation)''
-- 一次データに前処理を行い,実施するデータ分析に必要な''データセット''を構築する
-- 質の良いデータセットを得られるかが,データ分析の結果を大きく作用する
+ ''モデル作成 (Modeling)''
-- データセットに対して分析手法を適用し,モデルを作成する
+ ''評価 (Evaluation)''
-- 分析で得られた結果が,課題解決のために十分であるかをビジネスの観点から評価する
+ ''配備・運用 (Deployment)''
-- データ分析の結果を実際のビジネスに適用するための施策を考えていく
-- フェーズ1で設定した目標を達成するための具体的なアクションを起こしていく

** 他の教師あり機械学習アルゴリズム [#jfa59e5e]
- Scikit-Learnには,他にも様々なアルゴリズムが用意されている.詳細はここでは割愛するが,興味のある人は原理を調べてみてほしい
-- [[Scikit-Learn API リファレンス:https://scikit-learn.org/stable/modules/classes.html]]
- 同じアルゴリズムでも考え方を少し変えることで,分類と回帰両方に対応しているものもある
-- 決定木(DecisionTreeClassifier) と 回帰木(DecisionTreeRegressor)
 

*** 分類 [#l1bea562]
- ロジスティック回帰 (logistic regression)
- サポートベクタマシン (support vector machine)
- ランダムフォレスト (random forest)
- 勾配ブースティング (gradient boosting)

*** 回帰 [#p3f3af28]
- リッジ (ridge)
- ラッソ (lasso)
- 最近傍法 (nearest neighbors)
- 勾配ブースティング (gradient boosting)

** 機械学習が抱えるチャレンジ [#z318e3b0]

- 大量の教師データ(例題と正解がペアになっているデータ)を用意できるか?
-- 単純な問題でも数千個,イメージ認識や音声認識だと数百万個のサンプルが必要
- 現実を表したデータを用意できるか?
-- データが現在の運用実態にあっていないとうまくいかない.例えば10年前の売上データを学習しても現在の売上をうまく予測できない
- 品質の良いデータを用意できるか?
-- 欠損値や外れ値,ノイズがたくさん含まれている場合,背後にある統計,パターンを見つけることが難しくなる
- 関係のある特徴量をそろえられるか?
-- 目的変数に関係のある特徴量が十分に含まれ,無関係な特徴量が多すぎないことが大事
-- 特徴量選択,特徴量抽出を駆使して,目的に寄与する特徴量をそろえる
- 訓練データへの過学習を防げるか?
-- 訓練データに合わせようとすればするほど,未知のデータに対応できなくなる

* 神戸大学のDXリカレント事業の紹介へ進む [#v15b43b1]

[[DXリカレント教育事業]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS