2016-06-21 6 views
0

私はGraphlabからKMEAMSを実行するためのデータをprepartingだ、と次のようなエラーに実行しています:ここでSFrame関数kmeans - INT、フロートに隠密、辞書です

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. 

は、各列の現在のデータ型です:

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

もし私がstrからintにデータ型を得ることができたら、それはうまくいくはずです。しかし、SFramesを使うのは、標準的なPythonライブラリよりも難解です。そこに到着する助けに感謝します。

答えて

0

kmeansモデルでは、辞書形式の形式のフィーチャをリスト形式では使用できません。辞書はあなたのSKUの順序を失うので、これはあなたが今持っているものとは少し異なりますが、モデルの質に関しては実際にはより意味があると思われます。これらのキー機能は、テキスト分析ツールキットのcount_wordsです。

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] 
関連する問題