Понимание "оценки", возвращаемого scikit-learn KMeans
Я применил кластеризацию в наборе текстовых документов (около 100). Я преобразовал их в Tfidf
векторы с помощью TfIdfVectorizer
и поставил векторы в качестве входных данных в scikitlearn.cluster.KMeans(n_clusters=2, init='k-means++', max_iter=100, n_init=10)
. Теперь, когда я
model.fit()
print model.score()
на моих векторах, я получаю очень небольшое значение, если все текстовые документы очень похожи, и я получаю очень большое отрицательное значение, если документы очень разные.
Он служит моей основной цели - найти, какой набор документов похож, но может ли кто-нибудь помочь мне понять, что именно означает это значение model.score()
для соответствия? Как я могу использовать это значение для оправдания моих результатов?
Ответы
Ответ 1
В документации говорится:
Returns:
score : float
Opposite of the value of X on the K-means objective.
Чтобы понять, что это значит, вам нужно взглянуть на алгоритм k-средних. То, что k-означает, по существу, - это найти кластерные центры, которые минимизируют сумму расстояний между образцами данных и связанными с ними кластерными центрами.
Это двухэтапный процесс, когда (a) каждый образец данных связан с его ближайшим центром кластера, (b) скорректированы центры кластеров в центре всех связанных с ними образцов. Эти шаги повторяются до тех пор, пока не будет выполнен критерий (максимальное изменение итераций/мин между двумя последними итерациями).
Как вы можете видеть, между образцами данных и связанными с ними кластерными центрами остается расстояние, и целью нашей минимизации является расстояние (сумма всех расстояний).
Естественно, вы получаете большие расстояния, если у вас большое разнообразие в образцах данных, если количество выборок данных значительно выше, чем количество кластеров, что в вашем случае всего два. Напротив, если все образцы данных были одинаковыми, вы всегда получали бы нулевое расстояние, независимо от количества кластеров.
Из документации я бы ожидал, что все значения будут отрицательными. Если вы наблюдаете как отрицательные, так и положительные значения, возможно, это больше, чем оценка.
Интересно, как вы получили идею кластеризации в два кластера, хотя.
Ответ 2
ypnos прав, вы можете найти некоторые детали здесь: https://github.com/scikit-learn/scikit-learn/blob/51a765a/sklearn/cluster/k_means_.py#L893
inertia : float
Sum of distances of samples to their closest cluster center.
"""
Ответ 3
Слово, выбранное в документации, немного сбивает с толку. Он говорит: "Напротив значения Х на цели К-средних". Это означает отрицание цели K-средних.
Цель K-средних
Цель в K-средних состоит в том, чтобы уменьшить сумму квадратов расстояний точек от их соответствующих центроидов кластера. У этого есть другие имена как функция ошибки J-Squared, J-оценка или сумма квадратов в пределах кластера. Это значение говорит о внутренней когерентности кластеров. (Чем меньше, тем лучше)
Целевая функция может быть непосредственно получена из следующего метода.
model.inertia_