【发布时间】:2021-12-06 22:21:47
【问题描述】:
我想根据以下数据集预测Decision:
userId itemId Decision
0 u1 i1 0
1 u1 i2 1
2 u2 i1 1
3 u2 i3 0
4 u2 i4 1
5 u3 i5 0
...
我做了以下,我对结果很满意:
import numpy as np
from surprise import KNNWithMeans, Dataset, Reader
from surprise.model_selection import train_test_split
reader = Reader(rating_scale=(0, 1))
data = Dataset.load_from_df(df_2[['userId', 'itenId', 'Decision']], reader)
trainset, testset = train_test_split(data, test_size=0.25)
algo = KNNWithMeans()
algo.fit(trainset)
test = algo.test(testset)
test = pd.DataFrame(test)
test.drop("details", inplace=True, axis=1)
test.columns = ['userId', 'itemId', 'actual', 'cf_predictions']
所以test 看起来像这样:
test = pd.DataFrame({'userId': ['u3', 'u3', 'u4', 'u4', 'u5', 'u5'],
'itemId': ['i5', 'i6', 'i1', 'i3', 'i4', 'i5'],
'actual': [0, 1, 1, 0, 1, 0],
'cf_predictions': [0.05, 0.66, 0.99, 0.04, 0.98, 0.06]})
我什至把它们四舍五入了!
def g(row):
if row['cf_predictions'] > 0.5:
val = 1.0
else:
val = 0.0
return val
test['cf_threshold'] = test.apply(g, axis=1)
但我想在整个数据集上重新运行模型,而不仅仅是在 testset 上。我是否“连接”trainset 和 testset?如果我输入trainset,它会给我<surprise.trainset.Trainset at 0x1593f42c550>
【问题讨论】:
标签: python pandas dataframe recommendation-engine