VeuReu commited on
Commit
9709560
·
verified ·
1 Parent(s): c0a953e

Upload 2 files

Browse files
Files changed (2) hide show
  1. api.py +8 -5
  2. character_detection.py +7 -4
api.py CHANGED
@@ -180,8 +180,9 @@ def hierarchical_cluster_with_min_size(X, max_groups: int, min_cluster_size: int
180
  # Si hay menos muestras que el mínimo, todo es ruido
181
  return np.full(len(X), -1, dtype=int)
182
 
183
- # Linkage usando distancia euclidiana con método 'ward'
184
- Z = linkage(X, method='ward', metric='euclidean')
 
185
 
186
  # Encontrar el número óptimo de clusters usando silhouette score
187
  best_n_clusters = 2
@@ -201,9 +202,11 @@ def hierarchical_cluster_with_min_size(X, max_groups: int, min_cluster_size: int
201
  # Solo evaluar si hay al menos 2 clusters válidos
202
  if valid_clusters >= 2:
203
  try:
204
- score = silhouette_score(X, trial_labels, metric='euclidean')
205
- # Penalizar ligeramente configuraciones con muchos clusters para evitar overfitting
206
- adjusted_score = score - (n_clusters * 0.01)
 
 
207
 
208
  if adjusted_score > best_score:
209
  best_score = adjusted_score
 
180
  # Si hay menos muestras que el mínimo, todo es ruido
181
  return np.full(len(X), -1, dtype=int)
182
 
183
+ # Linkage usando average linkage (más flexible que ward, menos sensible a outliers)
184
+ # Esto ayuda a agrupar mejor la misma persona con diferentes ángulos/expresiones
185
+ Z = linkage(X, method='average', metric='cosine') # Cosine similarity para embeddings
186
 
187
  # Encontrar el número óptimo de clusters usando silhouette score
188
  best_n_clusters = 2
 
202
  # Solo evaluar si hay al menos 2 clusters válidos
203
  if valid_clusters >= 2:
204
  try:
205
+ score = silhouette_score(X, trial_labels, metric='cosine')
206
+ # Penalizar configuraciones con muchos clusters para evitar overfitting
207
+ # Penalización más fuerte para reducir duplicados
208
+ # Si siguen apareciendo duplicados, aumentar a 0.05 o 0.07
209
+ adjusted_score = score - (n_clusters * 0.03)
210
 
211
  if adjusted_score > best_score:
212
  best_score = adjusted_score
character_detection.py CHANGED
@@ -197,8 +197,9 @@ class CharacterDetector:
197
  # Si hay menos muestras que el mínimo, todo es ruido
198
  return np.full(len(X), -1, dtype=int)
199
 
200
- # Linkage usando distancia euclidiana con método 'ward'
201
- Z = linkage(X, method='ward', metric='euclidean')
 
202
 
203
  # Encontrar el número óptimo de clusters usando silhouette score
204
  from sklearn.metrics import silhouette_score
@@ -216,8 +217,10 @@ class CharacterDetector:
216
 
217
  if valid_clusters >= 2:
218
  try:
219
- score = silhouette_score(X, trial_labels, metric='euclidean')
220
- adjusted_score = score - (n_clusters * 0.01)
 
 
221
 
222
  if adjusted_score > best_score:
223
  best_score = adjusted_score
 
197
  # Si hay menos muestras que el mínimo, todo es ruido
198
  return np.full(len(X), -1, dtype=int)
199
 
200
+ # Linkage usando average linkage (más flexible que ward, menos sensible a outliers)
201
+ # Esto ayuda a agrupar mejor la misma persona con diferentes ángulos/expresiones
202
+ Z = linkage(X, method='average', metric='cosine') # Cosine similarity para embeddings
203
 
204
  # Encontrar el número óptimo de clusters usando silhouette score
205
  from sklearn.metrics import silhouette_score
 
217
 
218
  if valid_clusters >= 2:
219
  try:
220
+ score = silhouette_score(X, trial_labels, metric='cosine')
221
+ # Penalización más fuerte para reducir duplicados
222
+ # Si siguen apareciendo duplicados, aumentar a 0.05 o 0.07
223
+ adjusted_score = score - (n_clusters * 0.03)
224
 
225
  if adjusted_score > best_score:
226
  best_score = adjusted_score