学習記録(14日目)
勉強開始:12/7(土)〜
教材等:
・大重美幸『詳細! Python3 入門ノート』(ソーテック社、2017年):12/19(木)読了
・Progate Python講座(全5コース):12/21(土)終了
・Andreas C. Müller、Sarah Guido『(邦題)Pythonではじめる機械学習』(オライリージャパン、2017年):12月23日(土)読了
第3章 教師なし学習と前処理(Unsupervised Learning and Preprocessing)
・教師なし変換(Unsupervised Transformation):人間や他の機械学習アルゴリズムにとってよりわかりやすいデータ表現を作る。最も一般的なのは次元削減。または文書データの集合からのトピック抽出。後者はソーシャルメディア上の話題を解析するのに有用。
・クラスタリングアルゴリズム(Clustering Algorithms):データを似たような要素から構成されるグループに分ける。SNSサイトなどの写真を人物別に分ける仕組みなどが該当する。
・教師情報がない場合にデータから意味を見出す唯一の手法である。
教師なし学習の難しさ
・教師なし学習はラベル情報がまったく含まれていないデータが与えられるため、結果を評価するには人間が確かめるしかない場合が多い。
・そのため、データをよりよく理解するために探索的に用いられる場合が多い。
前処理とスケール変換
・教師あり学習のニューラルネットワークやSVMはスケール変換に非常に敏感
・Standard Scaler:特徴量の平均が0で分散が1になるように変換する。
・Robust Scaler:平均値の分散の代わりに中央値と四分位数を用いる。外れ値(outliner)を無視する。
・MinMax Scaler:データがちょうど0〜1の間に入るよう変換する。
・Normalizer:データポイントを半径1の円に投射する。特徴ベクトルの長さではなく方向または角度だけが問題となる場合に用いる。
・テストセットと訓練セットは同じように変換すること。
・前処理してから学習、スコア計算する。
次元作劇、特徴量抽出、多様体学習
・動機:可視化、データ圧縮、以降の処理に適した表現の発見など。
主成分分析(Principal component analysis:PCA)
・上記すべての動機に対し最も多く用いられるアルゴリズム
・特徴量を、相互に統計的に関連しないように回転する手法
・StandardScalerで分散を1に → PCAを適用
・labeled faces in the wildを用いた特徴量抽出の説明
非負値行列因子分解(Non-negative matrix factorization:NMF)
・PCAと同様に有用な特徴量を抽出することを目的とする教師なし学習
・データを非負の重み付き和に分解するこの方法は複数の人が話している音声データといった、いくつもの独立した発生源から得られたデータを重ね合わせて作られるようなデータに特に有効
t-SNEアルゴリズム
・多様体学習アルゴリズム(manifold learning algorithms)と呼ばれる。
・よい可視化を実現でき、複雑なマッピングも行うことができるものの、新しいデータを変換することはできず、訓練に使ったデータしか変換することはできない。
探索的なデータ解析に有用であるものの、最終的な目標が教師あり学習の場合はほとんど用いられない。
クラスタリング(Clustering)
・データセットをクラスタと呼ばれるグループに分割する。
k-means クラスタリング
・最も単純で広く用いられているクラスタリングアルゴリズム
・データのある領域を代表するようなクラスタ重心を見つけ、データポイントを割り当てる。そして引き続き個々のクラスタ重心を、データポイントの平均に設定する。これを繰り返し、変化がなくなったところでアルゴリズムを終了する。
・上記のとおり分割されたデータにラベルはないので、アルゴリズムからわかるのは指定したクラスタ数の分だけ似ている画像が並ぶということのみ。
・ベクトル量子化(vector quantization)
凝集型クラスタリング(agglomerative clustering)
・個々のデータポイントを個別のクラスタとして開始し、似たクラスタを併合しつつ、指定したクラスタ数になるまで繰り返し処理を実施する。
・scikit-learnにはward, average, completeの3つが実装されているが、大抵wardで十分
・デンドログラム(dendrogram)で可視化できる。SciPyで描画できる。
DBSCAN(密度に基づくノイズあり空間クラスタリング)
・density-based spatial clustering of applications with noise の略
・特徴空間における高密度領域の点を見つける。
・過程でノイズが生ずるので、得られたクラスタリング結果の扱いには注意を要する。
第4章 データの表現と特徴量エンジニアリング
・特定のアプリケーションに対し、最良のデータ表現を模索することを特徴量エンジニアリングと呼ぶ。
・どのような特徴量を用いるか、また必要に応じて追加や組み合わせるかということが、機械学習応用がうまくいくかどうかを決定する最も重要な要素である。
ワンホットエンコーディング(one-hot-encoding)
・ダミー変数と呼ばれることもある。カテゴリ変数を1つ以上の0と1の値を持つ新しい特徴量で置き換える。scikit-learnが扱える形に変換する。
ビニング、離散化(binning, discretization)
・線形モデルを連続データに対してより強力にする。
交互作用と多項式(interaction feature and polynomial feature)
・線形モデルに有効、もとの特徴量同士を組み合わせる。
第5章 モデルの評価と改良
・交差検証(cross-validation):任意のk(大体の場合5〜10)の分、データを分割(fold)し、訓練セットとテストセットとして使用する。シャッフル分割やグループ付き分割がある。
・グリッドサーチ(grid search):パラメータのすべての組み合わせを検証する。
・実際に機械学習を利用する場合は、正確な予測のみに興味があるわけではなく、より大きな意思決定の過程の中でその予測を用いる場合が多い。
基準にあるモデルと別のモデルを比較し、ビジネスインパクトをしっかりと考慮する必要がある。
・スレッショルド(threshold):しきい値のこと。
第6章 アルゴリズムチェーンとパイプライン
・pipelineクラスで複数の処理ステップを糊付けし、1つのestimator(推定器)にできる。
・実世界における機械学習アプリは独立モデルを単独で用いることはほとんどない。pipelineモデルで糊付けしておくことで、変換を適用することを忘れたり順番を間違えたりといったミスを減らせる。
第7章 テキストデータの処理
・自然言語処理(natural language processing:NLP)、情報検索(information retrieval:IR)
・テキスト解析におけるデータセットをコーパス(corpus)と呼び、1つのテキストとして表現される個々のデータポイントを文書(document)と呼ぶ。
・テキストデータはそのままだと機械学習に適用できないので、アルゴリズムを扱えるような数値表現に変換する必要がある。
最も単純で効率がよく、広く用いられてる表現がBoW(bag-of-words)表現である。構造を捨て単語の現れる数だけを数える。
・BoW表現を計算する3ステップ
(1)トークン分割(Tokenization):スペースや句読点を目安として個々の文章を単語に分割する。
(2)ボキャブラリ構築(Vocabulary building):すべての文章に現れる単語をボキャブラリとして集め、番号を付ける。(例えばアルファベット順など)
(3)エンコード(encord):ボキャブラリの単語が現れる数を数える。
・sparse matrix(疎行列)、compressed s.m.:CSR(圧縮疎行列)、SciPyで使える。
・tf-idf(term frequency-inverse document frequency):ストップリストのように重要でなさそうな特徴量を落とすのではなく、特徴量の情報の重みに応じてスケール変換する手法。
・BoWの問題→順番が失われるため、正反対の意味を持つ一部の文章がまったく同じ意味になってしまう。(it's bad, not good at allとit's good,not bad at allなど)
ただし、トークンを単独でなく、2つないし3つの連続するものとして扱うことで回避できる。それぞれバイグラム(bigram)、トリグラム(trigram)と呼ぶ。難点として、特徴量が激増する。
単語1つでも相当な意味を持つ場合が多いため、ほとんどの場合は最小長を1としたほうがよい。
・語幹処理(stemming)や見出し語化(lemmatization)は正規化(normalization)の1つ。
『(邦題)Pythonではじめる機械学習』 読了