两列基于另一列的匹配程度
How much two columns match based on another column
如果我的数据框是这样的:
user item real value predict
u1 i1 0.0 0.31 0.0
u2 i1 1.0 0.50 0.0
u1 i2 0.0 0.27 0.0
u3 i2 0.0 0.91 0.0
u1 i3 1.0 0.71 1.0
u3 i3 0.0 0.80 1.0
如何确定每个用户的 predict
与 real
相比的准确性?例如:
u1 1.00
u2 0.00
u3 0.50
我正在考虑按用户分组,将数据帧拆分为多个用户相同的列,将这两列转换为列表,然后查看它们匹配的程度。但是我有成千上万的用户。有没有更好的方法呢?
如果您使用 sklearn
,您可以轻松使用 mean_squared_error
from sklearn.metrics import mean_squared_error
mse = df.groupby('user').apply(lambda x: mean_squared_error(x['real'], x['predict']))
acc = 1 - mse
print(acc)
# Output:
user
u1 1.0
u2 0.0
u3 0.5
dtype: float64
注意:如果您不能或不想使用sklearn
,请改用:
mean_square_error = lambda r, p: (np.linalg.norm(r-p)**2)/len(r)
这个怎么样?因为这是一个分类问题,所以可以。
创建另一列 Diff
如果 real
和 predict
匹配则为 True,否则为 False;然后 user
上的 groupby
并找到每个 user
:
的 Diff
的平均值
out = df.assign(Diff=df['real']==df['predict']).groupby('user')['Diff'].mean()
输出:
user
u1 1.0
u2 0.0
u3 0.5
Name: Diff, dtype: float64
如果我的数据框是这样的:
user item real value predict
u1 i1 0.0 0.31 0.0
u2 i1 1.0 0.50 0.0
u1 i2 0.0 0.27 0.0
u3 i2 0.0 0.91 0.0
u1 i3 1.0 0.71 1.0
u3 i3 0.0 0.80 1.0
如何确定每个用户的 predict
与 real
相比的准确性?例如:
u1 1.00
u2 0.00
u3 0.50
我正在考虑按用户分组,将数据帧拆分为多个用户相同的列,将这两列转换为列表,然后查看它们匹配的程度。但是我有成千上万的用户。有没有更好的方法呢?
如果您使用 sklearn
,您可以轻松使用 mean_squared_error
from sklearn.metrics import mean_squared_error
mse = df.groupby('user').apply(lambda x: mean_squared_error(x['real'], x['predict']))
acc = 1 - mse
print(acc)
# Output:
user
u1 1.0
u2 0.0
u3 0.5
dtype: float64
注意:如果您不能或不想使用sklearn
,请改用:
mean_square_error = lambda r, p: (np.linalg.norm(r-p)**2)/len(r)
这个怎么样?因为这是一个分类问题,所以可以。
创建另一列 Diff
如果 real
和 predict
匹配则为 True,否则为 False;然后 user
上的 groupby
并找到每个 user
:
Diff
的平均值
out = df.assign(Diff=df['real']==df['predict']).groupby('user')['Diff'].mean()
输出:
user
u1 1.0
u2 0.0
u3 0.5
Name: Diff, dtype: float64