デジタルバイオマーカーの話するときに,入れそびれたネタを少し.
ビニング(binning)という処理があります
例えば,1~100までのデータがある時,1-10,11-20,21-30...のようにカテゴライズして数えあげてヒストグラム書いたりしますね
これは連続量を離散化してるわけですが,ヒストグラムは元のデータの特徴をつかむ時に使われるように,データの持つ特徴を損なわないまま階層化して,見通しをよくしているともいえます.1-10のような区間・階層を「ビン」といいます
また1000個のデータを10個のビンにはめると,データ量は一気に圧縮されます
また,良くも悪くも,外れ値や区間内のバラつきをビンは飲み込んでくれます
こういった性質から機械学習の前処理などでも用いられる手法です
さてSASの話
data test;
length id 8;
call streaminit("1234");
do id=1 to 500;
val=rand("normal",10,5);
output;
end;
do id=501 to 1000;
val=rand("normal",25,4);
output;
end;
run;
こういったデータあったとします.
分布としては以下の感じ
SASにおけるビニングは porc HPBINで実施します
<0.4096..のビンには11データ
0.4096~4.517…のビンには56データというように ビニングがおきます
ビニングの結果はデータセット化もできます
バケットビニングとは
最大値ー最小値をビン数でわって出した値を,最小値から足して区切っていく方法です
ビン化イメージとしては
こんな感じ,ビン幅は等間隔ですね
次はQUANTILEビニング,ビン数の分だけ分位点つくるタイプです
分位点なので,境界値ぴったりとかはおいておいて,基本度数と比率はビン間で等しくなりますが,代わりにビン幅が不均等になり
データが疎のところは広く,密のところはせまくなります
あとはウィンザライズドビニング
あとはPSEUDO-QUANTILEってのも利用できますが,QUANTILEの結果に似ます
今回は割愛.
さて,次は,ビン化の性能評価とかを考えていきましょう だいぶ先になるかもだけど
SASにおけるビニングは porc HPBINで実施します
ods output mapping=bin;
proc hpbin data=test numbin=10 bucket ;
input val;
run;
<0.4096..のビンには11データ
0.4096~4.517…のビンには56データというように ビニングがおきます
ビニングの結果はデータセット化もできます
バケットビニングとは
最大値ー最小値をビン数でわって出した値を,最小値から足して区切っていく方法です
ビン化イメージとしては
こんな感じ,ビン幅は等間隔ですね
次はQUANTILEビニング,ビン数の分だけ分位点つくるタイプです
proc hpbin data=test numbin=10 quantile ;
input val;
run;
分位点なので,境界値ぴったりとかはおいておいて,基本度数と比率はビン間で等しくなりますが,代わりにビン幅が不均等になり
データが疎のところは広く,密のところはせまくなります
あとはウィンザライズドビニング
proc hpbin data=test output=out numbin=10 winsor winsorrate=0.05 ;
input val;
run;
これはウィンザライズド平均を使う方法で,ウィンザライズド平均というのはトリム平均っぽいやつで,トリムが両端をカットするのに対して,ウィンザライズド平均は,端に当たらない値で,極致をLOCF上書きしちゃうイメージ
0 ,51, 52, 53 ,100というデータなら 51,51,52,53,53にして平均とる感じ
winsoerateで両端をどこまでとるか(なん%分までか)を定義
これはウィンザライズド平均を使う方法で,ウィンザライズド平均というのはトリム平均っぽいやつで,トリムが両端をカットするのに対して,ウィンザライズド平均は,端に当たらない値で,極致をLOCF上書きしちゃうイメージ
0 ,51, 52, 53 ,100というデータなら 51,51,52,53,53にして平均とる感じ
winsoerateで両端をどこまでとるか(なん%分までか)を定義
あとはPSEUDO-QUANTILEってのも利用できますが,QUANTILEの結果に似ます
今回は割愛.
さて,次は,ビン化の性能評価とかを考えていきましょう だいぶ先になるかもだけど
0 件のコメント:
コメントを投稿