<jupyter_start><jupyter_text>Vemos que el dataset tiene 20 clusters naturales (20 paginas de noticias distintas)<jupyter_code>from sklearn.cluster import MiniBatchKMeans
estimador = MiniBatchKMeans(n_clusters=20)
estimador.fit(noticias)
etiquetas_pred = estimador.labels_
etiquetas_pred<jupyter_output><empty_output><jupyter_text>Medidas de evaluación externaSon aquellas en las que las etiquetas de clusters son conocidas de antemano.<jupyter_code>clases = data.target
from sklearn.metrics import homogeneity_completeness_v_measure, adjusted_rand_score<jupyter_output><empty_output><jupyter_text>La función [homogeneity_completeness_v_measure](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.homogeneity_completeness_v_measure.htmlsklearn.metrics.homogeneity_completeness_v_measure) nos devuelve una tupla con la homogeneidad, la completación y la medida v<jupyter_code>homogeneity_completeness_v_measure(clases, etiquetas_pred)<jupyter_output><empty_output><jupyter_text>Vemos que estos clusters tienen mas completación que homogeneidad (es decir, los clusters son menos homogéneos que la homogeneidad de la distribución de las clases en clusters.El v-measure tiene un rango de (0, 1) con lo cual estos clusters no son muy buenos. Un problema que tiene el criterio de homogeneidad y completación es que no son invariantes del orden de las clases.<jupyter_code>homogeneity_completeness_v_measure(etiquetas_pred, clases)<jupyter_output><empty_output><jupyter_text>Para datasets de menos de 1000 observaciones o para un número de clusters mayor que 10, se recomienda usar el Indice de Rand ajustado, [adjusted_rand_score](http://scikit-learn.org/stable/modules/clustering.htmladjusted-rand-index).<jupyter_code>adjusted_rand_score(clases, etiquetas_pred)
adjusted_rand_score(etiquetas_pred, clases)<jupyter_output><empty_output><jupyter_text>La métrica ARI tiene un rango de (-1,1) asi que pese a que este grupo de clusters no es el peor, no es muy bueno Podemos usar medidas de evaluación externa para hacer validación cruzada como haríamos con cualquier problema de regresión/clasificación.Métricas definidas en `cross_val_score` incluyen:- `adjusted_rand_score`  - `completeness_score` 	 - `homogeneity_score` 	 - `v_measure_score`<jupyter_code>from sklearn.model_selection import cross_val_score
resultados = cross_val_score(X=noticias, y=clases, estimator=MiniBatchKMeans(), 
                             scoring="adjusted_rand_score", cv=5)
resultados.mean()<jupyter_output><empty_output><jupyter_text>Medidas de evaluación internaDichas medidas se usan cuando las clases verdaderas no se conocen de antemano<jupyter_code>from sklearn.metrics import silhouette_score, calinski_harabasz_score<jupyter_output><empty_output><jupyter_text>Estas medidas internas se usan en `sklearn` pasando dos argumentos, el dataset de entrenamiento y las etiquetas de los clusters. En primer lugar tenemos el Coeficiente de Silueta [(silhouette_score)](http://scikit-learn.org/stable/modules/clustering.htmlsilhouette-coefficient)<jupyter_code>silhouette_score(noticias, etiquetas_pred)<jupyter_output><empty_output><jupyter_text>La métrica de calinski-Harabaz [(calinski-harabaz-score)](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.calinski_harabaz_score.htmlsklearn.metrics.calinski_harabaz_score)es otra medida de evaluación interna. Nos da una medida de la dispersión dentro de un cluster y de la separación entre clusters. La diferencia con el coeficiente de silueta es que es más eficiente de calcular.<jupyter_code>calinski_harabasz_score(noticias.todense(), etiquetas_pred)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.06822558459422283, 'fraction_numerical': 0.004676753782668501, 'mean_word_length': 7.803874092009686, 'pattern_counts': {'":': 0, '<': 37, '<?xml version=': 0, '>': 37, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '629550', 'license': 'MIT', 'n_tokens_mistral': 1244, 'n_tokens_neox': 1186, 'n_words': 297, 'path': 'Machine_Learning/Clustering/3_Evaluacion_ModelosClustering.ipynb', 'repo_name': 'mariousm/Data-Science-Course', 'size': '3635'}