Issue 1:
Description

sklearn.neighbors.NearestNeighbor throws exceptions at me when I use metric='seuclidean'. This seems to come down to a problem within BallTree, as it works normally if I set algorithm='brute'.

Steps/Code to Reproduce

import numpy as np
from sklearn.neighbors import NearestNeighbors

X = np.random.randn(5000, 4)
KNN = NearestNeighbors(metric='seuclidean', algorithm='auto')
KNN.fit(X)

Expected Results

It should work.

Actual Results

---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-11-998055d5726c> in <module>()
----> 1 KNN.fit(X)

/home/bmcfee/miniconda/envs/py35/lib/python3.5/site-packages/sklearn/neighbors/base.py in fit(self, X, y)
814 or [n_samples, n_samples] if metric='precomputed'.
815 """
--> 816 return self._fit(X)

/home/bmcfee/miniconda/envs/py35/lib/python3.5/site-packages/sklearn/neighbors/base.py in _fit(self, X)
256 self._tree = BallTree(X, self.leaf_size,
257 metric=self.effective_metric_,
--> 258 **self.effective_metric_params_)
259 elif self._fit_method == 'kd_tree':
260 self._tree = KDTree(X, self.leaf_size,

sklearn/neighbors/binary_tree.pxi in sklearn.neighbors.ball_tree.BinaryTree.__init__ (sklearn/neighbors/ball_tree.c:8381)()

sklearn/neighbors/dist_metrics.pyx in sklearn.neighbors.dist_metrics.DistanceMetric.get_metric (sklearn/neighbors/dist_metrics.c:4330)()

sklearn/neighbors/dist_metrics.pyx in sklearn.neighbors.dist_metrics.SEuclideanDistance.__init__ (sklearn/neighbors/dist_metrics.c:5888)()

TypeError: __init__() takes exactly 1 positional argument (0 given)

Versions

Linux-3.16.0-44-generic-x86_64-with-debian-jessie-sid
Python 3.5.1 |Continuum Analytics, Inc.| (default, Dec 7 2015, 11:16:01)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
NumPy 1.10.2
SciPy 0.16.1
Scikit-Learn 0.17

Issue 2:
Here is a quick example:

dist = 'seuclidean'
D = pairwise_distances(X[:400,:], metric = dist )
D = np.nan_to_num(D)
eps = np.percentile(D, 0.6)
print eps
dscan = DBSCAN(eps=eps, min_samples=5, metric = dist)
y = dscan.fit_predict(X)

File "cluster.py", line 91, in cluster
y = dscan.fit_predict(X)
File "/usr/local/lib/python2.7/dist-packages/sklearn/base.py", line 345, in fit_predict
self.fit(X)
File "/usr/local/lib/python2.7/dist-packages/sklearn/cluster/dbscan_.py", line 248, in fit
clust = dbscan(X, **self.get_params())
File "/usr/local/lib/python2.7/dist-packages/sklearn/cluster/dbscan_.py", line 101, in dbscan
neighbors_model.fit(X)
File "/usr/local/lib/python2.7/dist-packages/sklearn/neighbors/base.py", line 661, in fit
return self._fit(X)
File "/usr/local/lib/python2.7/dist-packages/sklearn/neighbors/base.py", line 234, in _fit
**self.effective_metric_params_)
File "binary_tree.pxi", line 1062, in sklearn.neighbors.ball_tree.BinaryTree.__init__ (sklearn/neighbors/ball_tree.c:8037)
File "dist_metrics.pyx", line 280, in sklearn.neighbors.dist_metrics.DistanceMetric.get_metric (sklearn/neighbors/dist_metrics.c:4066)
File "dist_metrics.pyx", line 435, in sklearn.neighbors.dist_metrics.SEuclideanDistance.__init__ (sklearn/neighbors/dist_metrics.c:5414)
TypeError: __init__() takes exactly 1 positional argument (0 given)

If I calculate distance matrix with it, the everything is just fine, but I want to use kd_tree or something to speed things up.