Özel bir ikili benzerlik işlevimi python'a yazdım. Bu özellik, X özelliklerinin bir matrisini (özellikler satırı içerir) verilen çıktıyı, verilen her öğeye k en yakın komşu olarak bulur ve döndürür bir benzerlik metrik:GraphLab için SFrame dizisi nasıl değiştirilir ItemSimilarityRecommend
def print_pairwise_sim_for_graphlab(X,item_ids,metric,p,knn):
N = len(X)
SI = DI.squareform(DI.pdist(X,metric,p))
q = -1
Y = np.zeros((N*knn,4))
for i in range(0, N):
for k in range(1, knn+1):
q = q + 1
Y[q,0] = item_ids[i]
Y[q,1] = item_ids[np.argsort(SI[i,:])[-k]]
Y[q,2] = np.sort(SI[i,:])[-k]
Y[q,3] = k
return (Y)
böyle diyoruz:
nn_SCD_min = print_pairwise_sim_for_graphlab(LL_features_SCD_min_np,item_ids,'minkowski',p,knn)
LL_features_SCD_min_np
array(
[[-200, -48, -127, ..., 1, 0, 1],
[-199, -38, -127, ..., 0, 0, 1],
[-202, -60, -127, ..., 1, 0, 1],
...,
[-202, -60, -127, ..., 1, 0, 1],
[-198, 56, -120, ..., 1, 0, 1],
[-202, -85, -127, ..., 1, 0, 1]])
çıktı bu Graphlab yılında
nn_SCD_min =
array([[ 8.90000000e+01, 4.71460000e+04, 1.85300000e+03,
1.00000000e+00],
[ 8.90000000e+01, 8.11470000e+04, 1.84600000e+03,
2.00000000e+00],
[ 8.90000000e+01, 2.20700000e+03, 1.84600000e+03,
3.00000000e+00],
...,
[ 8.24630000e+04, 1.00000000e+03, 1.39300000e+03,
8.00000000e+00],
[ 8.24630000e+04, 5.98930000e+04, 1.39200000e+03,
9.00000000e+00],
[ 8.24630000e+04, 1.48900000e+03, 1.35000000e+03,
1.00000000e+01]])
aşağıdaki gibi görünüyor, ben
graphlab.recommender.item_similarity_recommender.create
için girdi olarak çıkışını kullanmak istiyorum.
aşağıdaki gibi kullanabilirsiniz:
m2 = gl.item_similarity_recommender.create(ratings_5K, nearest_items=nn_SCD_min)
ve aşağıdaki hatayı alıyorum:
87 _get_metric_tracker().track(metric_name, value=1, properties=track_props, send_sys_info=False)
88
---> 89 raise ToolkitError(str(message))
ToolkitError: Option 'nearest_items' not recognized
Ben hata için ana nedeni benim
nn_SCD_min
ihtiyaçlar (o Sçerçeve olarak ithal edilecek olduğunu düşünüyorum Burada bir dizi gibi görünüyor).
nn_SCD_min
, FOUR sütunları var. Ben sütunları aşağıdaki başlıkları gibi başlıklara sahip gerektiğine inanıyoruz:
item_id, similar, score, rank
Ben yukarıdaki dört başlıkları içeren bir
SFrame
için diziyi 'nn_SCD_min' nasıl değiştirebilirim
? Bunu yapma konusundaki fikrim büyük ölçüde takdir ediliyor.
Bu çözüm çok iyi çalışıyor gibi görünüyor. Senin görüşün nedir? 'nn_SCD_min_df = pd.DataFrame (nn_SCD_min) nn_SCD_min_df.columns = {'item_id', 'benzer', 'score', 'rank'}' – Yas