开发者

How to oversample instances in a data set in R

I have a data set with 20 classes, and it has a pretty non-uniform distribution. Is there any functionality in R tha开发者_JAVA百科t allows us to balance the data set (weighted perhaps)?

I want to use the balanced data with Weka for classification. Since my class distribution is skewed, I am hoping to get better results if there's no single majority class.

I have tried to use the SMOTE filter and Resample filter but they don't quite do what I want. I dont want any instances to be removed, repetition is fine.


I think there's a misunderstanding in your terminology. Your question's title refers to sampling, and yet the question text involves weighting.

To clarify:

With sampling, you either have fewer, the same, or more instances than in the original set; the unique membership of a sample can be either a strict subset of the original set or can be identical to the original set (with replacement - i.e., duplicates).

By weighting, you simply adjust weights that may be used for some further purpose (e.g. sampling, machine learning) to address or impose some (im)balance relative to a uniform weighting.

I believe that you are referring to weighting, but the same answer should work in both cases. If the total # of observations is N and the frequency of each class is an element of the 20-long vector freq (e.g. the count of items in class 1 is freq[1]*N), then simply use a weight vector of 1/freq to normalize the weights. You can scale it by some constant, e.g. N, though it wouldn't matter. In case any frequency is 0 or very close to it, you might address this by using a vector of smoothed counts (e.g. Good-Turing smoothing).

As a result, each set will have an equal proportion of the total weight.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜