Collaborative filtering परिचय

PySpark के साथ Big Data Fundamentals

Upendra Devisetty

Science Analyst, CyVerse

Collaborative filtering क्या है?

  • Collaborative filtering यानी ऐसे उपयोगकर्ताओं को खोजना जिनकी रुचियाँ मिलती-जुलती हों

  • Collaborative filtering आम तौर पर recommender systems में उपयोग होता है

  • Collaborative filtering के तरीके:

    • User-User Collaborative filtering: लक्ष्य उपयोगकर्ता से मिलते-जुलते उपयोगकर्ताओं को ढूँढता है

    • Item-Item Collaborative filtering: लक्ष्य उपयोगकर्ता के आइटम्स जैसे मिलते-जुलते आइटम्स ढूँढकर recommend करता है

PySpark के साथ Big Data Fundamentals

pyspark.mllib.recommendation सबमॉड्यूल में Rating क्लास

  • Rating क्लास (user, product, rating) ट्यूपल का एक रैपर है

  • RDD को पार्स करने और user, product, rating का ट्यूपल बनाने में उपयोगी

from pyspark.mllib.recommendation import Rating 
r = Rating(user = 1, product = 2, rating = 5.0)
(r[0], r[1], r[2])
(1, 2, 5.0)
PySpark के साथ Big Data Fundamentals

randomSplit() से डेटा स्प्लिट करना

  • प्रेडिक्टिव मॉडलिंग का मूल्यांकन करने के लिए डेटा को training और testing सेट में बाँटना ज़रूरी है

  • आम तौर पर training के लिए डेटा का बड़ा हिस्सा और testing के लिए छोटा हिस्सा रखा जाता है

  • PySpark का randomSplit() दिए वेट्स के अनुसार रैंडम स्प्लिट करता है और कई RDDs लौटाता है

data = sc.parallelize([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
training, test=data.randomSplit([0.6, 0.4])
training.collect()
test.collect()
[1, 2, 5, 6, 9, 10]
[3, 4, 7, 8]
PySpark के साथ Big Data Fundamentals

Alternating Least Squares (ALS)

  • spark.mllib में Alternating Least Squares (ALS) एल्गोरिदम collaborative filtering देता है

  • ALS.train(ratings, rank, iterations)

r1 = Rating(1, 1, 1.0)
r2 = Rating(1, 2, 2.0)
r3 = Rating(2, 1, 2.0)
ratings = sc.parallelize([r1, r2, r3])
ratings.collect()
[Rating(user=1, product=1, rating=1.0),
 Rating(user=1, product=2, rating=2.0),
 Rating(user=2, product=1, rating=2.0)]
model = ALS.train(ratings, rank=10, iterations=10)
PySpark के साथ Big Data Fundamentals

predictAll()

  • predictAll() मेथड इनपुट user-product पेयर्स के लिए अनुमानित रेटिंग्स की सूची लौटाता है

  • यह मेथड रेटिंग्स के बिना RDD लेता है और रेटिंग्स जनरेट करता है

unrated_RDD = sc.parallelize([(1, 2), (1, 1)])
predictions = model.predictAll(unrated_RDD)
predictions.collect()
[Rating(user=1, product=1, rating=1.0000278574351853),
 Rating(user=1, product=2, rating=1.9890355703778122)]
PySpark के साथ Big Data Fundamentals

मॉडल मूल्यांकन

rates = ratings.map(lambda x: ((x[0], x[1]), x[2]))
rates.collect()
[((1, 1), 1.0), ((1, 2), 2.0), ((2, 1), 2.0)]
preds = predictions.map(lambda x: ((x[0], x[1]), x[2]))
preds.collect()

[((1, 1), 1.000027857), ((1, 2), 1.9890355703)]
rates_preds = rates.join(preds)
rates_preds.collect()
[((1, 2), (2.0, 1.9890355703)), ((1, 1), (1.0, 1.000027857))]

MSE (actual rating - predicted rating) के वर्ग का औसत मान है

MSE = rates_preds.map(lambda r: (r[1][0] - r[1][1])**2).mean()
PySpark के साथ Big Data Fundamentals

अभ्यास करते हैं!

PySpark के साथ Big Data Fundamentals

Preparing Video For Download...