2017-06-28 5 views
4

私はScikit-learnで最も近い隣人を見つけるためにユーザー定義メトリックでラップされたスピアマン相関を使用しようとしています。何らかの理由で、トレーニングデータの列数が5、k = 5の場合にのみ機能します。他の組み合わせ(例えば、列数= 8、k = 6)では、次のエラーが発生します。 (列車とテストセットは4列、k = 4)。私がピアソンを相関関係に使うと、それは完璧に機能します。なぜこれが起こるのか、それをどうやって修正するのか誰も知っていますか?ありがとうございました。パターンマッチングのためにSklearn KNNとスピアマン相関を使用する

from scipy.stats import spearmanr 
def spearmancorr(x,y): 
    rho, pval = spearmanr(x,y, axis=0) 
    return rho * (-1) 

from sklearn.neighbors import NearestNeighbors 
nbrs = NearestNeighbors(n_neighbors=4, algorithm='ball_tree', metric=spearmancorr) 
nbrs.fit(train) 
dist, ind = nbrs.kneighbors(test) 

SystemError        Traceback (most recent call last) 
<ipython-input-11-f04b508b1263> in <module>() 
     5 for i in range(1): 
     6  nbrs = NearestNeighbors(n_neighbors=4, algorithm='ball_tree', metric=spearmancorr) 
----> 7  nbrs.fit(train) 
     8  dist, ind = nbrs.kneighbors(test) 
     9  print "for: " + funcs[i] 

C:\Users\AppData\Local\Enthought\Canopy\User\lib\site-packages\sklearn\neighbors\base.pyc in fit(self, X, y) 
    797    or [n_samples, n_samples] if metric='precomputed'. 
    798   """ 
--> 799   return self._fit(X) 

C:\Users\AppData\Local\Enthought\Canopy\User\lib\site-packages\sklearn\neighbors\base.pyc in _fit(self, X) 
    238    self._tree = BallTree(X, self.leaf_size, 
    239         metric=self.effective_metric_, 
--> 240         **self.effective_metric_params_) 
    241   elif self._fit_method == 'kd_tree': 
    242    self._tree = KDTree(X, self.leaf_size, 

SystemError: NULL result without error in PyObject_Call 
+0

使用しているsklearnのバージョンはどれですか?私はverでこのようなエラーは発生しません。 0.18.1 – frankyjuang

答えて

0

sklearn 0.14.1より前にエラーが発生したようです。最新バージョンまたは最新の0.18.1にアップグレードしてください。

問題#2878#3032を参照してください。

+0

私はscikit-learn 0.18.1-4の最新バージョンを使用していますが、まだ動作していません – user8226519

関連する問題