Астропная кластеризация точек
Метод K-средних не может иметь дело с анистропическими точками. Модель DBSCAN и Gaussian Mixture, кажется, могут работать с этим в соответствии с scikit-learn. Я пытался использовать оба подхода, но они не работают для моего набора данных.
DBSCAN
Я использовал следующий код:
db = DBSCAN(eps=0.1,min_samples=5 ).fit(X_train,Y_train)
labels_train=db.labels_
# Number of clusters in labels, ignoring noise if present.
n_clusters_ = len(set(labels_train)) - (1 if -1 in labels_train else 0)
print('Estimated number of clusters: %d' % n_clusters_)
и только 1 кластер (Расчетное количество кластеров: 1) был обнаружен, как показано здесь.
Модель гауссовой смеси
Код был следующим:
gmm = mixture.GaussianMixture(n_components=2, covariance_type='full')
gmm.fit(X_train,Y_train)
labels_train=gmm.predict(X_train)
print(gmm.bic(X_train))
Два кластера не могут быть различены, как показано здесь.
Как я могу обнаружить два кластера?
1 ответ
Прочитайте документацию.
подходит (X, y= Нет, sample_weight= Нет)
X: матрица массива или разреженной (CSR) формы (n_samples, n_features) [...]
...
y: игнорируется
Таким образом, ваш вызов игнорирует координату y.
Разве мы все не любим Python/ Sklearn, потому что он даже не предупреждает вас об этом, но молча игнорирует y
?
X
должны быть все данные, а не только координаты х.
Понятия "обучать" и "предсказывать" не имеют смысла для кластеризации. Не используйте это. Использовать только fit_predict
,