<p>If the class distribution of the dataset is uneven, this may cause trouble in later phases of training and classification as classifiers will have very fewer data to learn features of a particular class.</p>

<p>Unlike normal upsampling, SMOTE makes use of the nearest neighbor algorithm to generate new and synthetic data that can be used to train the models.</p>

<p>As said in <a href="https://arxiv.org/pdf/1106.1813.pdf" rel="nofollow noreferrer">this original paper of SMOTE</a>, "<em>The minority class is over-sampled by taking each minority class sample and introducing synthetic examples along the line segments joining any/all of the k minority class nearest neighbors.</em>"</p>

<p>So <strong>yes</strong>, these newly generated synthetic data points are important and you do not have to worry about them much. SMOTE is one of the best techniques out there to perform this task, so I would suggest using this.</p>

<p>Consider the following image for example:
<a href="https://i.stack.imgur.com/kDtRH.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/kDtRH.jpg" alt="enter image description here"></a>
<strong><em>Figure a</em></strong> has more data points for <strong>class 0</strong> while very little for <strong>class 1</strong>.</p>

<p>As you can see, after applying SMOTE (<strong><em>Figure b</em></strong>), it will generate new data points for <strong>minority</strong> class (in this case, for <strong>class 1</strong>) in order to balance the dataset.</p>

<hr>

<p>Try reading:</p>

<ol>
<li><p><a href="http://rikunert.com/SMOTE_explained" rel="nofollow noreferrer">http://rikunert.com/SMOTE_explained</a> </p></li>
<li><p><a href="https://machinelearningmastery.com/smote-oversampling-for-imbalanced-classification/" rel="nofollow noreferrer">https://machinelearningmastery.com/smote-oversampling-for-imbalanced-classification/</a></p></li>
</ol>
SMOTE oversampling creates new data-points
<p>I am trying to solve an imbalanced classification problem, all the input features are categorical.
Here are the value counts of each feature:</p>

<pre><code> for i in X_train.columns:
    print(i+':',X_train[i].value_counts().shape[0])

 Pclass: 3
 Sex: 2
 IsAlone: 2
 Title: 5
 IsCabin: 2
 AgeBin: 4
 FareBin: 4
</code></pre>

<p>Applying SMOTE on the training data, after train_test_split. There are new values that are created, which are not present in the X_train dataset.</p>

<pre><code> from imblearn.over_sampling import SMOTE
 from collections import Counter
 #removing the random_state dosent help
 sm = SMOTE(random_state=0)
 X_res, y_res = sm.fit_resample(X_train, y_train)
 print('Resampled dataset shape %s' % Counter(y_res))

 Resampled dataset shape Counter({1: 381, 0: 381})
</code></pre>

<p>Value counts of the resampled dataset:</p>

<pre><code> Pclass: 16
 Sex: 7
 IsAlone: 2
 Title: 12
 IsCabin: 2
 AgeBin: 4
 FareBin: 4
</code></pre>

<p>There are new values being created by using SMOTE, this was also the case with under_sampling new values were created. These new values are not present in the test dataset.</p>

<p>Example:</p>

<pre><code>X_train-Pclass 1-20,2-15,3-40
X_res-Pclass 1-20,0.999999-3,2-11,1.9999999-4,3-34,2.9999999-6
</code></pre>

<p>My question:</p>

<ol>
<li><p>Why are these values created and do they hold some-importance?</p></li>
<li><p>How to deal with them? Should I just round them off or remove them</p></li>
<li><p>Is there a way to perform over and under sampling without creating these new values?</p></li>
</ol>