見て試してわかる機械学習アルゴリズムの仕組み機械学習図鑑のメモ
第1章: 機械学習の基礎
- 機械学習: 与えられた問題や課題または環境に応じてコンピュータ自身が学習し、学習結果を活かした問題解決や課題解決などを行う仕組み全体のこと
-
機械学習を入力データに着目して分類する
- 教師あり学習: 問題の答えをコンピュータに与えることで機械学習のモデルを学習させていく手法
-
与えられるデータ
- 特徴量や説明変数: 特徴を表すデータ
- 目的変数やラベル: 答えであるデータ
- 身近な利用例: 迷惑メールフィルター
-
適用範囲
- 分類問題: カテゴリを予測する問題
- 二値分類: 2つのカテゴリに分類する
- 多値分類: 複数のカテゴリに分類する
- 回帰問題: 大小関係に意味のある数値を予測する問題
- 教師なし学習: 特徴を表すデータを与えて、入力データの構造を理解することが主な目的
- 結果の解釈が困難、分析者の経験に基づく主観的な解釈が要求される
-
与えられるデータ
- 特徴量や説明変数: 特徴を表すデータ
-
適用範囲
- 次元削減: より少ない特徴量でデータを理解するための手法
- クラスタリング: 対象のデータをいくつかのクラスタに分類する手法
- 強化学習: ある環境の中で行動するエージェントが得られる報酬を最大化するように行動をして学習していく手法
第2章: 教師あり学習
-
線形回帰: 回帰問題の予測を行うアルゴリズムです。基本的でわかりやすいアルゴリズムですが、損失を最小化するパラメータを学習データから計算することは、教師あり学習に共通した枠組みとなっています。
- 「ある説明変数が大きくなるにつれて、目的変数も大きく(小さく)なっていく」という関係性をモデル化する手法
- 平均二乗誤差: 目的変数と直線の差を二乗し、その平均を計算したもの。
- 誤差関数(損失関数): 誤差と学習パラメータとの関係を表した関数。
- 線形回帰は、さまざまな直線のうち、誤差関数の値が最も小さくなるパラメータを求めている。
- アンスコムのデータセット(Anscom's quartet): 異なる散布図で、線形回帰の学習パラメータが同じになる。平均や分散、相関係数もほとんど同じになっている。
- 統計学者フランク・アンスコムが作成した
- 可視化の重要性を示す例として作られた。
- 平均二乗誤差の最小化方法
- 平均二乗誤差を学習パラメータの関数で表現する。
- 学習パラメータの関数内の目的変数と説明変数に実際のデータを代入する。
- 平均二乗誤差を学習パラメータだけで表現した式の最小点を探す
- 単回帰: 独立な説明変数が1つの場合の線形回帰
- 重回帰: 独立な説明変数が2つ以上の場合の線形回帰
- 多項式回帰: 独立な説明変数が1つで。その説明変数がべき乗で表される線形回帰
- 線形回帰: 学習パラメータと目的変数の関係が線形な回帰のこと。目的変数と説明変数の関係が線形ではない。
- 非線形回帰: 学習パラメータと目的変数の関係が線形になっていない回帰のこと
- pythonライブラリ
- from sklearn.lenear_model import LinearRegression
-
正則化: 正則化は過学習を防ぐための手法の1つで、線形回帰などのアルゴリズムと共に利用します。損失関数に罰則項を加えることでモデルに制約を与え、汎化性能を高めることが可能です。
- 機械学習モデルの学習時に利用される。
- 過学習: 学習データに対する誤差(学習誤差)と比べて、検証データに対する誤差(検証誤差)が非常に大きくなってしまう現象のこと。
- 機械学習モデルが複雑すぎることに原因の一つがある。
- 正則化によりモデルの複雑さを緩和する。
- 過学習が発生すると汎化性能の低いモデルとなる。
- 学習パラメータが極端に大きい(小さい)値をとってしまうことが挙げられる。
- Ridge回帰: 正則化の代表的な手法
-
罰則項(正則化項)と呼ばれる、学習パラメータの二乗和の功を持つ。切片は罰則項に含まないのが一般的
- 罰則項は、α(>=0)で、正則化の強さをコントロールする。大きいほど学習パラメータが抑えらえれ、小さいほど学習データへの当てはまりが強くなる。
- αは、検証誤差を見ながら調整するのが一般的
- 罰則項は、学習パラメータの絶対値が大きいと、損失関数全体が大きくなる。
- 損失関数の最小化の際に、学習パラメータの絶対値に合わせて、損失を大きくする役割を持つ。
- Lasso回帰: 学習パラメータの絶対値の和を罰則項として持つ正則化手法。
- 学習パラメータが0になりやすい性質がある。
- 学習パラメータが0となった特徴量を使わずにモデルを構築できるので、特徴量選択を行うことができる。
- 汎化性能を高めるだけでなく、モデルの解釈をしやすくなるという利点がある。
- 線形回帰の誤差関数と罰則項に関連した関数の接する点が、正則化付きの誤差関数の最適解と一致する。
- pythonライブラリ
- from sklearn.lenear_model import Ridge
-
ロジスティック回帰: ロジスティック回帰は、教師あり学習の分類タスクに用いられるシンプルなアルゴリズムです。アルゴリズムの名前に「回帰」と入っていますが、実際には分類問題に適用されます。ロジスティック回帰はデータが各クラスに所属する確率を計算することで分類を行います。
- ある事象が起こる確率を学習するアルゴリズムです。
- データとそれが属するクラスを表すラベルから学習を行い、確率を計算する。
- シグモイド関数を使うことで、0から1の間の数字を返します。
- 通常は予測確率0.5をしきい値としてクラス分けを行う。問題設定によっては閾値として0.5より大きな値や小さな値を採用します。
- 学習では誤差関数としてロジスティック損失を用いてこれを最小化します。
- ロジスティック損失は最小値を式変形で求めることができないので、勾配降下法を用いて数値計算により求める。
- 決定境界: 分類結果が切り替わる境目。確率を計算した結果がちょうど50%になる箇所
- ロジスティック回帰の決定境界は直線になる。
- 特徴量の解釈:
- 係数の符号を見ることで、それが確率に対して正の影響を与えるのか負の影響を与えているかわかります。
- pythonライブラリ
- from sklearn.lenear_model import LogisticRegression
-
サポートベクトルマシン(Suport Vector Machine, SVM, サポートベクターマシン): SVMは非常に応用範囲が広く、分類と回帰のどちらにも使えるアルゴリズムです。ここでは線形サポートベクトルマシンを二値分類問題に適用し、マージン最大化という基準で、より「良い」決定境界を得る方法について学びます。
- 線形サポートベクトルマシンはマージン最大化という基準を用いて、データからできるだけ離れた決定境界を学習するアルゴリズムです。
- 決定境界は線形になる。
- マージン: 線形サポートベクトルマシンでは平面を線形な決定境界で2つに区切ったとき、学習データのうち最も決定境界に近いものと決定境界との距離
-
ハードマージン: マージンの内側にデータが入り込むのを許容しないこと
- 過学習が発生する
-
ソフトマージン: 一部のデータがマージンの内側に入ることを許容すること
- 学習結果の外れ値に影響を受けにくい
- 学習結果
- マージンの外側のデータ: 決定境界からマージンよりも離れているデータ
- マージン上のデータ: 決定境界からマージンと同じだけ離れているデータ
- マージンの内側のデータ: 決定境界にマージンよりも近い、あるいは誤分類されてしまうデータ
- サポートベクトル: マージン上のデータとマージンの内側のデータ。決定境界を決める重要なデータ
- 学習データがマージンの内側に入らないことを強制してしまうと、学習結果がデータに対して過学習してしまう場合があります。
- 決定境界が曲線になっているデータを分類することが苦手です。
- pythonライブラリ
- from sklearn.svm import LinearSVC
-
サポートベクトルマシン(カーネル法): ディープラーニングが登場する少し前には、カーネル法を用いたサポートベクトルマシンは大変人気がありました。
- サポートベクトルマシンにカーネル法というテクニックを導入した手法
- 複雑なデータに対して人手で特徴量を作らなくとも扱える。
- 今でもさまざまな分類・回帰の問題に使われるアルゴリズムです。
- カーネル法: データを別の特徴空間に移してから線形回帰を行う。
- 学習データよりも高次元な空間がある。学習データはそれぞれの点はその高次元空間の点に対応していると考えます。
- 高次元空間の中では、学習データに対応する点は線形分離可能であり、実際の学習データはその高次元空間からの射影だと考えます。
- 高次元な決定境界を元の特徴量のなすベクトル空間に射影して決定境界を得ます。
- カーネル関数
- 線形カーネル
- シグモイドカーネル
- 多項カーネル
- RBFカーネル
- サポートベクトルマシンで利用している特徴量が何であるかを明示的に知ることはできなくなります。
- カーネル法は、特徴量の解釈よりも精度が要求されている場合に利用すると良い。
- 事前に線形カーネルを利用した分析を行い、データの様子を掴んでからカーネル関数を利用した学習を行う。
- pythonライブラリ
- from sklearn.svm import SVC
-
ナイーブベイズ(単純ベイズ): 自然言語の分類問題に利用されることが多いアルゴリズムです。
- スパムメールのフィルタリングに応用されたことで有名になりました。
- 確率に基づいて予測を行う。
- 文章の分類やスパムメール判定など、自然言語の分類で主に利用される。
- 文章中に含まれる単語を元に、未知のデータのカテゴリを推定します。
- 入力データは特徴量からなるベクトルに変換されている必要があります。
- 前処理で文章を特徴量からなるベクトルに変換する必要がある。
- BoW(Bag of Words): 自然言語で書かれた文章を単語の出現を表す特徴量とラベルの組で表現する。
- 与えられた学習データの文章について名詞のみを抜き出す。
- 学習データ: 全体の単語集合から学習データに単語が含まれているときに1とし、含まれていないときに0となるデータ。
- カテゴリデータ: カテゴリを数値に変換
- 確率の計算
- それぞれのラベルが出現する確率
- 各ラベルでのそれぞれの単語が出現する条件付き確率
- スムージング:
- 確率0を割り振るべきところに小さな確率0.01を割り振る。
- 確率が0の箇所は、学習データ中でその単語が出現しなかった箇所ですが、より大きなデータセットを学習データとして用いることで、その単語が本当は出現した可能性があります。
- ナイーブベイズの仮定: 単純な仮定をおくことで学習を単純にしています。
- 確率は特徴量となる単語ごとに求められるという仮定
- それぞれの単語が独立に扱って確率が計算できるという仮定
- 注意点
- 自然言語の分類において標準的な精度を発揮する。
- 確率の値そのものを予測したい場合には向かない。
- 単語間のつながりは無視されているため、文脈によって意味を変える場合には精度を発揮しない。
-
ランダムフォレスト: ランダムフォレストは複数のモデルを束ねてより高い性能のモデルを作成する手法。
- 回帰と分類のどちらにも用いることができます。
- 同様のアルゴリズムには勾配ブースティングなど、機械学習コンペティションでも人気の高い手法があります。
- 決定木というモデルを複数利用することで、予測精度の向上と汎化性能の向上が可能となる。
- 決定木の出力を集めて多数決で最終的な分類結果を得ます。
- 決定木の一つ一つが多様性を持つことが重要
- 決定木: 学習データを条件分岐によって分割していくことで分類問題を解く手法
-
不純度: 乱雑さを数値化したもの。
- 不純度は、分割されたグループに同一のラベルが多く存在するときに小さくなり、異なるラベルが多く存在すると大きくなります。
- ジニ係数: 不純度を表現する指標。
- データの不純度が小さくなるようにデータを分割していく
-
決定木の学習手順
- ある領域についてすべての特徴量と分割候補について不純度を計算する
- 分割したときに不純度が最も減る分割で領域を分割する
- 分割後の領域について、上記を繰り返す。
-
ランダムフォレストの学習の工夫: 機械学習では基本的に、同じデータから学習した結果は同様の結果になります。
- ブートストラップ法を用いてデータから、内容の異なる複数の学習データを生成します。
- 一部の特徴量だけをランダムに用いて学習させる。
- ブートストラップ法: 一つの学習データから何度もランダムに復元抽出を行うことで学習データを「水増し」する方法。
- 特徴量の重要度
- ランダムフォレストでは、特徴量ごとに予測結果に対しての重要度を知ることができる。
- 重要度の高い特徴量は、分割の軸に用いることで不純度を大きく減らすことが期待できる。
- 重要度の低い特徴量は、分類の軸に用いても不純度を減らすことができない。
- pythonライブラリ
- from sklearn.ensemble import RandomForestClassifier
-
ニューラルネットワーク: ニューラルネットワークは、歴史的には、生物の神経回路網を模倣することから始まったとされます。
- 回帰と分類のどちらにも適用できますが、応用上は分類によく使われます。
- ニューラルネットワークを応用したディープラーニングは、画像認識や音声認識のような分野で良いパフォーマンスを出すことが知られています。
- 入力データと出力結果の間に中間層と呼ばれる層を挟むことで、複雑な決定境界を学習できるモデルです。
- 入力層: 入力されたデータそのもの
- 中間層: 入力層からシグモイド関数などの非線形関数を用いて計算される。
- 次元はハイパーパラメーター。大きくすることで複雑な境界を学習できるが、過学習しやすくなる
- 出力層: 入力データを分類した結果の確率
- MNIST: 手書き文字データを分類するタスク
- 単純パーセプトロン: 特徴量に重みをかけた結果に、非線形な関数を適用して識別を行うモデル
- 特徴量の計数を重み、定数高をバイアスと呼ぶ
- ロジスティック回帰とよく似た性質を持つ。
- 活性化関数としてシグモイド関数を用いると、単純パーセプトロンとロジスティック回帰は等価になる。
- ニューラルネットワーク: 単純パーセプトロンを積み重ねることで、複雑な決定境界を表現できるようにしたモデル
- ノードは特徴量やその出力といった変数を、辺は次の変数の計算への入力となっていることを表す。
- ニューラルネットワークは中間層の数を増やす、中間層のノードの数を増やすといった方法で、複雑なデータを表現することができます。
- アーリーストッピング: 過学習になる前で学習を打ち切ること。
- 学習データの一部を学習中の評価データとさらに分けます。
- 学習の最中に評価データを用いて損失などの評価指標を逐次記録し、学習の進行度合いがわかるようにする。
- 学習中に評価データでの損失が悪化し、過学習の傾向が見え始めたら学習を打ち切り終了します。
- pythonライブラリ
- from sklearn.neural_network import MLPClassifier
-
kNN(k-Nearest Neighbor method、k近傍法): 学習アルゴリズムが学習データを文字通り覚えるだけという一風変わったアルゴリズムです。
- 歴史的には古くから知られている単純なものですが、複雑な境界を学習できるアルゴリズムです。
- 分類と回帰の両方に使える。
- 学習時に全ての学習データを記憶する。
- 未知のデータの分類時には、学習データとの距離を計算して、近傍のk個の点がどちらになっているかの多数決を行って分類します。
- アルゴリズム
- 入力データと学習データの距離を計算する
- 入力データに近い方からk個の学習データを取得する
- 学習データのラベルで多数決を行い、分類結果とする
- kの値によって学習できる決定境界の様子が変わります。
- 注意点
- データ数が小さい場合や次元が小さい場合にはうまく動くが、大きい場合には別の手法の検討が必要。
- 大量の学習データを扱おうとすると分類が遅くなってしまう。
-
kNNが機能するためには、漸近仮定「学習データを多くすれば、未知のデータの近くに学習データが見つかるようになる」という仮定を前提としている。
- 漸近仮定は高次元のデータでは必ずしも成立しない。
- pythonライブラリ
-
from sklearn.neighbors import KNeighborsClassifier
第3章: 教師なし学習
-
PCA: 主成分分析(Principal Component Analysis)は歴史が深く、さまざまな分野で利用されています。主成分分析を使うことで、相関のある多変量データを主成分で、簡潔に表現することができます。
- データの変数を削減するために使われる手法
- 変数間に相関があるデータに対して有効
- 次元削減: たくさんの変数を持つデータを、特徴を保ちながら少数の変数で表現する
- 主成分: 高次元空間で表現されるデータをより低次元の変数で表現したときの軸。元の変数の線形和の形で構成される。
- 主成分分析では、対象データにおける方向と重要度を見つけることができます。
- 方向: 線の向き
- 重要度: 線の長さ
- 主成分得点: 主成分分析によって得た線を軸となるように元のデータを変換したデータ
- アルゴリズム
- 分散共分散行列を計算する
- 分散共分散行列に対して、固有値問題を解き、固有ベクトル、固有値を求める
- 各主成分方向にデータを表現する
- 固有値問題: n次正方行列Aに対してAx=λxとなるようなλ、xを求める問題
- 分散共分散行列に対して固有値問題を解くことが、「分散を最大化するような直行する軸を求める」という問題と数学的に等しいものとなる。
- 寄与率: 各主成分がデータをどのくらい説明しているかを表す
- 主成分の選び方: 複数の主成分(第一主成分、第二主成分…)の累積寄与率を計算することで、何番目の主成分まで使うと、元のデータを何%の情報まで含むことができるかを知ることができる。
- 累積寄与率を基準に主成分を選ぶ場合、「寄与率が0.7以上→主成分4つ」・「寄与率が0.8以上→主成分5つ」
- pythonライブラリ
- from sklearn.decomposition import PCA
-
LSA(Latent Semantic Analysis): 自然言語処理の一技術として提案され、次元削減手法として、情報検索の分野で活躍した。
- 大量の文書データから、単語が持つ潜在的な関連性を見つけ出すことができます。
- 1988年、Scott Deerwesterらによって提案された手法
- 大量の文書から自動的に単語と単語の類似度を計算できる。
- 単語と文書の類似度を計算できる。
- X = (単語と要約された特徴量の変換情報を持つ行列)(情報の重要度を持つ行列)(要約された特徴量と文書の変換情報を持つ行列)
- LSAの注意点
- 変換後の行列の解釈が難しい場合がある。
- 計算コストが非常にかかる場合がある。
- 新しい単語が追加されると、元の行列を作り直した上で再計算する必要がある。
- pythonライブラリ
- from sklearn.decomposition import TruncatedSVD
-
NMF(Non-negative Matrix Factorization): 入力データ、出力データの値がすべて非負であるという性質を持った次元削減手法です。
- 画像データなどを扱う際に、モデルとして解釈しやすいという利点があります。
- コンピュータビジョンやテキストマイニング、レコメンデーションなど
- 元の行列の要素が非負である
- 分解後の行列の要素が非負である
- 潜在意味空間の各次元が直行するという制約を持たない
- アルゴリズム
- 元のデータ行列 V: n行d列
- W: n行r列
- H: r行d列
- WHは、元の行列Vの近似となっている。dよりも小さいrを選ぶことで次元削減を行うことができる。
-
手順
- W,Hを正の値で初期化する
- Hを定数とみなし、Wを更新する
- Wを定数とみなし、Hを更新する
- W,Hが収束したら計算を止める
- pythonライブラリ
- from sklearn.decomposition import NMF
-
LDA(Latent Dirichlet allocation): 次元削減手法の一つで、文書のモデル化に適した手法です。
- 文書が持つ単語を入力データに、複数のトピックを割り当てることができます。
- アルゴリズム
- 各文書の単語について、ランダムにトピックを割り当てる
- 単語に割り当てられたトピックから、文書ごとのトピック確率を計算する
- 単語に割り当てられたトピックから、トピックごとの単語確率を計算する
- 2と3の積で計算される確率を元に、各文書の単語にトピックを再び割り当てる
- 2,3,4を収束条件まで繰り返す
- ストップワード: 精度向上のために処理から除く単語
- pythonライブラリ
- from sklearn.decomposition import LatentDirichletAllocation
-
k-means法: 似たもの同士のデータをクラスタとしてまとめる手法をクラスタリングと言います。
- 手法が簡潔なため、データ分析において広く利用されます。
- アルゴリズム
- データ点の中から、適当な点をクラスタ数だけ選び、それらを重心とする
- データ点と各重心の距離を計算し、最も近い重心をそのデータ点の所属するクラスタとする
- クラスタごとにデータてんの平均値を計算し、それを新しい重心とする
- 2と3を繰り返し実行し、すべてデータ点が所属するクラスタが変化しなくなるか、計算ステップ数の上限に達するまで計算を続ける
- クラスタ数はハイパーパラメータ。設定するクラスタ数を明確に決めることが難しい
- 重心の選び方によって、学習がうまく進まない場合がある。初期値として選択した重心同士が近すぎる時に発生する。
- クラスタリングの良さの定量的な基準が必要
- クラスタ内平方和(Within-Cluster Sum of Squares: WCSS): すべてのクラスタについて、所属するデータ点とクラスタ重心の距離の平方和を計算し、それらについて和をとったもの。
- 小さいほど、良いクラスタリングと言える。
- Elbow法: クラスタ数を増やすと、WCSSが減少していく。しかし、一定のクラスタ数から減少が緩やかになっていく。この変化点(グラフにすると肘のように曲がっている点)を目安にクラスタ数を設定する。
- pythonライブラリ
- from sklearn.cluster import KMeans
-
混合ガウス分布: 機械学習や統計学でよく利用されるガウス分布は、ひとまとまりになったデータを表現することができる
- データの中に複数のまとまりがある場合は、複数のガウス分布の線形結合である混合ガウス分布を使うことで、クラスタリングを行うことができる。
- データの分布: データがどこを中心としたものかを表す平均とどのくらいバラついているかを表す分散でデータの分布を表す。
- アルゴリズム
- パラメータ(各ガウス分布の平均と分散)を初期化する
-
データ点をもつ重みを各クラスごとに計算する
- 重み: 各ガウス分布の値/すべてのガウス分布の値の合計
- 得られた重みからパラメータを再計算する
- 更新された各平均の変化が十分小さくなるまで繰り返す。
- 楕円形の広がりを持つデータ点に対して効果を発揮する
- pythonライブラリ
- from sklearn.mixture import GaussianMixture
-
LLE(Local Linear Embedding): 曲がったりねじれた状態で高次元空間に埋まっている構造をシンプルな形で低次元空間上に表現することができます。
- 複雑な構造のデータをよりシンプルな形式に変換することは、教師なし学習において重要なタスクです。
- 多様体学習(Manifold Learning): 非線形な構図を持ったデータに対して次元削減することを目的としています。
-
多様体: 局所的な部分に注目すると歪みのない空間と見做せるような空間のこと
- 局所的に見ると低次元空間の構造が高次元空間に埋まったもの
- 局所的な点と点の関係、近傍点の関係は歪みのない空間であるとみなしデータ点を表現します。
- 近傍点はハイパーパラメータ
- pythonライブラリ
- from sklearn.manifold import LocallyLinearEmbedding
-
t-SNE(t-Distributed Stchastic Neighbor Embedding): 高次元の複雑なデータを二次元(または三次元)に次元削減する手法
- 低次元空間での可視化に利用される
- 次元削減する際に似ている構造同士のデータがまとまった状態になるため、データの構造を理解するのに役立ちます。
- 多様体学習の一種
- 次元削減の際にt分布を利用する
- アルゴリズム
- すべての組i,jについて、xi,xjの類似度をガウス分布を利用した類似度で表す
- xiと同じ数の点yiを低次元空間にランダム配置し、全ての組i,jについて、yi,yjの類似度をt分布を利用した類似度で表す
- 上記から定義される類似度分布がなるべく同じになるように、データ点yiを更新していく
- 収束条件まで繰り返す
- 類似度: データ点同士がどれくらい似ているかを表すもの。データ間の距離を利用するのではなく、確率分布を利用します。
- 三次元や二次元への次元削減で利用される。
- より高次元空間では中心から離れた部分が支配的となり、局所的な情報を保持できなくなり、うまく次元削減をできない場合がある。
- pythonライブラリ
- from sklearn.manifold import TSNE
第4章: 評価方法および各種データの扱い
-
教師あり学習の評価
- 分類問題
-
混同行列(Mixing matrix): 分類結果を表の形式にまとめることでどのラベルを正しく分類できたか、また、どのラベルを誤って分類したかを調べることができる。
- 実データ(正解)と予測データの行列
- TN(True Negative): 実際にネガティブのデータを正しくネガティブと予測した場合。
- FP(False Positive): 実際にはネガティブのデータを間違ってポジティブと予測した場合。
- FN(False Negative): 実際にはポジティブのデータを間違ってネガティブと予測した場合。
- TP(True Positive): 実際にポジティブのデータを正しくポジティブと予測した場合。
- from sklearn.metrics import confusion-matrix
-
正解率(Accuracy): 予測結果全体に対して正しく予測できたものの割合。
- (TP + TN) / (TP + TN + FP + FN)
- from sklearn.metrics import accuracy_score
-
適合率(Precision): ポジティブと予測したものに対し、正しくポジティブと予測できたものの割合
- TP / (TP + FP)
- from sklearn.metrics import precision_score
-
再現率(Recall): 実際にポジティブのものに対し、正しくポジティブと予測できたものの割合
- TP / (TP + FN)
- from sklearn.metrics import recall_score
-
F値(F1-Score): 適合率と再現率の両方の傾向を反映させて指標。
- 適合率と再現率はトレードオフの関係にある。どちらの指標も同様に重要な場合は、F値を見る。
- 2 * (適合率 * 再現率) / (適合率 + 再現率)
- from sklearn.metrics import f1_score
-
AUC(Area Under the Curve): ROC曲線の下側面積。最大で1、最小で0。AUCが1に近づくほど精度が高く。0.5付近の値では予測がうまくいっていないことを示しています。
- ROC(Receiver Operating Characteristic): 偽陽性率というFPの割合を横軸に、真陽性率というTPの割合を縦軸にしたグラフ。
- 予測確率に対してどこからを陽性にするかという閾値を1から少しずつ下げていった時の、FPとTPの関係の変化をグラフにしたもの
- from sklearn.metrics import roc_curve
- ポジティブのデータ数とネガティブのデータ数に大きな偏りがあった場合は、正解率やF値などがうまく機能しない
- 例: WEBサイトの広告を見た人がどれくらい商品を購入するかを予測するような場合、正例と負例の数にかなり偏りがあることがあり、正解率は0.99なのに、AUCが0.6となってしまうことがある。
- from sklearn.metrics import rocauccurve
- 回帰問題
-
平均二乗誤差(Mean square error): 予測値との誤差の二乗をすべて計算しそれの平均を計算したもの
- 値を見ただけでは精度の良し悪しはわからない。
- 目的変数の分散が大きいと平均二乗誤差も大きくなってしまう。
- from sklearn.metrics import meansquarederror
-
決定係数(Coefficient of Determination): 平均二乗誤差を使って、学習済みモデルの予測の当てはまり度を示す数値。
- 目的変数の分散に依存しない値
- R2と記述される
- 最大値1.0~最小値0.0をとる。(予測値があまりにも外れているとマイナスの値をとる)
- 最大値1.0で誤差がないことを示す。
- from sklearn.metrics import r2_score
-
過学習: 学習データに対してうまく予測ができているのに、検証データ(学習に利用しなかったデータ)に対して、予測がうまくできないこと
- 汎化性能: 未知のデータに対する予測性能
- 防ぐ方法
-
データセットを学習データと検証データに分割して学習後に検証を行い、過学習していないかを検知する。
- 使用した学習データと検証データの相性で結果が変化してしまう。
- 交差検証(クロスバリデーション): 複数の分割パターンで何度か検証を行う方法
- 学習データを増やす
- 特徴量削減
- 正則化
- アーリーストッピング
- アンサンブル学習
-
ハイパーパラメータの探索
- 注意深く選ぶことで、モデルの性能をより向上させることができる
- 複数のハイパーパラメータの組み合わせ数は膨大なため、非常に時間がかかる
- グリッドサーチ: ハイパーパラメータの組み合わせを網羅的に探索する方法
- あらかじめ、探索対象のハイパーパラメータを設定し、探索を自動的に行う
- from sklearn.model_selection import GridSearchCV
- from sklearn.model_selection import KFold
-
各種データの扱い
- 文書データ: そのままでは取り扱えないので、表形式に変換して利用する。
-
単語カウントによる変換: 縦方向に文書、横方向に全文書内の単語種類が並ぶ表形式として表現する
- 文書に単語が出現しなかった場合は0として表される
- 単純なカウントのため、単語の重要度を考慮しない。
-
tf-idfによる変換: 下記のtfとidfを掛け合わせた値に変換する。
- tf(Term Frequency): 文書内の単語の出現頻度。
- idf(Inverse Document Frequency): 単語を含む文書が多いと小さくなる値。
- どの文書にも含まれる単語の値は小さくなり、特定の文書にしか出現しない単語の値が大きくなる
- 画像データ:
-
ピクセルの情報をそのまま数値として利用する