新卒1年目の技術に関する備忘録

自主学習で困ったこと、学んだことをまとめています

評価基準とスコア

2クラス分類を例に挙げる。

片方のクラスだけ極端に多い場合、単純に精度が高いから良いモデルとは決めきれない。

極端に多いクラスの方だけを予測してしまえば、高い精度を保てるからである。

 

混同行列

f:id:logz-developers:20190102124651p:plain

 

精度 = TP TN / TP + TN + FP + FN

で表される。

 

精度以外に良いモデルかどうかを判断する基準

 

陽性であると予測されたものがどのくらい実際に陽性であったかを測定する。

適合率 = TP / TP FP 

実際の陽性のサンプルのうち、陽性と予測されたものの割合を定義

再現率 = TP / TP + FN

再現率と適合率はトレードオフの関係にある。

 

適合率と再現率の一方だけでは全体像がつかめないため、これら2つをまとめる方法の1つがf-スコア、f-値である。

 

F = 2 × 適合率 × 再現率 / 適合率 + 再現率

これはf値の変種の1つでf1値とも呼ばれる。

 

適合率-再現率カーブ

precision(適合率)、recall(再現率)、threshold(閾値

precision, recall, threshold = precision_recall_curve(

y_test, svc.decision_function(X_test)) 

 

 

横軸に適合率、縦軸に再現率をとったグラフ

右上に近いほど良いモデルである。閾値の違いでモデルの良さがかなり変わる。

f:id:logz-developers:20190102125324p:plain

 

f:id:logz-developers:20190102125415p:plain

このグラフの下の領域を積分して求めたものを平均適合率という。

平均適合率をaverage_precision_scoreで求める。

適合率-再現率カーブを計算して、複数のスレッショルドを考えるので、decision_functionもしくはpredict_probaの結果を渡す必要がある。

 

 

ROCカーブ (receiver operating characteristics curve)

ROCカーブは偽陽率(False positive rate: FPR)と真陽率(True positive rate: TPR)に対してプロットする。

FPR = FP / FP + TN

TPR = TP / TP + FN

左上に近いほど良いモデルである。

 

f:id:logz-developers:20190102130328p:plain

 

AUC(area under the curve)

roc_auc_scoreでROCカーブの下の領域を積分した値を計算する。

roc_auc_scoreもaverage_precision_scoreと同様に、decision_function、predict_probaを渡す必要がある。

 

多クラス 分類の基準

 

micro平均

偽陽性偽陰性、真陽性の総数を計算し、適合率、再現率、f値を計算する。

 

 

macro平均

重みをつけないでクラス ごとのf値を平均する。

クラスのサイズを考慮しない。

 

weighted平均

重みをつけてf値を平均する。

 

 

モデルの評価を高くするには閾値の設定が重要である。

 

 

自動特徴量選択

モデルの汎化性能を向上させるために、最も有用な特徴量だけを残し、残りを捨てて特徴量を減らす必要がある。

良い特徴量を知るための基本戦略3つ。

・単変量統計

・モデルベース選択

・反復選択

 

単変量統計

個々の特徴量とターゲットの間に統計的に顕著な関係があるかどうかを計算し、最も確信度の高い特徴量を選択する。クラス分類の場合は分散分析。

scikit-learnで使う場合は、通常、クラス分類にはf_classif、回帰にはf_regressionを用いる

 

モデルベース選択

教師あり学習モデルを用いて、個々の特徴量の重要性を判断し、重要なものだけを残す手法。

SelectFromModel変換器を用いる。

 

反復選択

異なる特徴量を用いた一連のモデルを作る。

作り方には基本的な方法が2つある。

・まったく特徴量を使わないところから、ある基準が満たされるところまで1つずつ特徴量を加えていく方法

・すべての特徴量を使う状態から、1つずつ特徴量を取り除く方法

 

方法の1つとして、再帰的特徴量削減(recursive feature elimination : RFE)

この方法は作り方の種類として、2つ目にあたる。

反復選択は単変量やモデルベース選択に比べて、はるかに時間がかかる。

 

 

 

 

 

 

 

単変量非線型変換

log, sin, cosなどの数学関数を用いることでモデルの精度をあげることができる。

下図のように、値の小さいものが多く、値の大きいものが少ないデータについて考える。

f:id:logz-developers:20181228230238p:plain

まずはそのままのデータで予測をしてみる。

モデルはリッジ回帰を用いる。

 

R^2のスコアは62であまり高くない。

f:id:logz-developers:20181228230344p:plain

 

データを対数変換する。

f:id:logz-developers:20181228230441p:plain

 

変換後の分布は非対称性が少なくなった。

f:id:logz-developers:20181228230613p:plain

 

対数変換したデータで予測をすると精度がはるかに良くなった。

f:id:logz-developers:20181228230619p:plain

 

カウントデータ(注文数など)の予測は一般的なタスクだが、log(y + 1)で変換すると上手くいくことも多い。

 

特徴量のビニングと離散化

線形回帰モデルを柔軟にする方法として、ビニングがある。

線形回帰モデルでは特徴量が1つである場合、予測が直線になってしまうため特徴量を増やす方法としてビニングが使われる。

 

ビニングの方法

特徴量の入力レンジを固定数のビンに分割する。

numpyのlinspaceでビンを作る。

numpyのdigitizeで個々のデータポイントがどのビンに入るかを記録する。

sklearnのOneHotEncoderでビンに分けたデータを引数にとり、ワンホットエンコーディングを行う。

 

クラスタリングの評価

正解データを用いるクラスタリングの評価

調整ランド指数(adjusted rand index: ARI)、正規化相互情報量(normalized mutual information)がある。

 

正解データを用いないクラスタリングの評価

シルエット係数

シルエットスコアはクラスタのコンパクトさを計算する。

しかし、複雑な形状のクラスタはコンパクトにならないため、実際にはあまりうまくいかない。

 

もう少し良い評価方法として、頑健性を用いたクラスタリング評価指標がある。

 

DBSCAN

DBSCAN(density-based spatial clustering of applications with noise)

密度に基づくノイズあり空間クラスタリング

利点

クラスタ数を先験的に与える必要がない。

・どのクラスタにも属さない点を判別できる。

 

高密度領域(混んでいる領域)を見つける。

DBNCANは、クラスタは、データの中で高密度領域を構成していて、比較的空虚な領域で区切られているという考えに基づいている。

高密度領域中のデータポイントはコアサンプルと呼ばれる。

DBSCANには、min_samplesとepsという2つのパラメータがある。

DBSCANの定義

あるデータポイントから距離eps以内にmin_samples以上のデータポイントがあるとき、それをコアサンプルと呼ぶ。eps以内にあるコアサンプルは同じクラスタに割り当てられる。