コンピュータ設定悪戦苦闘メモ

困ったこととその解決策のメモ.万人に有効なことは保証できませんが,お役に立てればうれしいな.

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クラスを想定してる説明文ぽい.