ValueError: установка элемента массива с последовательностью.на DBSCAN, нет отсутствующей размерности - PullRequest
0 голосов
/ 24 сентября 2018

Я использую DBSCAN.fit () для набора данных, который на самом деле представляет собой один столбец pandas с векторизованными словами, все с тем же числом измерений 30. Это выглядит так:

df['column']
2       [-0.003417029886667123, -0.0016105849274073794...
3       [-0.24330333298729837, 0.48110865717035506, 0....
4       [-0.0017016271879120766, 0.01266130386650884, ...
5       [0.002174357210089775, 0.004633570752676618, 0...
6       [0.008567001972125537, 0.0012244984475515731, ...

matrix = df['column'].as_matrix() 
#DBSCAN inplementation
db = DBSCAN(eps=0.06, min_samples=1)
db.fit(matrix)
clusters = db.labels_.tolist()

Однако,после подбора данных я получаю следующую трассировку:

----> 4 db.fit(matrix)
      5 clusters = db.labels_.tolist()

/opt/conda/lib/python3.6/site-packages/sklearn/cluster/dbscan_.py in fit(self, X, y, sample_weight)
    280 
    281         """
--> 282         X = check_array(X, accept_sparse='csr')
    283         clust = dbscan(X, sample_weight=sample_weight,
    284                        **self.get_params())

/opt/conda/lib/python3.6/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    431                                       force_all_finite)
    432     else:
--> 433         array = np.array(array, dtype=dtype, order=order, copy=copy)
    434 
    435         if ensure_2d:

ValueError: setting an array element with a sequence.

Я читал, что эта ошибка связана с тем, что один или несколько массивов не совпадают с len других.Тем не менее, в моем случае это не проблема, пожалуйста, обратите внимание:

set(np.array([m]).shape[0] for m in matrix)
>> {1}

set(np.array([m]).shape[1] for m in matrix)
>> {30}

Как видите, все массивы имеют одинаковый размер.Поэтому в чем может быть проблема?

1 Ответ

0 голосов
/ 24 сентября 2018

То, как вы преобразуете свою функцию в массив, преобразует ее не в массив, а в массив списков, поэтому вы видите эту ошибку. depicted in below image

Что вы можете сделать, так это преобразовать внутренние списки в массивы just like this

...