私はR初心者です。サンプルをランダム フォレストに入れる前に、外れ値のクリーニングと 0 から 1 への全体的なスケーリングを実行したいと考えています。
g<-c(1000,60,50,60,50,40,50,60,70,60,40,70,50,60,50,70,10)
0 - 1 の単純なスケーリングを行うと、結果は次のようになります。
> round((g - min(g))/abs(max(g) - min(g)),1)
[1] 1.0 0.1 0.0 0.1 0.0 0.0 0.0 0.1 0.1 0.1 0.0 0.1 0.0 0.1 0.0 0.1 0.0
したがって、私の考えは、0.95 分位よりも大きい各列の値を、0.95 分位よりも小さい次の値に置き換えることです。0.05 分位についても同様です。
したがって、事前にスケーリングされた結果は次のようになります。
g<-c(**70**,60,50,60,50,40,50,60,70,60,40,70,50,60,50,70,**40**)
およびスケーリング:
> round((g - min(g))/abs(max(g) - min(g)),1)
[1] 1.0 0.7 0.3 0.7 0.3 0.0 0.3 0.7 1.0 0.7 0.0 1.0 0.3 0.7 0.3 1.0 0.0
データフレーム全体にこの式が必要なので、R 内の機能的な実装は次のようになります。
> apply(c, 2, function(x) x[x`<quantile(x, 0.95)]`<-max(x[x, ... max without the quantile(x, 0.95))
誰でも助けることができますか?
余談ですが、この仕事を直接行う機能があれば教えてください。私はすでに をチェックアウトcut
しcut2
ました。cut
一意ではないブレークのために失敗します。cut2
動作しますが、文字列値または平均値のみが返され、0 - 1 の数値ベクトルが必要です。
トライアル用:
a<-c(100,6,5,6,5,4,5,6,7,6,4,7,5,6,5,7,1)
b<-c(1000,60,50,60,50,40,50,60,70,60,40,70,50,60,50,70,10)
c<-cbind(a,b)
c<-as.data.frame(c)
ご協力ありがとうございます。
ライナー