协同过滤CF算法之入门
数据规整
首先将评分数据从 ratings.dat 中读出到一个 DataFrame 里:
>>> data
=
ratings.pivot(index
=
'user_id'
,columns
=
'movie_id'
,values
=
'rating'
)
>>> data[:
5
]
movie_id
1
2
3
4
5
6
user_id
1
5
NaN NaN NaN NaN NaN ...
2
NaN NaN NaN NaN NaN NaN ...
3
NaN NaN NaN NaN NaN NaN ...
4
NaN NaN NaN NaN NaN NaN ...
5
NaN NaN NaN NaN NaN
2
...
>>> check_size
=
1000
>>> check
=
{}
>>> check_data
=
data.copy()
#复制一份 data 用于检验,以免篡改原数据
>>> check_data
=
check_data.ix[check_data.count(axis
=
1
)>
200
]
#滤除评价数小于200的用户
>>>
for
user
in
np.random.permutation(check_data.index):
movie
=
np.random.permutation(check_data.ix[user].dropna().index)[
0
]
check[(user,movie)]
=
check_data.ix[user,movie]
check_data.ix[user,movie]
=
np.nan
check_size
-
=
1
if
not
check_size:
break
>>> corr
=
check_data.T.corr(min_periods
=
200
)
>>> corr_clean
=
corr.dropna(how
=
'all'
)
>>> corr_clean
=
corr_clean.dropna(axis
=
1
,how
=
'all'
)
#删除全空的行和列
>>> check_ser
=
Series(check)
#这里是被提取出来的 1000 个真实评分
>>> check_ser[:
5
]
(
15
,
593
)
4
(
23
,
555
)
3
(
33
,
3363
)
4
(
36
,
2355
)
5
(
53
,
3605
)
4
dtype: float64
参考:
每天一小步,人生一大步!Good luck~