備忘録も兼ねて、「教師あり学習」と「教師なし学習」について、概要・利用するクラス・事例・キーワードと、学習する上で参考になったサイトについてまとめておきます。
##『教師あり学習』
めちゃザックリ:特徴を表すデータと対応する答えのデータを与えて学習させることで予測モデルを作る。予測には分類問題と回帰問題がある。
###各手法
####①線形回帰
あらゆる直線のうち、損失関数(誤差関数)の値が最も小さくなるパラメータを求める。
- 利用するクラス:
sklearn.linear_model.LinearRegression
- 事例:来客数と売上高の関係 など
- キーワード:単回帰、重回帰、多項式回帰、非線形回帰
- 参考サイト:scikit-learn で線形回帰 (単回帰分析・重回帰分析)
####②ロジスティック回帰
二値分類のアルゴリズムで、分類問題に適用される。
- 利用するクラス:
sklearn.linear_model.LogisticRegression
- 事例:営業訪問回数・満足度と売上の関係 など
- キーワード:シグモイド関数、交差エントロピー誤差関数
- 参考サイト:scikit-learnのロジスティック回帰でiris(アヤメ)の分類
####③SVM(線形)
決定境界(直線)がデータから離れるように学習するアルゴリズムで、分類と回帰のどちらにでも使える。
- 利用するクラス:
sklearn.svm.SVC
- 事例:テキスト分類、数字認識 など
- キーワード:ハードマージン、ソフトマージン
- 参考サイト:サポートベクターマシン(SVM)とは?〜基本からPython実装まで〜
####④SVM(カーネル法)
カーネル関数により実空間のデータを超平面で分離できる空間に写像してから、データ集合を分離する。
- 利用するクラス:
sklearn.svm.SVC
- 事例:色情報からの品種識別 など
- キーワード:カーネル関数(シグモイドカーネル、多項カーネル、RBF[放射基底関数]カーネル)
- 参考サイト:【Python】各種カーネル関数を使ってサポートベクターマシンを実装する【irisデータセット】
####⑤ナイーブベイズ
特徴量がそれぞれ独立であるという仮定のもとで、データがあるラベルである確率を計算する。
- 利用するクラス:
sklearn.naive_bayes.MultinomialNB(他にGaussianNB、GaussianNBなど)
- 事例:迷惑メール判定 など
- キーワード:スムージング
- 参考サイト:scikit-learn によるナイーブベイズ分類器
####⑥ランダムフォレスト
多様性のある複数の決定木から出力を集め、多数決で分類の結果を出す。
- 利用するクラス:
sklearn.ensemble.RandomForestClassifier
- 事例:行動履歴や属性による分類
- キーワード:ジニ係数、ブートストラップ法
- 参考サイト:[入門]初心者の初心者による初心者のための決定木分析
####⑦ニューラルネットワーク
入力と出力の間に中間層を挟むことで、複雑な決定境界を学習する。
- 利用するクラス:
sklearn.neural_network.MLPClassifier
- 事例:画像認識、音声認識
- キーワード:単純パーセプトロン、活性化関数、アーリーストッピング
- 参考サイト:自分でニューラルネットワークを作ろう
####⑧k近傍法
入力データの近傍k個の分類の多数決により判定を行う。
- 利用するクラス:
sklearn.neighbors.KNeighborsClassifier
- 参考サイト:機械学習 〜 K−近傍法 〜
###評価方法
- a. 分類問題の場合
- a-1. 混同行列
利用するクラス:sklearn.metrics.confusion_matrix
- a-2. 正解率
利用するクラス:sklearn.metrics.accuracy_score
- a-3. 適合率
利用するクラス:sklearn.metrics.precision_score
- a-4. 再現率
利用するクラス:sklearn.metrics.recall_score
- a-5. F値
利用するクラス:sklearn.metrics.f1_score
- a-6. ROC-AUC
利用するクラス:sklearn.metrics.roc_curve
参考サイト:
scikit-learnで混同行列を生成、適合率・再現率・F1値などを算出
scikit-learnでROC曲線とそのAUCを算出
- b. 回帰問題の場合
- b-1. 平均二乗誤差
利用するクラス:sklearn.metrics.mean_squared_error
- b-2. 平均絶対誤差
利用するクラス:sklearn.metrics.mean_absolute_error
- b-3. 決定係数
利用するクラス:sklearn.metrics.r2_score
参考サイト:scikit-learn で回帰モデルの結果を評価する
###過学習を防ぐ方法
- a. ハイパーパラメータ
- a-1. グリッドサーチ
利用するクラス:sklearn.grid_search.GridSearchCV
- a-2. ランダムサーチ
利用するクラス:sklearn.grid_search.RandomizedSearchCV
参考サイト:scikit-learnでモデルのハイパーパラメータチューニングをしよう!
- b. データ(学習データ&検証データ)の分割
- b-1. ホールドアウト法
利用するクラス:sklearn.model_selection.train_test_split
- b-2. クロスバリデーション法
利用するクラス:sklearn.model_selection.cross_val_score
sklearn.model_selection.KFold
- b-3. リーブワンアウト法
利用するクラス:sklearn.model_selection.LeaveOneOut
参考サイト:機械学習、ディープラーニングでの学習データとテストデータの分割手法について
- c. 正則化
- c-1. リッジ回帰
利用するクラス:sklearn.linear_model.Ridge
- c-2. ロッソ回帰
利用するクラス:sklearn.linear_model.Lasso
参考サイト:最短でリッジ回帰とラッソ回帰を説明(機械学習の学習 #3)
##『教師なし学習』
めちゃザックリ:教師あり学習と異なり、目的変数は存在しない。ここでは特徴データに対し、別の形への変形や、部分集合を見つけることで、その構造を抽出する。手法に、次元削減とクラスタリングがある。
####①主成分分析(PCA)
多数の量的説明変数を、より少ない指標や合成変数に要約し、データの変数を削減する。
- 利用するクラス:
sklearn.decomposition.PCA
- キーワード:分散共分散行列、固有値問題、累積寄与率
- 参考サイト:主成分分析と固有値問題
####②K平均法(K-means法)
データを与えられたクラスタ数に分類し、似たもの同士グループに分ける。
- 利用するクラス:
sklearn.cluster.KMeans
- 事例:マーケティングデータ分析、画像分類
- キーワード:クラスタ内平方和、エルボー法、シルエット分析、k-means++、k-medoids法
- 参考サイト:k-meansの最適なクラスター数を調べる方法
####③潜在意味解析(LSA)
文章データで、特徴量を単語数から潜在トピック数に削減することで、単語と文章の類似度を求める。
- 利用するクラス:
sklearn.decomposition.TruncatedSVD
- キーワード:特異値分解、トピックモデル、tf-idf
- 参考サイト:機械学習 潜在意味解析 理論編
####④非負値行列因子分解(NMF)
入出力データの値が全て非負という性質をもつ次元削減手法。
- 利用するクラス:
sklearn.decomposition.NMF
- 事例:リコメンド、テキストマイニング
- 参考サイト:非負値行列因子分解(NMF)をふわっと理解する
####⑤潜在的ディリクレ配分法(LDA)
文書内の単語からトピックを作成し、文書がどのトピックで構成されているかを求める。
- 利用するクラス:
sklearn.decomposition.LatentDirichletAllocation
- 事例:自然言語処理
- キーワード:トピックモデル、ディリクレ分布
- 参考サイト:トピックモデル(LDA)で初学者に分かりづらいポイントについての解説
####⑥混合ガウス分布(GMM)
複数のガウス分布の線型結合によりクラスタリングを行う。
- 利用するクラス:
sklearn.mixture.GaussianMixture
- キーワード:ガウス分布
####⑦局所線形埋め込み(LLE)
非線形なデータに対して、次元削減を行う。
- 利用するクラス:
sklearn.manifold.LocallyLinearEmbedding
####⑧t分布型確率的近傍埋め込み法(t-SNE)
高次元データを二次元か三次元に次元削減する方法で、データの可視化などに利用される。
- 利用するクラス:
sklearn.manifold.TSNE