4.SMOTEしようとしたら「添え字が許される範囲外です」というエラーが出る
やりたいこと:Rで2クラスデータに対してSMOTEを適用したい
環境:R version 3.1.2 (Windows7)
【状況】
エラーメッセージは以下のとおり
> SMOTE(V385~.,data=posnegdata)
以下にエラー T[i, ] : 添え字が許される範囲外です
【原因】
V385に2種類のクラス名が使われているが,関数factor()で確認すると,このデータでは出てこないクラス名も0個のクラスとして存在している.
> factor(posnegdata$V385)
[1] positive positive positive positive positive positive negative negative negative (略)
Levels: negative positive neutral
neutralというクラス名はこのデータ(posnegdata)では出てきていないにもかかわらずクラス名一覧に残っている.もとの行列から一部データを抽出して新しい行列を作ったりすると,もとの行列のクラス名一覧を継承することがあるみたい.
【解決策】
クラス名一覧を現在のデータのものに更新する.
> posnegdata$V385<-factor(posnegdata$V385)
【感想】
前も同じところではまったのに….やっぱ作業メモを残すことは大事だわ.
【追記】
SMOTEは2クラスの不均衡データのデータ数を調整してくれるとても便利なプログラムなんだけど,どうも3クラス以上には対応してない気がする.そういう記述をどこかのサイトで見たし,3クラスでやってみたら余計にデータ数が不均衡になった.
DMwRパッケージの説明には明確に「3クラス以上はだめよ」とは書いてないけど,2クラスを想定してる説明文ぽい.