何も知らない大学生のAIエンジニアになるための勉強
自己紹介
情報系の学部の大学3年生のtakumi0616と申します!
フロントエンド、機械学習、生成AIに興味があり、大学で絶賛勉強中です!
ポートフォリオ↓
はじめに
私は現在、長岡技術科学大学の「機械学習理論研究室」に所属しています。まだ入ったばかりで,わからないことだらけ(pythonを少し触った程度)ですが、今後難しい内容を取り扱うことが予想されます。また、将来はAIや機械学習に関わる仕事(まだあんまり理解してない)に就きたいと考えています。そのための勉強を、本記事のシリーズで公開しながら勉強するという内容です。
pythonやcolabの使い方については知っているのでスキップします。
以下に7つのロードマップを記載します。
- ChainerTutorial(https://tutorials.chainer.org/ja/01_Welcome_to_Chainer_Tutorial.html)
- 機械学習入門(https://qiita.com/take_0118/items/29f8dd6e60822300338c)
- pythonではじめる機械学習
- 人工知能プログラミングのための数学がわかる本
- Kaggleで勝つデータ分析の技術
- Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド
- kaggle
また、本記事は初学者が書いたものであり、正確な情報とは限りません。
大まかな概要
本記事は、ロードマップの1、2と3の1章をまとめた内容になります。
大体は頻出のキーワードを調べた内容になります。
機械学習とは?
与えられたデータから、未知のデータに対しても有効な規則やパターンを抽出、それをもとに予測や意思決定を行う手法。
人工知能とは?
機械で人間の知能や認知能力を模倣する技術。
範囲として、機械学習も含む。
統計学とは?
データの背後にある確率分布やパラメータに関する推測を行う、データの背後にある確率的なプロセスを理解する。
機械学習に使われる数学
大きく分けて「微分」「線形代数」「確率・統計」が必要です。
微分
機械学習では、モデルのパラメータを調整して予測精度を高めることが重要です。
微分は、これらのパラメータを最適化するために必要な技術で、特に損失関数の最小化に使われます。
損失関数はモデルの誤差を数値化したもので、微分を通じてこの値を最小にするパラメータを求めます。
例: 勾配降下法(Gradient Descent)は、損失関数の勾配(微分)を計算し、その勾配に沿ってパラメータを更新していく手法です。
線形代数
データは通常、ベクトルや行列の形で表されます。
線形代数はこれらのデータ構造を操作するための数学の分野です。
機械学習モデル、特に深層学習では、大量のデータを効率的に処理するために線形代数が用いられます。
例: 行列乗算は、ニューラルネットワークでの重み付き入力の計算に使われます。
確率・統計
機械学習では、データからの学習過程に不確実性が伴います。
確率・統計は、この不確実性をモデル化し、データからパターンを推定するために使用されます。
例: ベイズ統計は、事前の知識と観測データから、モデルのパラメータに関する確率的推論を行うのに役立ちます。
例: 分類問題でのロジスティック回帰は、特定の入力が特定のクラスに属する確率を計算します。この計算には、確率の概念が使われます。
ライブラリ
機械学習、深層学習や自然言語処理などでよく聞くライブラリをまとめました。
個人的な意向が強いです。
scikit-learn
- Pythonのオープンソース機械学習ライブラリで、分類、回帰、クラスタリングなどの機械学習の一般的な用途に使用されます。簡潔なAPIと豊富なドキュメントが特徴で、初心者からプロフェッショナルまで広く利用されています。
NumPy
- 数値計算を効率的に行うためのライブラリで、多次元配列を扱うための機能や数学関数が豊富に提供されています。機械学習のデータ処理や科学技術計算の基盤として広く使用されています。
SciPy
- 科学技術計算を目的としたPythonのライブラリで、NumPyの配列を効率的に使用するための高度な数学関数、統計分布の関数、最適化アルゴリズムなどが含まれています。機械学習だけでなく、科学研究全般に利用されます。
matplotlib
- Pythonのグラフ描画ライブラリで、グラフ、ヒストグラム、パワースペクトラムなど、様々な形式のグラフを簡単に作成することができます。データ分析結果の視覚化に欠かせないツールです。
pandas
- データ分析と操作のためのライブラリで、データの読み込み、加工、分析を行うための高レベルなデータ構造と操作ツールを提供します。特に、表形式のデータや時系列データの扱いに優れています。
mglearn
- scikit-learn、matplotlib、pandasなどと連携して、機械学習の概念やモデルを学ぶための実践的な例を提供するライブラリです。主に教育目的で使用され、機械学習の入門書『Introduction to Machine Learning with Python』で紹介されています。
TensorFlow
- Googleによって開発されたオープンソースの機械学習ライブラリで、データフローグラフを使用して計算を行います。深層学習モデルの設計、訓練、デプロイに幅広く利用されており、柔軟性とスケーラビリティを兼ね備えています。エンドツーエンドの機械学習プラットフォームとしても機能し、研究から本番環境まで対応可能です。
PyTorch
- Facebookによって開発されたオープンソースの機械学習ライブラリで、TensorFlowと同様に深層学習に広く使用されています。動的な計算グラフをサポートしており、モデルの設計と実験がより直感的に行えることが特徴です。研究コミュニティで特に人気があり、迅速なプロトタイピングと実験の柔軟性を求めるユーザーに適しています。
Transformers
- Hugging Faceによって開発された、自然言語処理(NLP)のためのライブラリで、トランスフォーマーというアーキテクチャに基づいたモデルの実装が多数提供されています。BERTやGPTなどの事前訓練済みモデルを簡単に利用でき、自然言語理解(NLU)や自然言語生成(NLG)タスクに適用可能です。APIが直感的であり、NLPの最新の進歩を迅速に活用できる点が魅力です。
機械学習の種類
1. 教師あり学習(Supervised Learning)
- トレーニングデータを使用して、入力データとそれに対応した出力データ(ラベル)の関係をモデル化するプロセスです。
- この手法では、アルゴリズムはラベル付きトレーニングデータセットからパターンを学習し、新しい未知のデータに対して正確な予測や分類を行うことができます。
2. 教師なし学習(Unsupervised Learning)
- ラベルなしのデータを使用して、データ内の隠れた構造やパターンを見つけ出す手法です。
- 教師なし学習の目的は、類似性や差異など、データ内の関係性を探求し、データをクラスタリングすることや異常値の検出などに使用されます。
3. 強化学習(Reinforcement Learning)
- エージェントが環境と相互作用しながら、報酬を最大化するための行動方針(ポリシー)を学習する手法です。
- エージェントは試行錯誤を通じて、どの行動が長期的に最大の報酬をもたらすかを学習します。
4. 半教師あり学習(Semi-Supervised Learning)
- 少量のラベル付きデータと大量のラベルなしデータを同時に使用して学習する手法です。
- ラベル付きデータでモデルを部分的に訓練し、その知識を使ってラベルなしデータの構造を学習し、モデルの改善を図ります。
5. 転移学習(Transfer Learning)
- ある領域で学習したモデルの知識を、別の関連する領域に適用する手法です。
- 例えば、ある画像認識タスクで訓練されたモデルを、わずかな調整を施して新しい類似のタスクに再利用します。
- これにより、新たなタスクにおいても少ないデータと計算リソースで高い性能を実現することができます。
6. 自然言語処理(Natural Language Processing, NLP)
- 人間の言語を理解し、生成することを目的とした機械学習の応用分野です。
- NLPはテキストデータから意味を抽出したり、テキスト生成、機械翻訳、感情分析などのタスクを行います。
- 自然言語の複雑さと多様性を処理するために、深層学習などの先進的な機械学習技術が用いられます。
機械学習で解決可能な問題とは
以下にそれぞれの例を挙げる。
1. 教師あり学習(Supervised Learning)
- 予測問題: 天気予報で未来の気温や降水確率を予測する。
- 分類問題: 電子メールがスパムかそうでないかを識別する。
- 回帰問題: 不動産の特徴(面積、部屋数、立地など)から価格を予測する。
2. 教師なし学習(Unsupervised Learning)
- クラスタリング: 顧客データを分析して、類似の購買行動を示す顧客グループを特定する。
- 異常検出: クレジットカードの取引記録から不正使用の可能性がある異常なパターンを検出する。
- 次元削減: 高次元のデータセット(例: 画像データ)から重要な特徴を抽出し、データの可視化や分析を容易にする。
3. 強化学習(Reinforcement Learning)
- ゲームプレイの最適化: コンピュータゲームやボードゲームで、最高の成績を収めるための戦略を学習する。
- 自動運転: 車両が交通ルールを遵守し、障害物を避けながら目的地に効率的に到達する方法を学習する。
4. 半教師あり学習(Semi-Supervised Learning)
- テキスト分類: 大量のラベルなしテキストデータを用いて、少数のラベル付きデータで訓練された分類器を改善する。
- 画像認識: 限られた数のラベル付き画像と大量のラベルなし画像を使用して、画像認識モデルの精度を向上させる。
5. 転移学習(Transfer Learning)
- 画像分類のドメイン適応: 一つのドメイン(例: 屋内画像)で学習したモデルを、異なるが関連するドメイン(例: 屋外画像)に適用する。
- 自然言語処理タスク: 一つの言語タスク(例: 英語の感情分析)で訓練されたモデルを、別の関連するタスク(例: ドイツ語の感情分析)に適用する。
6. 自然言語処理(Natural Language Processing, NLP)
- 機械翻訳: 一つの言語から別の言語へのテキストの自動翻訳。
- 感情分析: ソーシャルメディア投稿やレビューからユーザーの意見や感情を識別する。
- 質問応答システム: 自然言語で表現された質問に対して、正確な答えを提供する。
機械学習で用いられる有名なアルゴリズム
1. 教師あり学習(Supervised Learning)
線形回帰(Linear Regression)
- 線形回帰は、一連の独立変数と従属変数の間の線形関係をモデリングするために使用されます。主に連続的な値の予測、例えば家の価格や気温の予測に使われます。
ロジスティック回帰(Logistic Regression)
- ロジスティック回帰は、ある事象が発生する確率を0から1の間で予測するために使用されるアルゴリズムです。二値分類問題、例えばメールがスパムかどうかの判断、によく用いられます。
決定木(Decision Trees)
- 決定木は、データを分岐させていくことで、最終的に決定や分類を行うモデルです。直感的に理解しやすく、分類問題だけでなく回帰問題にも使われます。
ランダムフォレスト(Random Forest)
- ランダムフォレストは、多数の決定木を組み合わせてより正確な予測を行うアンサンブル学習アルゴリズムです。過学習を避けつつ、高い汎用性と精度を実現します。
サポートベクターマシン(SVM)
- SVMは、データセットを最適に分割する境界線(または超平面)を見つけることにより、二値または多クラス分類を行うアルゴリズムです。非線形データにもカーネルトリックを使って適用できます。
k-最近傍法(k-NN)
- k-NNは、データポイントの「近さ」に基づいて分類や回帰を行うシンプルなアルゴリズムです。与えられたデータポイントの最も近いk個の隣人のラベルや値に基づいて予測を行います。
勾配ブースティング(XGBoost、LightGBM、CatBoost)
- 勾配ブースティングは、複数の弱学習器(通常は決定木)を順番に学習させ、それらの予測を組み合わせて全体のモデルの性能を向上させる手法です。XGBoost、LightGBM、CatBoostはその効率的な実装です。
ニューラルネットワーク
- ニューラルネットワークは、脳の神経細胞のネットワークを模倣したアルゴリズムで、深層学習の基礎となっています。画像認識、音声認識、自然言語処理など、複雑な問題解決に強力です。
ナイーブベイズ(Naive Bayes)
- ナイーブベイズは、ベイズの定理に基づいて、特定の特徴が与えられたときに各クラスに属する確率を計算するアルゴリズムです。テキスト分類やスパム検出に効果的です。
2. 教師なし学習(Unsupervised Learning)
k-平均法(k-Means)
- データをk個のクラスタに分類するアルゴリズムです。各クラスタの中心を計算し、データポイントを最も近い中心に割り当てることでクラスタリングを行います。マーケットセグメンテーション、画像圧縮で使われる。
階層的クラスタリング
- データポイント間の距離に基づいて徐々にクラスタを形成していく方法です。結果はデンドログラムとして表示され、クラスタの階層構造を視覚的に確認できます。ジーン配列の分類、顧客セグメンテーションで使われる。
DBSCAN
- 密度ベースのスペーシャルクラスタリングのアプリケーションであり、高密度のエリアをクラスタとして識別します。このアルゴリズムは、クラスタの形状が不規則なデータセットやノイズが含まれるデータセットに適しています。異常検出、地理空間データ分析で使われる。
主成分分析(PCA)
- データの次元削減を行う技術です。データの分散が最大となる方向を見つけ出し、その方向にデータを射影することで、重要な情報を保持しつつ次元を減らします。可視化、ノイズの除去、特徴抽出で使われる。
t-SNE
- 高次元データの可視化に特化した次元削減技術です。類似したデータポイントを高確率で近くに、異なるデータポイントを遠くに配置するように設計されています。高次元データのクラスタリング結果の可視化、特に生物学的データのパターン発見で使われる。
オートエンコーダ
- 入力データを圧縮した後、その圧縮された表現から元のデータを再構築するニューラルネットワークです。この過程でデータの有効な低次元表現が学習されます。特徴抽出、データ圧縮、ノイズ除去、生成モデルの一部としてで使われる。
3. 強化学習(Reinforcement Learning)
Q学習(Q-Learning)
- エージェントが取るべき最適な行動を学習するためのオフポリシー(行動方策とは異なる方策に従ってデータを収集する方法)アルゴリズムです。状態と行動のペアに対して報酬を割り当てるQ値を更新していきます。シンプルなゲームや迷路のナビゲーション、基本的な意思決定プロセスの最適化に適しています。
SARSA(State-Action-Reward-State-Action)
- 現在の状態、行動、報酬、次の状態、次の行動からなる5つのパラメータを用いて、方策に基づいた行動の学習を行うオンポリシー(行動方策に従ってデータを収集する方法)アルゴリズムです。より複雑な意思決定問題や、エージェントの安全性が重要なタスクに適しています。
Deep Q Network(DQN)
- Q学習に深層ニューラルネットワークを組み合わせたもので、高次元の状態空間を持つ問題に対しても効果的に学習を行うことができます。経験リプレイと固定Qターゲットの技術を使用して安定性を向上させます。Atariのビデオゲームのプレイや、複雑な視覚的タスクにおける意思決定など、高度な問題解決が求められる環境に適しています。
Policy Gradients
- 方策自体を直接最適化するアプローチで、報酬の期待値を最大化する方策を求めます。方策をパラメータ化し、勾配上昇法を用いてこれを最適化します。連続的な行動空間を持つ問題や、行動の確率を直接モデル化する必要があるタスク(例:ロボットの制御)に適しています。
Actor-Critic アルゴリズム
- 方策(Actor)と価値関数(Critic)の両方を同時に学習するアプローチです。Actorが行動の方策を決定し、Criticがその行動の価値を評価して、Actorの学習をガイドします。大規模な状態空間や行動空間を持つ問題、または方策と価値関数の両方を効率的に学習したい場合に適しています。例えば、自動運転車の運転戦略の最適化などに利用されます。
4. 半教師あり学習(Semi-Supervised Learning)
自己学習(Self-Training)
- 最初に少量のラベル付きデータでモデルを訓練し、その後、ラベルなしデータに対して予測を行います。自信が高い予測にラベルを付け、それを再び訓練データに追加して、モデルの再訓練を行います。ラベル付けが難しいまたは高価なタスクで有用です。例えば、テキスト分類や画像認識でのラベル付けコスト削減に利用できます。
生成的敵対ネットワーク(GAN, Generative Adversarial Networks)
- 生成ネットワークと識別ネットワークの2つのニューラルネットワークが互いに競争しながら学習を進めるモデルです。生成ネットワークは、実データに似た新しいデータを生成しようとし、識別ネットワークは本物のデータと生成データを区別しようとします。画像生成、データ拡張、スタイル変換などの分野で広く使われています。
S4VM(Semi-Supervised Support Vector Machine)
- サポートベクターマシン(SVM)を半教師あり学習に適用したもので、ラベル付きデータとラベルなしデータの両方を用いてマージン最大化の問題を解くことにより、分類器を学習します。テキスト分類やバイオインフォマティクスなど、少ないラベル付きデータから効果的に学習を進めたい場合に有用です。
Label Propagation
- ラベル付きデータからラベルなしデータへとラベル情報を伝播させることで、データセット全体を分類するアルゴリズムです。グラフベースの手法で、データポイント間の類似度を用いてラベルを伝播させます。ソーシャルネットワークのクラスタリング、画像分類、任意の形状のクラスタを識別したい場合など、構造化されたデータセットに適しています。
5. 転移学習(Transfer Learning)
ファインチューニング(Fine-tuning)
- 事前に大規模データセットで訓練されたモデル(事前学習モデル)の一部または全部の層を、新しいタスクのデータセットで再訓練します。このプロセスでは、事前学習モデルが持つ知識を新しいタスクに適応させることができます。画像認識、自然言語処理など、事前学習モデルが豊富に存在するタスクで有効。特に、新しいタスクのデータセットが比較的小さい場合に効果的です。
特徴抽出(Feature Extraction)
- 事前学習モデルを固定して、そのモデルの出力を新しいタスクの入力特徴として使用します。事前学習モデルは特徴抽出器として機能し、新しいタスク専用の分類器や回帰器がその特徴に基づいて学習を行います。データが少ないまたは計算資源が限られている場合。新しいタスクでの迅速なモデル開発やプロトタイピングに適しています。
ドメイン適応(Domain Adaptation)
- ソースドメイン(事前学習に使用されたデータセット)とターゲットドメイン(新しいタスクのデータセット)の間で異なるデータ分布を持つ場合に、事前学習モデルを新しいタスクに適応させるプロセスです。ドメイン適応は、異なる特性を持つデータセット間でモデルを転用する際に重要です。医療画像解析、言語間翻訳など、ソースドメインとターゲットドメインの間に大きな違いがある場合に効果的です。
BERT(自然言語処理における)
- 大量のテキストデータ上で事前訓練された自然言語処理モデルで、テキストの双方向コンテキストを理解することができます。ファインチューニングにより、様々なNLPタスクに適応させることができます。文書分類、感情分析、質問応答システム、名前付きエンティティ認識など、幅広い自然言語処理タスクに適用可能です。
6. 自然言語処理(Natural Language Processing, NLP)
Recurrent Neural Networks(RNN)
- シーケンスデータを扱うために設計されたニューラルネットワークで、過去の情報を保持する能力があります。この特性により、テキストや音声などの時系列データの処理に適しています。自然言語の文章生成、音声認識、言語モデルの構築などに適用されます。
Long Short-Term Memory Networks(LSTM)
- RNNの一種で、長期的な依存関係を学習する能力に優れています。これは、内部にゲート機構を持ち、情報の流れを制御することで実現されます。文章の意味理解、機械翻訳、音声認識など、長期間にわたる依存関係を捉える必要があるタスクに使用されます。
Convolutional Neural Networks(CNN)
- 主に画像処理に用いられますが、文章分類や文書分類などのNLPタスクにも応用されます。畳み込み層が局所的なパターンを効率的に捉える能力を持ちます。感情分析、トピック分類、スパムメールの検出などのテキスト分類タスクに利用されます。
Transformer(BERT、GPTなど)
- 自己注意機構(Self-Attention)を用いて、入力シーケンスの各要素が他のすべての要素とどのように関連しているかを学習します。このモデルは、BERTやGPTなど、多くの最先端のNLPモデルの基礎となっています。自然言語の理解(NLU)、質問応答(QA)、文章の要約、テキスト生成など、幅広いNLPタスクに適用されます。
Word2Vec、GloVe(単語の埋め込み表現)
- 単語を密なベクトル空間に埋め込む手法で、単語間の意味的な関係性を捉えます。これにより、単語の類似度計算や関連語の抽出が可能になります。文書分類、感情分析、機械翻訳、単語の類似度計算などに利用され、NLPタスクの前処理として広く使われています。
モデル構築の流れ(それに付随する単語の説明)
実際にどうやってエンジニアがモデルを構築し目的を達成するのかを以下に流れに沿って説明していきます。
1. データセットの取得
- まず、データを読み込みます。
2. データの基礎集計・可視化
- データを理解するために、各特徴量の統計量(平均、中央値、標準偏差など)を計算し、データの分布を把握します。また、特徴量同士の関係性を視覚的に理解するために散布図や箱ひげ図を使って可視化します。この段階で、データ間の相関関係や異常値の有無を確認します。
- このステップでは、データの概要を掴むことが重要であり、特徴量間の相関やクラス分離の容易さを評価します。そのデータの傾向に偏りがないか、欠損値(データの中身がnullとなっている変数)がないか、データに外れ値が存在しないかなどをdescribe()やinfo()などの関数を使用して基礎集計を行い、さらにmatplotlibやplotlyなどの可視化ライブラリを使用してデータを可視化することでデータセット全体の傾向を把握します。
- このデータの基礎集計や可視化は、EDA(探索的データ解析)とも言われ、機械学習の初期段階で重要となります。
3. データの前処理(データクリーニング)
- 前のステップで確認した傾向や集計データを元に欠損値(null値が含まれる変数)の補完やデータの揺らぎ(特に文字列データで大文字小文字がバラバラの表記や、文字列の入力ミスの修正を指します)などを補完・修正します。これは、学習を行うアルゴリズムがnullとなったデータを扱えないことやデータの揺らぎにより同一データを異なるデータと見てしまう(例:ONEとoneと1は異なるデータとみなされる)ことから、修正・クリーニングが必要となります。
- ライブラリなどから持ってくるデータセットは比較的きれいなデータですが、実際のデータ分析では、データの品質を保証するためにこのステップが不可欠です。必要に応じて、正規化や標準化を行うことで、特徴量間のスケールの違いを解消します。
欠損値補完: 欠損値の扱い方は、その原因やデータの特性によって異なります。一般的な方法は、中央値や平均値、最頻値で補完すること、または機械学習モデルを用いて予測することです。重要なのは、欠損値を無視せず、適切に処理することです。
データの揺らぎの修正: 特にカテゴリカルデータで見られる表記の揺らぎ(例: "Tokyo"、"tokyo"、"とうきょう")を統一します。この作業はデータの品質を向上させ、分析の信頼性を高めます。
4. 特徴量エンジニアリング
- モデルの性能を向上させるために、既存の特徴量から新しい特徴量を作成したり、不要な特徴量を削除します。新たな特徴量がモデルの予測精度を高める可能性があります。
5. 検定スキームの構築
- 適切な検定スキーム(訓練データとテストデータの分割方法)を選択します。クロスバリデーションやホールドアウト法などの検定スキームを構築します。
以下に種類を紹介します。
- クロスバリデーション (Cross-Validation)
- k分割交差検証 (k-fold cross-validation): データセットをk個のサブセットに分割し、k-1個のサブセットを訓練データとして、残りの1個をテストデータとして使用します。このプロセスをk回繰り返し、各テストセットに対する性能評価の平均を取ります。
- 層化k分割交差検証 (Stratified k-fold cross-validation): 分類問題において、各クラスのサンプル比率が一定となるようにデータセットを分割します。これにより、偏りのあるデータセットでの性能評価の信頼性を高めます。
- グループk分割交差検証 (Group k-fold cross-validation): データ内のグループ構造を考慮して分割します。同一グループのデータ点が訓練セットとテストセットに混在しないようにします。これは、患者データなどグループ間での独立性が重要な場合に有効です。
- ホールドアウト法 (Holdout Method)
データセットを訓練データセットとテストデータセットに一度だけ分割します。この方法はシンプルですが、データセットの分割方法によっては、性能評価のバリアンスが高くなる可能性があります。
- 時系列交差検証 (Time Series Cross-Validation)
時系列データに対して使用されます。時間に沿ってデータを分割し、過去のデータを用いて未来のデータを予測するようにモデルを訓練します。データの時間的順序を保持するため、ランダムにデータを分割することはありません。
- リーブワンアウト交差検証 (Leave-One-Out Cross-Validation, LOOCV)
k分割交差検証の特別なケースで、kをデータセットのサンプル数と同じにします。つまり、1つのデータ点をテストデータとし、残りをすべて訓練データとして使用します。この方法は、データセットが非常に小さい場合に有効ですが、計算コストが非常に高くなります。
6. モデリング
- 機械学習の肝でもあるアルゴリズムに準備したデータセットを投入して、目的変数と説明変数の間にある関係性を数式化するための処理を行います。この部分が機械学習モデルの作成の工程です。上記で示したアルゴリズム群の中から適切なものを選択してモデルを構築していきます。
7. モデル・特徴量選択
- 複数のモデルを訓練し、それぞれの性能を比較します。最も性能が高かったモデルを選択し、不要または影響が少ない特徴量を削除します。このステップではモデル精度の向上を行います。
- 1回目のモデル構築ではすべての説明変数を使用しており、特徴量の影響度や相関係数などをみて何度もモデル構築をしなおします。
8. チューニング
- 今までの流れを繰り返し、最適なモデルの構築が完了したのち、さらなる精度向上を図るため、選択したモデルのハイパーパラメータを調整していきます。それぞれのアルゴリズムのパラメータには様々なものが存在します。
- ハイパーパラメーターチューニングには、手動でパラメータ数値を繰り返し設定しなおす方法の他に、グリッドサーチやランダムサーチなどの手法を用いることが一般的です。
9. アンサンブル
- 複数のモデルを組み合わせることで、モデルバリアンスを小さくして予測精度を向上させるアンサンブル学習を検討します。バギング、ブースティング、スタッキングなど、さまざまなアンサンブル手法があります。
- アンサンブルは、単一のモデルよりも優れた予測性能を達成することが多く、特に異なるタイプのモデルを組み合わせることで、モデルの偏りを減らし、汎化能力を高めることができる可能性があります。
アンサンブル学習: 複数のモデルを組み合わせることで、予測精度を向上させる手法です。バギングは複数の同じタイプのモデルを平行して訓練し、それらの予測を平均化する方法です。ブースティングは、前のモデルの予測を改善するように順番にモデルを訓練する手法で、弱い予測器から強い予測器を作り上げます。
10. モデルの評価
- 構築したモデルの性能を評価するために、様々な評価指標を用います。回帰問題では、平均絶対誤差(MAE)や平均二乗誤差(MSE)、決定係数(R2)などが一般的です。分類問題では、精度(accuracy)、適合率(precision)、再現率(recall)、F値(F1-score)、ROC曲線やAUC(Area Under Curve)などを用いることが多いです。
- モデルの評価は、そのモデルが未知のデータに対してどれだけ正確に予測できるかを理解するために重要です。クロスバリデーションで得られた結果を基に、モデルの汎化能力を把握します。
その後
ここからさらに本業の方であれば、「モデルのデプロイメント」、「モデルのモニタリングとメンテナンス」に続いていきます。
まとめ
この技術記事シリーズでは、機械学習の基礎を幅広くカバーしました。私自身、学びながら書いてきたため、勉強になっています。機械学習の旅はここからが本当のスタート地点であり、実際に流れ通りにやることを次の目標にしたいです。
また、読者の皆様がこの記事を通じて機械学習の理解が深まり、自身のプロジェクトや研究に活かすことができれば幸いです。不明点や改善点があれば、ご指摘いただければと思います。
参考サイト、資料
- https://qiita.com/take_0118/items/29f8dd6e60822300338c
- https://tutorials.chainer.org/ja/01_Welcome_to_Chainer_Tutorial.html
- Pythonではじめる機械学習(https://www.oreilly.co.jp/books/9784873117980/)
今後の展望
次回は機械学習のHello World!である、アイリスの問題を、学習した流れ通りに進めてみたいと思います。
この記事が皆様の知識向上、さらには機械学習への興味・関心を深めるきっかけになれば幸いです。最後までお読みいただきありがとうございました。
Discussion