【问题标题】:Grpahlab SFrames: Error in using SFrames with the datasetGrpahlab SFrames:将 SFrames 与数据集一起使用时出错
【发布时间】:2016-03-30 00:35:02
【问题描述】:

在 Graphlab 中, 我正在处理一小组健身数据,以使用可以提供推荐的推荐功能。数据集有用户 ID 的列,但没有项目 ID,而是按列排列的不同项目以及对应于每个用户 ID 的行中的各自评级。为了使用任何 graphlab 推荐方法,我需要有用户 ID 和项目 ID。这是我所做的:

v = graphlab.SFrame.read_csv('Data.csv')   
userId = v["user_id"]
itemId = v["x","y","z","x1","y1","z1"] //x,y,z,x1,y1,z1 are activities that are actually the columns in Data and contains corresponding ratings given by user

sf= graphlab.SFrame({'UserId':userId,'ItemId':itemId})
print sf.head(5)

基本上,我从 Data 中提取了 user_id col,并尝试使用从相同数据中提取的 x、y、z 等列为 ItemId 创建一个列,以便仅使用这 2 个列创建另一个 sframe。此代码按预期生成具有 2 列的表格格式 sframe,但排列顺序与我在 SFrame 中传递参数的顺序不同。因此,输出将 ItemId 作为第一列,然后是 UserId。即使我尝试更改在 sframe 中传递这 2 个的顺序,它仍然给出相同的输出。有谁知道原因? 这会在使用任何推荐方法时进一步产生问题,因为它会给出错误:列名 user_id 不存在。

【问题讨论】:

    标签: python graphlab


    【解决方案1】:

    列排序的原因是因为您将 Python 字典传递给 SFrame 构造函数。 Python 中的字典不会按照指定的顺序保存键;他们有自己的秩序。如果您更喜欢“UserId”,可以拨打sf.swap_columns('UserId','ItemId')

    但列的顺序不会影响推荐方法。如果您没有完全命名为 user_id 的列并且没有指定 user_id 列的名称,则会出现 Column name 'user_id' does not exist 错误。在你的情况下,你会想做:graphlab.recommender.create(sf, user_id='UserId', item_id='ItemId')

    另外,您可能想查看stack 方法,它可以帮助您将数据转换为推荐方法所期望的形式。您当前的 SFrame sf 我认为将有一列字典,其中项目 id 是键,评级是值。我相信这在这种情况下会起作用:

    sf.stack('ItemId', new_column_name=['ItemId','Rating'])
    

    【讨论】:

    • 感谢 Evan,使用 stack() 有助于使用其他推荐方法。代码执行得很好,只是它没有为我以这种方式使用的推荐函数提供任何结果: result=graphlab.recommender.item_similarity_recommender.create(m,user_id='UserId', item_id='ItemId',target='Rating ',similarity_type='cosine') recs=result.recommend() 打印记录
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多