如何使用 scikit 加载数据集
How to load the datset using scikits
我正在研究推荐系统,我正在尝试使用 scikits.crab 包来使用推荐系统中的基本算法。
然而,在每个教程中,在示例中,他们只使用 scikits 自己的数据集,我没有找到任何关于如何加载外部数据集的信息(例如从我的电脑)
这就是您在每个 scikit 教程中看到的内容。螃蟹:
from scikits.crab import datsets
movies=datsets.load_sample_movies()
model=MatrixPreferenceDataModel(movies.data)
但是,正如我所说,我需要从我的机器上加载一个可供 scikits 方法使用的数据集
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
因此,如果您想制作自己的数据集,您有两种选择。要么自己将其格式化为推荐系统需要的字典格式,要么编写一个基于他们的导入的方法为您格式化。
该项目似乎没有我能找到的通用 "import from csv" 方法 - 我可能只是想念它,只是浏览了它。
幸运的是,由于推荐系统似乎只需要字典,您不需要额外的描述文件等等,只需正确格式化您的数据似乎就足够了。
我正在研究推荐系统,我正在尝试使用 scikits.crab 包来使用推荐系统中的基本算法。 然而,在每个教程中,在示例中,他们只使用 scikits 自己的数据集,我没有找到任何关于如何加载外部数据集的信息(例如从我的电脑) 这就是您在每个 scikit 教程中看到的内容。螃蟹:
from scikits.crab import datsets
movies=datsets.load_sample_movies()
model=MatrixPreferenceDataModel(movies.data)
但是,正如我所说,我需要从我的机器上加载一个可供 scikits 方法使用的数据集
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
因此,如果您想制作自己的数据集,您有两种选择。要么自己将其格式化为推荐系统需要的字典格式,要么编写一个基于他们的导入的方法为您格式化。
该项目似乎没有我能找到的通用 "import from csv" 方法 - 我可能只是想念它,只是浏览了它。
幸运的是,由于推荐系统似乎只需要字典,您不需要额外的描述文件等等,只需正确格式化您的数据似乎就足够了。