2017-01-28 7 views
1

いくつかの1クラス分類アルゴリズムをテストするために、外れ値を持つ非線形データをシミュレートするRコード/パッケージを探しています。アウトライヤーと非線形データをシミュレートして1クラスの分類子をテストする

バナナ型のデータセットを作成するこのコードが見つかりました。私の実際のデータが2dの双曲線のように見えるので、かなり良いです。 しかし、私は混乱行列を印刷して私のモデルの性能を評価できるように、すべての異常値がラベル付けされたデータセットが必要です。 必ずしもこのように見える必要はありません。最も重要なことは非線形性です。

ありがとうございます。

banana=function(A,B,C1,C2,N,keep=10,init=10) 
{ 
R=init*keep+N*keep 
x1=x2=0 
bimat=matrix(double(2*N),ncol=2) 
for (r in 1:R) { 
    x1=rnorm(1,mean=(B*x2+C1)/(A*(x2^2)+1),sd=sqrt(1/(A*(x2^2)+1))) 
    x2=rnorm(1,mean=(B*x2+C2)/(A*(x1^2)+1),sd=sqrt(1/(A*(x1^2)+1))) 
    if (r>init*keep && r%%keep==0) { 
     mkeep=r/keep; bimat[mkeep-init,]=c(x1,x2) 
    } 
} 

return(bimat) 
} 

# usage 
set.seed(66) 
nvar2=2 
A=0.5; B=0; C1=C2=3 
y2=banana(A=A,B=B,C1=C1,C2=C2,1000) 
+0

曲をすることができますベクトル、結果を比較し、あなたの混乱マトリックスを持っています –

+0

データをソートすることによってあなたは何を意味するのですか?それらは2次元にあり、2次元の1つの値の高い値はそれが外れ値であることを暗示しません。 – MomoMI

+0

どのような外れ値あなたはx = 3、y = 3のような点を追加するだけでもよいし、あなたの分布にほぼ合った点を望んでいるかもしれませんが、ちょっと離れすぎています。 – G5W

答えて

1

これを行う方法が1つあります。アイデアは、yがxとノイズの非線形関数であるデータを生成することです。外れ値が必要な場合は、ノイズを強制的に「大」にする以外は同じ生成プロセスを使用します。あなたは、最後の数行がはずれ値であるか、そして分類器は、あなたの予測クラスを与えるそのベクトルを取り、あなたの結果できるように、あなただけのデータをソートすることができますどのような「大きな意味。

NonLinear = function(n) { 
    x = rnorm(n, 5, 1) 
    y = (x-3)^3/10 + rnorm(n,0,1) 
    data.frame(x,y) 
} 
plot(NL) 

NL_Outliers = function(n, Lower, Upper) { 
    x = rnorm(n, 5, 0.8) 
    y = (x-3)^3/10 + 
     sample(c(-1,1), 10, replace=TRUE) * runif(n, Lower, Upper) 
    data.frame(x,y) 
} 

NL = NonLinear(200) 
plot(NL, ylim=c(-4,10)) 
NLO = NL_Outliers(10, 3.2, 4.5) 
points(NLO, pch=20, col="red") 

Nonlinear data with tuned outliers

+0

ありがとうございます。私がより直線的な形状を好まず、XとYの関係を変更した場合、rnorm(n、0,1)によって生成されるノイズを別の方法で設定しますか?つまり、どのようにノイズの選択をするのですか?そして、X/Y依存のコストマン? – MomoMI

+0

私は答えにいくつかの詳細を追加します。 – G5W

+0

それは素晴らしいだろう。私は双曲線との関数関係を変更しようとしましたが、出力は形状のないランダムな雲のように見えます。私はそれがrnormの平均とsdによると思う。 – MomoMI

関連する問題