Как мне автоматизировать количество кластеров? [Дубликат]

В моем случае ничего из этого не работает, поэтому я должен проверить исходный код uwsgi + django и передать статический параметр в nginx и посмотреть, почему / как, а ниже - то, что я нашел.

Env info: версия python: 2.7.5 версия Django: (1, 6, 6, 'final', 0) версия nginx: nginx/1.6.0 uwsgi: 2.0.7

Информация о настройке Env: nginx как обратный прокси-сервер, прослушивающий порт 80 uwsgi как upstream unix socket, будет отвечать на запрос в конце концов

Информация о конфигурации Django:

USE_X_FORWARDED_HOST = True # with or without this line does not matter

nginx config:

uwsgi_param      X-Real-IP              $remote_addr;
// uwsgi_param   X-Forwarded-For        $proxy_add_x_forwarded_for;
// uwsgi_param   HTTP_X_FORWARDED_FOR   $proxy_add_x_forwarded_for;

// hardcode for testing
uwsgi_param      X-Forwarded-For        "10.10.10.10";
uwsgi_param      HTTP_X_FORWARDED_FOR   "20.20.20.20";

получает все параметры в django app:

X-Forwarded-For :       10.10.10.10
HTTP_X_FORWARDED_FOR :  20.20.20.20

Заключение:

Итак, вы должны указать точно такое же имя поля / параметра в nginx и использовать request.META[field/param] в приложении django.

И теперь вы можете решить, следует ли добавлять промежуточное программное обеспечение (перехватчик) или просто анализировать HTTP_X_FORWARDED_FOR в определенных представлениях.

0
задан Ari Victor 1 March 2019 в 01:01
поделиться

1 ответ

Это скользкое поле, потому что очень трудно измерить, насколько «хорошо» работает ваш алгоритм кластеризации без каких-либо наземных меток истинности. Для того, чтобы сделать автоматический выбор, вам нужно иметь метрики, которые будут сравнивать, как KMeans работает для различных значений n_clusters.

Популярным выбором является оценка силуэта. Вы можете найти более подробную информацию об этом здесь . Вот документация scikit-learn:

Коэффициент силуэта рассчитывается с использованием среднего расстояния внутри кластера (a) и среднего расстояния до ближайшего кластера (b) для каждой выборки. Коэффициент силуэта для образца равен (b - a) / max (a, b). Для пояснения, b - это расстояние между образцом и ближайшим кластером, частью которого он не является. Обратите внимание, что коэффициент силуэта определяется только в том случае, если количество меток равно 2 < = n_labels < = n_samples - 1.

В результате вы можете вычислить только оценку силуэта для n_clusters >= 2 (что, к сожалению, может быть ограничением для вас, учитывая описание вашей проблемы).

Вот как вы будете использовать его в фиктивном наборе данных (тогда вы можете адаптировать его к своему коду, просто для того, чтобы получить воспроизводимый пример):

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

iris = load_iris()
X = iris.data

sil_score_max = -1 #this is the minimum possible score

for n_clusters in range(2,10):
  model = KMeans(n_clusters = n_clusters, init='k-means++', max_iter=100, n_init=1)
  labels = model.fit_predict(X)
  sil_score = silhouette_score(X, labels)
  print("The average silhouette score for %i clusters is %0.2f" %(n_clusters,sil_score))
  if sil_score > sil_score_max:
    sil_score_max = sil_score
    best_n_clusters = n_clusters

Это вернет: [1113 ]

The average silhouette score for 2 clusters is 0.68
The average silhouette score for 3 clusters is 0.55
The average silhouette score for 4 clusters is 0.50
The average silhouette score for 5 clusters is 0.49
The average silhouette score for 6 clusters is 0.36
The average silhouette score for 7 clusters is 0.46
The average silhouette score for 8 clusters is 0.34
The average silhouette score for 9 clusters is 0.31

И, таким образом, у вас будет best_n_clusters = 2 (примечание: на самом деле у Ирис есть три класса ...)

0
ответ дан MaximeKan 1 March 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: