2016-12-18 98 views
0

從Python我使用SMOTE算法不平衡學習包:SMOTE算法初始條件

from imblearn.over_sampling import SMOTE 
sm = SMOTE(kind='regular', n_neighbors = 4) 
: 
X_train_resampled, y_train_resampled = sm.fit_sample(X_train, y_train) 

我已經明確設置n_neighbors = 4。但是,我從上面的代碼中出現以下錯誤:


ValueError        Traceback (most recent call last) 
<ipython-input-2-9e9116d71706> in <module>() 
    33 
    34  #try: 
---> 35  X_train_resampled, y_train_resampled = sm.fit_sample(X_train, y_train) 
    36  #except: 
    37  #continue 

/usr/local/lib/python3.4/dist-packages/imblearn/base.py in fit_sample(self, X, y) 
    176   """ 
    177 
--> 178   return self.fit(X, y).sample(X, y) 
    179 
    180  def _validate_ratio(self): 

/usr/local/lib/python3.4/dist-packages/imblearn/base.py in sample(self, X, y) 
    153    self._validate_ratio() 
    154 
--> 155   return self._sample(X, y) 
    156 
    157  def fit_sample(self, X, y): 

/usr/local/lib/python3.4/dist-packages/imblearn/over_sampling/smote.py in _sample(self, X, y) 
    287    nns = self.nearest_neighbour.kneighbors(
    288     X_min, 
--> 289     return_distance=False)[:, 1:] 
    290 
    291    self.logger.debug('Create synthetic samples ...') 

/usr/local/lib/python3.4/dist-packages/sklearn/neighbors/base.py in kneighbors(self, X, n_neighbors, return_distance) 
    341     "Expected n_neighbors <= n_samples, " 
    342     " but n_samples = %d, n_neighbors = %d" % 
--> 343     (train_size, n_neighbors) 
    344   ) 
    345   n_samples, _ = X.shape 

ValueError: Expected n_neighbors <= n_samples, but n_samples = 5, n_neighbors = 6 

任何想法,爲什麼我的n_neighbors = 4設置不起作用?

+0

錯誤消息說'n_neighbors = 6'。 –

+0

我明白,因爲它說6,所以我把它改爲4(最初沒有設置任何值)。爲什麼手動設置爲4後仍然是6?謝謝 – Edamame

+0

也許你沒有重新運行細胞? –

回答

0

正確的參數是:

k_neighbors:int或對象,可選的(默認= 5)

如果INT,最近的鄰居來用於構建合成的樣品的數目。如果是對象,則從sklearn.neighbors.base.KNeighborsMixin繼承的估計器將用於查找k_neighbors。

你通知N_NEIGHBORSñ,但正確的是k_neighbors,其中k!

該消息是因爲是默認

閱讀文檔here