【问题标题】:How to load the datset using scikits如何使用 scikit 加载数据集
【发布时间】:2015-11-10 16:25:55
【问题描述】:

我正在研究推荐系统,我正在尝试使用 scikits.crab 包来使用推荐系统中的基本算法。 但是,在每个教程中,在示例中,他们只使用了 scikits 自己的数据集,我没有找到任何关于如何加载外部数据集的信息(例如从我的计算机) 这是您在每个 scikits 教程中看到的内容。螃蟹:

from scikits.crab import datsets
movies=datsets.load_sample_movies()
model=MatrixPreferenceDataModel(movies.data)

但是,正如我所说,我需要从我的机器上加载一个可供 scikits 方法使用的数据集

【问题讨论】:

    标签: python scikit-learn scikits


    【解决方案1】:

    Here是螃蟹教程的相关部分。

    在您上面的示例中,您只为模型使用了 movies.data 字段。 movies.data 如下所示:

    >>> print movies.data
    {1: {1: 3.0, 2: 4.0, 3: 3.5, 4: 5.0, 5: 3.0},
     2: {1: 3.0, 2: 4.0, 3: 2.0, 4: 3.0, 5: 3.0, 6: 2.0},
     3: {2: 3.5, 3: 2.5, 4: 4.0, 5: 4.5, 6: 3.0},
     4: {1: 2.5, 2: 3.5, 3: 2.5, 4: 3.5, 5: 3.0, 6: 3.0},
     5: {2: 4.5, 3: 1.0, 4: 4.0},
     6: {1: 3.0, 2: 3.5, 3: 3.5, 4: 5.0, 5: 3.0, 6: 1.5},
     7: {1: 2.5, 2: 3.0, 4: 3.5, 5: 4.0}}
    

    这只是一个字典,其中键是用户(这里用 1、2、3、4、5、6 和 7 表示),值是另一个字典,其中键是电影 ID,值是是评级。所以你只需要构造一个嵌套字典。

    从源代码中,作者使用以下代码从 .csv 文件加载数据:

    def load_sample_movies():
    
        base_dir = join(dirname(__file__), 'data/')
    
        #Read data
        data_m = np.loadtxt(base_dir + 'sample_movies.csv',
                delimiter=';', dtype=str)
        item_ids = []
        user_ids = []
        data_songs = {}
        for user_id, item_id, rating in data_m:
            if user_id not in user_ids:
                user_ids.append(user_id)
            if item_id not in item_ids:
                item_ids.append(item_id)
            u_ix = user_ids.index(user_id) + 1
            i_ix = item_ids.index(item_id) + 1
            data_songs.setdefault(u_ix, {})
            data_songs[u_ix][i_ix] = float(rating)
    
        data_t = []
        for no, item_id in enumerate(item_ids):
            data_t.append((no + 1, item_id))
        data_titles = dict(data_t)
    
        data_u = []
        for no, user_id in enumerate(user_ids):
            data_u.append((no + 1, user_id))
        data_users = dict(data_u)
    
        fdescr = open(dirname(__file__) + '/descr/sample_movies.rst')
    
        return Bunch(data=data_songs, item_ids=data_titles,
                     user_ids=data_users, DESCR=fdescr.read())
    

    而这个数据所在的.csv文件格式为:

    Jack Matthews;Lady in the Water;3.0
    Jack Matthews;Snakes on a Planet;4.0
    Jack Matthews;You, Me and Dupree;3.5
    Jack Matthews;Superman Returns;5.0
    Jack Matthews;The Night Listener;3.0
    Mick LaSalle;Lady in the Water;3.0
    Mick LaSalle;Snakes on a Planet;4.0
    Mick LaSalle;Just My Luck;2.0
    Mick LaSalle;Superman Returns;3.0
    Mick LaSalle;You, Me and Dupree;2.0
    Mick LaSalle;The Night Listener;3.0
    

    因此,如果您想制作自己的数据集,您有两种选择。要么自己将其格式化为推荐者需要的字典格式,要么根据他们的导入编写一个方法来为你格式化。

    该项目似乎没有我能找到的通用“从 csv 导入”方法 - 我可能只是错过了它,只是浏览了它。

    幸运的是,由于推荐者似乎只需要字典,因此您不需要额外的描述文件以及所有这些,只需正确格式化您的数据似乎就足够了。

    【讨论】:

    • 谢谢马特。你能告诉我 sample_movies.rst 到底是什么吗?我试图通过一些修改来运行这段代码,因为它在修改之前无法编译。但是,当我运行代码时,它找不到 sample_movies.rst 文件。
    • 这是一个元数据文件。它只是列出了该数据集是由 Toby Segaran Notes 的名为 Programming the Collective >
    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 2017-06-15
    • 2013-04-22
    • 1970-01-01
    • 2013-04-21
    • 2019-11-20
    • 1970-01-01
    • 2022-08-03
    相关资源
    最近更新 更多