2016-06-21 2 views
0

Je preparting des données pour exécuter KMEAMS de Graphlab, et je suis en cours d'exécution dans l'erreur suivante:sframe Kmeans - Covert à Int, Float, Dict

tmp = data.select_columns(['a.item_id']) 
tmp['sku'] = tmp['a.item_id'].apply(lambda x: x.split(',')) 
tmp = tmp.unpack('sku') 

kmeans_model = gl.kmeans.create(tmp, num_clusters=K) 

Feature 'sku.0' excluded because of its type. Kmeans features must be int, float, dict, or array.array type. 
Feature 'sku.1' excluded because of its type. Kmeans features must be int, float, dict, or array.array type. 

Voici les types de données actuelles de chaque colonne:

a.item_id str 
sku.0 str 
sku.1 str 

Si je peux obtenir le type de données de str à int je pense que cela devrait fonctionner. Cependant, utiliser SFrames est plus compliqué que les bibliothèques python standard. Toute aide pour y arriver est appréciée.

Répondre

0

Le modèle kmeans autorise les fonctionnalités du formulaire dictionnaire, mais pas sous forme de liste. C'est légèrement différent de ce que vous avez maintenant, parce que le dictionnaire perd l'ordre de vos SKU, mais en termes de qualité de modèle, je pense que cela a plus de sens. Leur fonction clé est count_words, dans la boîte à outils d'analyse de texte.

https://dato.com/products/create/docs/generated/graphlab.text_analytics.count_words.html

import graphlab as gl 
sf = gl.SFrame({'item_id': ['abc,xyz,cat', 'rst', 'abc,dog']}) 
sf['sku_count'] = gl.text_analytics.count_words(sf['item_id'], delimiters=[',']) 

model = gl.kmeans.create(sf, num_clusters=2, features=['sku_count']) 
print model.cluster_id 

+--------+------------+----------------+ 
| row_id | cluster_id | distance | 
+--------+------------+----------------+ 
| 0 |  1  | 0.866025388241 | 
| 1 |  0  |  0.0  | 
| 2 |  1  | 0.866025388241 | 
+--------+------------+----------------+ 
[3 rows x 3 columns]