В моем случае ничего из этого не работает, поэтому я должен проверить исходный код 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
в определенных представлениях.
Это скользкое поле, потому что очень трудно измерить, насколько «хорошо» работает ваш алгоритм кластеризации без каких-либо наземных меток истинности. Для того, чтобы сделать автоматический выбор, вам нужно иметь метрики, которые будут сравнивать, как KMeans
работает для различных значений n_clusters
.
Популярным выбором является оценка силуэта. Вы можете найти более подробную информацию об этом здесь . Вот документация scikit-learn
:
Коэффициент силуэта рассчитывается с использованием среднего расстояния внутри кластера (a) и среднего расстояния до ближайшего кластера (b) для каждой выборки. Коэффициент силуэта для образца равен (b - a) / max (a, b). Для пояснения, b - это расстояние между образцом и ближайшим кластером, частью которого он не является. Обратите внимание, что коэффициент силуэта определяется только в том случае, если количество меток равно 2 < = n_labels < = n_samples - 1.
blockquote>В результате вы можете вычислить только оценку силуэта для
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
(примечание: на самом деле у Ирис есть три класса ...)