PySpark ile Öneri Motorları Oluşturma
Jamen Long
Data Scientist at Nike
# Veriyi böl
(training_data, test_data) = movie_ratings.randomSplit([0.8, 0.2])
# ALS modeli kur
from pyspark.ml.recommendation import ALS
als = ALS(userCol="userId", itemCol="movieId", ratingCol="rating",
rank=25, maxIter=100, regParam=.05, nonnegative=True,
coldStartStrategy="drop", implicitPrefs=False)
# Modeli eğitim verisine uydur
model = als.fit(training_data)
# test_data üzerinde tahminler üret
predictions = model.transform(test_data)
# Spark'a tahminleri nasıl değerlendireceğini söyle
evaluator = RegressionEvaluator(metricName="rmse", labelCol="rating",
predictionCol="prediction")
# RMSE'yi al ve yazdır
rmse = evaluator.evaluate(predictions)
print ("RMSE: "), rmse
RMSE: 1.45
ParamGridBuilder()
CrossValidator()
# ParamGridBuilder paketini içe aktar from pyspark.ml.tuning import ParamGridBuilder# Bir ParamGridBuilder oluştur param_grid = ParamGridBuilder()
# ParamGridBuilder paketini içe aktar
from pyspark.ml.tuning import ParamGridBuilder
# Bir ParamGridBuilder oluştur ve hiperparametreleri ekle
param_grid = ParamGridBuilder()
.addGrid(als.rank, [])
.addGrid(als.maxIter, [])
.addGrid(als.regParam, [])
# ParamGridBuilder paketini içe aktar
from pyspark.ml.tuning import ParamGridBuilder
# Bir ParamGridBuilder oluştur, hiperparametre ve değerlerini ekle
param_grid = ParamGridBuilder()
.addGrid(als.rank, [5, 40, 80, 120])
.addGrid(als.maxIter, [5, 100, 250, 500])
.addGrid(als.regParam, [.05, .1, 1.5])
.build()
# CrossValidator paketini içe aktar
from pyspark.ml.tuning import CrossValidator
# Çapraz doğrulayıcı oluştur; eğitirken ve değerlendirirken ne kullanılacağını belirt
cv = CrossValidator(estimator = als,
estimatorParamMaps = param_grid,
evaluator = evaluator,
numFolds = 5)
# CrossValidator paketini içe aktar
from pyspark.ml.tuning import CrossValidator
# Bir çapraz doğrulayıcı başlat
cv = CrossValidator()
# CrossValidator paketini içe aktar
from pyspark.ml.tuning import CrossValidator
# Modeli eğitirken ne kullanılacağını belirt
cv = CrossValidator(estimator = als,
estimatorParamMaps = param_grid,
)
# CrossValidator paketini içe aktar
from pyspark.ml.tuning import CrossValidator
# Spark'a hangi algoritma, hiperparametre değerleri, nasıl değerlendirme
# ve eğitim sırasında kullanılacak kat sayısını belirt
cv = CrossValidator(estimator = als,
estimatorParamMaps = param_grid,
evaluator = evaluator,
numFolds = 5)
# Eğitim ve test seti oluştur (80/20 böl)
(training, test) = movie_ratings.randomSplit([0.8, 0.2])
# Hiperparametresiz genel ALS modeli kur
als = ALS(userCol="userId", itemCol="movieId", ratingCol="rating",
coldStartStrategy="drop", nonnegative = True,
implicitPrefs = False)
# Eğitim ve test seti oluştur (80/20 böl)
(training, test) = movie_ratings.randomSplit([0.8, 0.2])
# Hiperparametresiz genel ALS modeli kur
als = ALS(userCol="userId", itemCol="movieId", ratingCol="rating",
coldStartStrategy="drop", nonnegative = True,
implicitPrefs = False)
# Her hiperparametre için denenecek değerleri belirt
from pyspark.ml.tuning import ParamGridBuilder
param_grid = ParamGridBuilder()
.addGrid(als.rank, [5, 40, 80, 120])
.addGrid(als.maxIter, [5, 100, 250, 500])
.addGrid(als.regParam, [.05, .1, 1.5])
.build()
# Eğitim ve test seti oluştur (80/20 böl)
(training, test) = movie_ratings.randomSplit([0.8, 0.2])
# Hiperparametresiz genel ALS modeli kur
als = ALS(userCol="userId", itemCol="movieId", ratingCol="rating",
coldStartStrategy="drop", nonnegative = True,
implicitPrefs = False)
# Her hiperparametre için denenecek değerleri belirt
from pyspark.ml.tuning import ParamGridBuilder
param_grid = ParamGridBuilder()
.addGrid(als.rank, [5, 40, 80, 120])
.addGrid(als.maxIter, [5, 100, 250, 500])
.addGrid(als.regParam, [.05, .1, 1.5])
.build()
# Model performansının nasıl değerlendirileceğini belirt
evaluator = RegressionEvaluator(metricName="rmse", labelCol="rating",
predictionCol="prediction")
# Hiperparametresiz genel ALS modeli kur
als = ALS(userCol="userId", itemCol="movieId", ratingCol="rating",
coldStartStrategy="drop", nonnegative = True,
implicitPrefs = False)
# Her hiperparametre için denenecek değerleri belirt
from pyspark.ml.tuning import ParamGridBuilder
param_grid = ParamGridBuilder()
.addGrid(als.rank, [5, 40, 80, 120])
.addGrid(als.maxIter, [5, 100, 250, 500])
.addGrid(als.regParam, [.05, .1, 1.5])
.build()
# Model performansının nasıl değerlendirileceğini belirt
evaluator = RegressionEvaluator(metricName="rmse", labelCol="rating",
predictionCol="prediction")
# CrossValidator kullanarak çapraz doğrulama adımını kur
from pyspark.ml.tuning import CrossValidator
cv = CrossValidator(estimator = als,
estimatorParamMaps = param_grid,
evaluator = evaluator,
numFolds = 5)
# Her hiperparametre için denenecek değerleri belirt
from pyspark.ml.tuning import ParamGridBuilder
param_grid = ParamGridBuilder()
.addGrid(als.rank, [5, 40, 80, 120])
.addGrid(als.maxIter, [5, 100, 250, 500])
.addGrid(als.regParam, [.05, .1, 1.5])
.build()
# Model performansının nasıl değerlendirileceğini belirt
evaluator = RegressionEvaluator(metricName="rmse", labelCol="rating",
predictionCol="prediction")
# CrossValidator kullanarak çapraz doğrulama adımını kur
from pyspark.ml.tuning import CrossValidator
cv = CrossValidator(estimator = als,
estimatorParamMaps = param_grid,
evaluator = evaluator,
numFolds = 5)
# Çapraz doğrulamayı eğitim verisi üzerinde çalıştır
model = cv.fit(training)
# Çapraz doğrulamadan en iyi değer kombinasyonunu çıkar
best_model = model.bestModel
# Çapraz doğrulamadan en iyi değer kombinasyonunu çıkar
best_model = model.bestModel
# Test seti tahminleri üret ve RMSE ile değerlendir
predictions = best_model.transform(test)
rmse = evaluator.evaluate(predictions)
# Değerlendirme metriklerini ve model parametrelerini yazdır
print ("**En İyi Model**")
print ("RMSE = "), rmse
print (" Rank: "), best_model.rank
print (" MaxIter: "), best_model._java_obj.parent().getMaxIter()
print (" RegParam: "), best_model._java_obj.parent().getRegParam()
PySpark ile Öneri Motorları Oluşturma