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