Öğretici: ML.NET ile matris çarpanlarına dönüştürmeyi kullanarak bir film önerici oluşturma
Bu öğreticide, bir .NET Core konsol uygulamasında ML.NET ile film önerici oluşturma hakkında bilgi edinebilirsiniz. Adımlar C# ve 2019 Visual Studio kullanır.
Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:
- Makine öğrenmesi algoritması seçme
- Verilerinizi hazırlama ve yükleme
- Model oluşturma ve eğitma
- Modeli değerlendirme
- Modeli dağıtma ve tüketme
Bu öğreticinin kaynak kodunu dotnet/samples deposunda bulabilirsiniz.
Makine öğrenmesi iş akışı
Görevinizi ve diğer tüm ML.NET görevini gerçekleştirmek için aşağıdaki adımları kullanacağız:
Önkoşullar
Uygun makine öğrenmesi görevini seçin
Film listesi veya ilgili ürünlerin listesinin önerilmez olması gibi öneri sorunlarına yaklaşmanın çeşitli yolları vardır, ancak bu durumda bir kullanıcının belirli bir filme hangi derecelendirmeyi (1-5) ve tanımlı bir eşiğin üzerinde olması halinde filme (derecelendirme ne kadar yüksekse, belirli bir film beğenen kullanıcının olasılığı o kadar yüksekse) tahminde bulunabilirsiniz.
Konsol uygulaması oluşturma
Proje oluşturma
"MovieRecommender" adlı bir C# Konsol Uygulaması oluşturun. Sonraki düğmesine tıklayın.
Çerçeve olarak .NET 6'yi seçin. Oluştur düğmesine tıklayın.
Veri kümesi depolamak için projenize Data adlı bir dizin oluşturun:
Bu Çözüm Gezgini, projeye sağ tıklayın ve Yeni Klasör Ekle'yi > seçin. "Veri" yazın ve Enter'a basın.
Microsoft.ML ve Microsoft.ML. Önerilen NuGet Paketleri:
Not
Bu örnek, aksi belirtilmediği takdirde, belirtilen NuGet paketlerinin en son kararlı sürümünü kullanır.
Bu Çözüm Gezgini, projeye sağ tıklayın ve Paketleri Yönet'NuGet seçin. Paket nuget.org"yi seçin, Gözat sekmesini seçin, Microsoft.ML araması yapın, listeden paketi seçin ve Yükle düğmesini seçin. Listelenen paketler için lisans koşullarını kabul ediyorsanız, Değişiklikleri Önizle iletişim kutusunda Tamam düğmesini ve ardından Lisans Kabulü iletişim kutusundaki Kabul Ediyorum düğmesini seçin. Bu adımları Microsoft.ML. Öneren.
usingAşağıdaki deyimlerini Program.cs dosyanın en üstüne ekleyin:using Microsoft.ML; using Microsoft.ML.Trainers; using MovieRecommendation;
Verilerinizi indirin
İki veri kümesi indirin ve bunları daha önce oluşturduğunuz Veri klasörüne kaydedin:
Bağlantılara sağ recommendation-ratings-train.csv ve "Bağlantıyı (veya Hedefi) Farklı Kaydet..." seçeneğini seçin
Bağlantılara sağ recommendation-ratings-test.csv ve "Bağlantıyı (veya Hedefi) Farklı Kaydet..." seçeneğini seçin
Veri dosyalarını Veri klasörüne.csv veya başka bir yere kaydeddikten sonra, veri *.csv Veri * klasörüne taşıyın.
Bu Çözüm Gezgini dosyalardan her biri için sağ * tık.csv özellikler'i seçin. Gelişmiş altında, Çıkış Dizinine Kopyala değerini Daha yeni ise Kopyala olarak değiştirebilirsiniz.

Verilerinizi yükleme
ML.NET işleminin ilk adımı, model eğitim ve test verilerinizi hazırlamak ve yüklemektir.
Öneri derecelendirme verileri ve veri Train Test kümelerine ayrılır. Veriler Train modelinize uyacak şekilde kullanılır. Veriler, Test eğitilmiş modeliniz ile tahminde bulunarak model performansını değerlendirmek için kullanılır. genellikle ve verileriyle 80/20 Train Test ayrılmıştır.
Aşağıda,.csv dosyalarınıza gelen * verilerin önizlemesi verilmiştir:

Veri *.csv dört sütun vardır:
userIdmovieIdratingtimestamp
Makine öğrenmesinde, tahmin yapmak için kullanılan sütunlara Özellikler,döndürülen tahmini içeren sütuna etiket adı verilir.
Film derecelendirmelerini tahmin etmek istediğiniz için derecelendirme sütunu Label olur. Diğer üç sütun olan userId movieId , ve timestamp sütunlarının hepsi tahmin etmek için Features Label kullanılır.
| Özellikler | Etiketle |
|---|---|
userId |
rating |
movieId |
|
timestamp |
tahmin etmek için hangisinin kullanı Features olduğuna karar vermek size göre bir karardır. Label En iyi seçeneğinin seçimine yardımcı olmak için permütasyon özelliği önemi gibi yöntemleri de kullanabilirsiniz. Features
Bu durumda, zaman damgası kullanıcının verilen bir filme nasıl fiyat verdiğine gerçekten etkileyene ve dolayısıyla daha doğru bir tahminde bulunmak için katkıda bulunamayadan sütunu olarak ortadan timestamp Feature kaldırmalısiniz:
| Özellikler | Etiketle |
|---|---|
userId |
rating |
movieId |
Ardından giriş sınıfı için veri yapınızı tanımlamanız gerekir.
Projenize yeni bir sınıf ekleyin:
Yeni Çözüm Gezgini'da projeye sağ tıklayın ve Yeni Öğe'ye >'yi seçin.
Yeni Öğe Ekle iletişim kutusunda Sınıf'ı seçin ve Ad alanını MovieRatingData.cs olarak seçin. Ardından Ekle düğmesini seçin.
MovieRatingData.cs dosyası kod düzenleyicisinde açılır. using Aşağıdaki deyimini MovieRatingData.cs öğesinin en üstüne ekleyin:
using Microsoft.ML.Data;
Mevcut sınıf tanımını MovieRating kaldırarak ve Aşağıdaki kodu MovieRatingData.cs'ye ekleyerek adlı bir sınıf oluşturun:
public class MovieRating
{
[LoadColumn(0)]
public float userId;
[LoadColumn(1)]
public float movieId;
[LoadColumn(2)]
public float Label;
}
MovieRating bir giriş veri sınıfı belirtir. LoadColumn özniteliği, veri kümesinde hangi sütunların (sütun dizinine göre) yüklenmeleri gerektiğini belirtir. ve userId movieId sütunları sizindir (modele tahminde bulunurken vermek istediğiniz girişler), derecelendirme sütunu ise tahminde olacağınız Features Label Label sütundur (modelin çıkışı).
Aşağıdaki kodu MovieRatingPrediction MovieRating MovieRatingData.cs sınıfından sonra ekleyerek tahmin edilen sonuçları temsil etmek için başka bir sınıf oluşturun:
public class MovieRatingPrediction
{
public float Label;
public float Score;
}
Program.cs içinde, yerine Console.WriteLine("Hello World!") aşağıdaki kodu girin:
MLContext mlContext = new MLContext();
MLContext sınıfı tüm ML.NET işlemleri için bir başlangıç noktasıdır ve başlatma işlemi, model oluşturma iş akışı nesneleri arasında paylaşılacak yeni bir mlContext ML.NET ortamı oluşturur. Kavramsal olarak bu, DBContext Entity Framework.
Dosyanın alt kısmında adlı bir yöntem LoadData() oluşturun:
(IDataView training, IDataView test) LoadData(MLContext mlContext)
{
}
Not
Bu yöntem, aşağıdaki adımlarda bir dönüş deyimi ekleyene kadar size hata verir.
Veri yolu değişkenlerinizi başlatma,.csv dosyalarından verileri yükleme ve içinde bir sonraki kod satırı olarak aşağıdakini ekleyerek ve verilerini nesne * Train olarak iade Test IDataView LoadData() eder:
var trainingDataPath = Path.Combine(Environment.CurrentDirectory, "Data", "recommendation-ratings-train.csv");
var testDataPath = Path.Combine(Environment.CurrentDirectory, "Data", "recommendation-ratings-test.csv");
IDataView trainingDataView = mlContext.Data.LoadFromTextFile<MovieRating>(trainingDataPath, hasHeader: true, separatorChar: ',');
IDataView testDataView = mlContext.Data.LoadFromTextFile<MovieRating>(testDataPath, hasHeader: true, separatorChar: ',');
return (trainingDataView, testDataView);
ML.NET'te veriler bir IDataView arabirimi olarak temsil edildi. IDataView , tablosal verileri (sayısal ve metin) açıklamanın esnek ve verimli bir yolu. Veriler bir metin dosyasından veya gerçek zamanlı olarak (örneğin, SQL veya günlük dosyaları) bir nesneye IDataView yüklenebilir.
LoadFromTextFile() veri şemasını tanımlar ve dosyasında okur. Veri yolu değişkenlerini alır ve bir IDataView döndürür. Bu durumda, ve dosyalarınızın yolunu sağlar ve hem metin dosyası üst bilgisini (sütun adlarını düzgün bir şekilde kullanabileceği için) hem de virgül karakteri veri ayırıcısını (varsayılan ayırıcı bir Test Train sekmedir) belirtirsiniz.
Yönteminizi çağıran ve ile LoadData() verilerini iade etmek için aşağıdaki kodu Train Test ekleyin:
(IDataView trainingDataView, IDataView testDataView) = LoadData(mlContext);
Modelinizi oluşturma ve eğitma
Aşağıdaki BuildAndTrainModel() kodu kullanarak LoadData() yönteminin hemen ardından yöntemini oluşturun:
ITransformer BuildAndTrainModel(MLContext mlContext, IDataView trainingDataView)
{
}
Not
Bu yöntem, aşağıdaki adımlarda bir dönüş deyimi ekleyene kadar size hata verir.
aşağıdaki kodu 'ye ekleyerek veri dönüşümlerini BuildAndTrainModel() tanımlayın:
IEstimator<ITransformer> estimator = mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "userIdEncoded", inputColumnName: "userId")
.Append(mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "movieIdEncoded", inputColumnName: "movieId"));
ve gerçek değerleri değil kullanıcıları ve film başlıklarını temsil eden ve temsil eden userId movieId MapValueToKey() yöntemini kullanarak her birini sayısal bir anahtar türü sütununa (öneri algoritmaları tarafından kabul edilen bir biçim) dönüştürebilirsiniz ve bunları yeni veri kümesi sütunları olarak userId movieId Feature eklersiniz:
| userId | movieId | Etiketle | userIdEncoded | movieIdEncoded |
|---|---|---|---|---|
| 1 | 1 | 4 | userKey1 | movieKey1 |
| 1 | 3 | 4 | userKey1 | movieKey2 |
| 1 | 6 | 4 | userKey1 | movieKey3 |
makine öğrenmesi algoritmasını seçin ve içinde bir sonraki kod satırı olarak aşağıdakini ekleyerek bunu veri dönüştürme tanımlarının sonuna BuildAndTrainModel() ekler:
var options = new MatrixFactorizationTrainer.Options
{
MatrixColumnIndexColumnName = "userIdEncoded",
MatrixRowIndexColumnName = "movieIdEncoded",
LabelColumnName = "Label",
NumberOfIterations = 20,
ApproximationRank = 100
};
var trainerEstimator = estimator.Append(mlContext.Recommendation().Trainers.MatrixFactorization(options));
MatrixFactorizationTrainer, öneri eğitim algoritmanızdır. Matris Faktörleştirme, kullanıcıların geçmişte ürünleri nasıl derecelendirildiklerine ve bu öğreticide yer alan veri kümelerine göre nasıl derecelendirildiklerine göre verileriniz olduğunda öneriye yaygın bir yaklaşımdır. Farklı verileriniz olduğunda başka öneri algoritmaları da vardır (daha fazla bilgi edinmek için aşağıdaki Diğer öneri algoritmaları bölümüne bakın).
Bu durumda algoritma, "işbirliğine dayalı filtreleme" adlı bir yöntem kullanır ve kullanıcı 1'in belirli bir sorunda Kullanıcı 2 ile aynı görüşe sahip olması durumunda Kullanıcı 1'in farklı bir sorun hakkında Kullanıcı 2 ile aynı şekilde hissetme olasılığı daha yüksek Matrix Factorization olur.
Örneğin 1. Kullanıcı ve Kullanıcı 2, filmlere benzer şekilde puanlarsa 2. Kullanıcı, 1 kullanıcı tarafından yüksek oranda izlenilen ve puanlanan bir filmden daha fazla keyif aitir:
Incredibles 2 (2018) |
The Avengers (2012) |
Guardians of the Galaxy (2014) |
|
|---|---|---|---|
| Kullanıcı 1 | İzlendi ve beğenildi | İzlendi ve beğenildi | İzlendi ve beğenildi |
| Kullanıcı 2 | İzlendi ve beğenildi | İzlendi ve beğenildi | İzlenmdi -- ÖNERİN film |
Eğitmen, Matrix Factorization aşağıdaki Algoritma hiperparametreleribölümünde hakkında daha fazla bilgi edinebilirsiniz.
Modeli verilere sığdırma ve yöntemine bir sonraki kod satırı olarak aşağıdakini ekleyerek eğitilen Train modeli BuildAndTrainModel() geri getirebilirsiniz:
Console.WriteLine("=============== Training the model ===============");
ITransformer model = trainerEstimator.Fit(trainingDataView);
return model;
Fit() yöntemi, modelinizi sağlanan eğitim veri kümesiyle eğitiyor. Teknik olarak, verileri dönüştürerek ve eğitimi uygulayarak tanımları yürütür ve eğitilen modeli (yani Estimator ) geri Transformer döndürür.
ML.NET'te model eğitimi iş akışı hakkında daha fazla bilgi için bkz. ML.NETnedir ve nasıl çalışır? .
Yönteminizi çağıran ve eğitilen modeli geri dönmek için yönteminin çağrısının altına bir sonraki LoadData() BuildAndTrainModel() kod satırı olarak aşağıdakini ekleyin:
ITransformer model = BuildAndTrainModel(mlContext, trainingDataView);
Modelinizi değerlendirme
Modelinizi eğittiktan sonra test verilerinizi kullanarak modelinizin nasıl bir performans sergiley olduğunu değerlendirin.
Aşağıdaki EvaluateModel() kodu kullanarak BuildAndTrainModel() yönteminin hemen ardından yöntemini oluşturun:
void EvaluateModel(MLContext mlContext, IDataView testDataView, ITransformer model)
{
}
aşağıdaki Test kodu içine ekleyerek verileri dönüştürebilirsiniz: EvaluateModel()
Console.WriteLine("=============== Evaluating the model ===============");
var prediction = model.Transform(testDataView);
Transform() yöntemi, bir test veri kümesinde sağlanan birden çok giriş satırı için tahminler yapar.
yönteminin sonraki kod satırı olarak aşağıdakini ekleyerek modeli EvaluateModel() değerlendirin:
var metrics = mlContext.Regression.Evaluate(prediction, labelColumnName: "Label", scoreColumnName: "Score");
Tahmin kümesine sahip olduktan sonra Evaluate() yöntemi, tahmin edilen değerleri test veri kümesinde gerçek değerle karşılaştıran ve modelin performansına ilişkin ölçümleri döndüren Labels modeli değerlendirir.
aşağıdakini yöntemine sonraki kod satırı olarak ekleyerek değerlendirme ölçümlerinizi konsola EvaluateModel() yazdırabilirsiniz:
Console.WriteLine("Root Mean Squared Error : " + metrics.RootMeanSquaredError.ToString());
Console.WriteLine("RSquared: " + metrics.RSquared.ToString());
Yönteminizi çağıran yöntemine yapılan çağrının altına bir sonraki BuildAndTrainModel() kod satırı olarak aşağıdakini EvaluateModel() ekleyin:
EvaluateModel(mlContext, testDataView, model);
Şu ana kadarki çıktı aşağıdaki metne benzer şekilde görünüyor olmalı:
=============== Training the model ===============
iter tr_rmse obj
0 1.5403 3.1262e+05
1 0.9221 1.6030e+05
2 0.8687 1.5046e+05
3 0.8416 1.4584e+05
4 0.8142 1.4209e+05
5 0.7849 1.3907e+05
6 0.7544 1.3594e+05
7 0.7266 1.3361e+05
8 0.6987 1.3110e+05
9 0.6751 1.2948e+05
10 0.6530 1.2766e+05
11 0.6350 1.2644e+05
12 0.6197 1.2541e+05
13 0.6067 1.2470e+05
14 0.5953 1.2382e+05
15 0.5871 1.2342e+05
16 0.5781 1.2279e+05
17 0.5713 1.2240e+05
18 0.5660 1.2230e+05
19 0.5592 1.2179e+05
=============== Evaluating the model ===============
Rms: 0.994051469730769
RSquared: 0.412556298844873
Bu çıkışta 20 yineleme vardır. Her yinelemede hata ölçüsü azalır ve 0'a daha yakın bir noktada yakınsanıyor.
Modelin tahmin edilen değerleri ile gözlemlenen test veri kümesi değerleri arasındaki farkları ölçmek için root of mean squared error (RMS veya RMSE) kullanılır. Teknik olarak hata karelerinin ortalamasının karekökünü ifade eder. Model ne kadar düşükse o kadar iyi olur.
R Squared verilerin bir modele ne kadar uygun olduğunu gösterir. 0 ile 1 arasında aralıklar. 0 değeri, verilerin rastgele olduğu veya modele uygun olamayacakları anlamına gelir. 1 değeri, modelin veriyle tam olarak eş değere sahip olduğu anlamına gelir. Puanın R Squared mümkün olduğunca 1'e yakın olması gerekir.
Başarılı modeller, bir itici işlemdir. Öğretici hızlı model eğitimi sağlamak için küçük veri kümeleri kullandığından bu modelin ilk kalitesi daha düşüktür. Model kalitesinden memnun değilseniz, daha büyük eğitim veri kümeleri sağlayarak veya her algoritma için farklı hiper parametrelere sahip farklı eğitim algoritmaları seçerek modeli geliştirmeye çalışabilirsiniz. Daha fazla bilgi için aşağıdaki Modelinizi geliştirme bölümüne bakın.
Modelinizi kullanma
Artık eğitilmiş modelinizi kullanarak yeni verilerde tahminde bulunuyorabilirsiniz.
Aşağıdaki UseModelForSinglePrediction() kodu kullanarak EvaluateModel() yönteminin hemen ardından yöntemini oluşturun:
void UseModelForSinglePrediction(MLContext mlContext, ITransformer model)
{
}
aşağıdaki kodu PredictionEngine ekleyerek derecelendirmeyi tahmin etmek için UseModelForSinglePrediction() kullanın:
Console.WriteLine("=============== Making a prediction ===============");
var predictionEngine = mlContext.Model.CreatePredictionEngine<MovieRating, MovieRatingPrediction>(model);
PredictionEngine, tek bir veri örneği üzerinde tahmin gerçekleştirmeyi sağlayan kullanışlı bir API'dir. PredictionEngine iş parçacığı güvenli değildir. Tek iş parçacıklı veya prototip ortamlarda kullanmak kabul edilebilir. Üretim ortamlarında daha iyi performans ve iş parçacığı güvenliği için, uygulamanız genelinde kullanmak üzere bir PredictionEnginePool ObjectPool nesne oluşturan hizmetini PredictionEngine kullanın. Web API'sinde nasıl PredictionEnginePool kullanabileceğiniz hakkında bu ASP.NET Core bakın.
Not
PredictionEnginePool hizmet uzantısı şu anda önizlemededir.
adlı bir örneği oluşturun ve yönteminin sonraki kod satırları olarak aşağıdakini ekleyerek Tahmin MovieRating testInput Altyapısına UseModelForSinglePrediction() bunu geçişini yapın:
var testInput = new MovieRating { userId = 6, movieId = 10 };
var movieRatingPrediction = predictionEngine.Predict(testInput);
Predict() işlevi, tek bir veri sütunu üzerinde tahmin yapar.
Ardından , veya tahmin edilen derecelendirmeyi kullanarak film için movieId 10 ile kullanıcı 6 arasında bir öneride bulundurarak bunu Score önerebilirsiniz. ne kadar yüksek Score ise, kullanıcının belirli bir filmden hoşlama olasılığı o kadar yüksektir. Bu durumda, tahmini 3,5 derecelendirmesine sahip filmleri > diyelim.
Sonuçları yazdırmak için yönteminin sonraki kod satırları olarak aşağıdakini UseModelForSinglePrediction() ekleyin:
if (Math.Round(movieRatingPrediction.Score, 1) > 3.5)
{
Console.WriteLine("Movie " + testInput.movieId + " is recommended for user " + testInput.userId);
}
else
{
Console.WriteLine("Movie " + testInput.movieId + " is not recommended for user " + testInput.userId);
}
Yönteminizi çağıran yöntemine yapılan çağrıdan sonraki kod EvaluateModel() satırı olarak aşağıdakini UseModelForSinglePrediction() ekleyin:
UseModelForSinglePrediction(mlContext, model);
Bu yöntemin çıktısı aşağıdaki metne benzer şekilde çalışmalı:
=============== Making a prediction ===============
Movie 10 is recommended for user 6
Modelinizi kaydetme
Modelinizi kullanarak son kullanıcı uygulamalarında tahminler yapmak için öncelikle modeli kaydetmeniz gerekir.
Aşağıdaki SaveModel() kodu kullanarak UseModelForSinglePrediction() yönteminin hemen ardından yöntemini oluşturun:
void SaveModel(MLContext mlContext, DataViewSchema trainingDataViewSchema, ITransformer model)
{
}
Yöntemine aşağıdaki kodu ekleyerek eğitilen modelinizi SaveModel() kaydedin:
var modelPath = Path.Combine(Environment.CurrentDirectory, "Data", "MovieRecommenderModel.zip");
Console.WriteLine("=============== Saving the model to a file ===============");
mlContext.Model.Save(model, trainingDataViewSchema, modelPath);
Bu yöntem eğitilen modelinizi bir .zip dosyasına ("Veri" klasöründe) kaydeder. Bu dosya daha sonra tahmin yapmak için diğer .NET uygulamalarında kullanılabilir.
Yönteminizi çağıran yöntemine yapılan çağrıdan sonraki kod UseModelForSinglePrediction() satırı olarak aşağıdakini SaveModel() ekleyin:
SaveModel(mlContext, trainingDataView.Schema, model);
Kaydedilen modelinizi kullanma
Eğitilen modelinizi kaydeden modeli farklı ortamlarda da tüketebilirsiniz. Uygulamalarda eğitilen bir makine öğrenmesi modelini nasıl faaliyete geçirmek için eğitilmiş modelleri kaydetme ve yükleme konusunda bilgi edinmek için bkz. Eğitilen modelleri kaydetme ve yükleme.
Sonuçlar
Yukarıdaki adımları izleyin ve konsol uygulamalarınızı çalıştırın (Ctrl + F5). Yukarıdaki tek tahminden elde eden sonuçlarınız aşağıdakine benzerdir. Uyarılar veya işleme iletileri görebilir, ancak bu iletiler netlik sağlamak için aşağıdaki sonuçlardan kaldırılmıştır.
=============== Training the model ===============
iter tr_rmse obj
0 1.5382 3.1213e+05
1 0.9223 1.6051e+05
2 0.8691 1.5050e+05
3 0.8413 1.4576e+05
4 0.8145 1.4208e+05
5 0.7848 1.3895e+05
6 0.7552 1.3613e+05
7 0.7259 1.3357e+05
8 0.6987 1.3121e+05
9 0.6747 1.2949e+05
10 0.6533 1.2766e+05
11 0.6353 1.2636e+05
12 0.6209 1.2561e+05
13 0.6072 1.2462e+05
14 0.5965 1.2394e+05
15 0.5868 1.2352e+05
16 0.5782 1.2279e+05
17 0.5713 1.2227e+05
18 0.5637 1.2190e+05
19 0.5604 1.2178e+05
=============== Evaluating the model ===============
Rms: 0.977175077487166
RSquared: 0.43233349213192
=============== Making a prediction ===============
Movie 10 is recommended for user 6
=============== Saving the model to a file ===============
Tebrikler! Film öneren bir makine öğrenmesi modelini başarıyla tamamladın. Bu öğreticinin kaynak kodunu dotnet/samples deposunda bulabilirsiniz.
Modelinizi geliştirme
Daha doğru tahminler elde etmek için modelinizin performansını geliştirmenin çeşitli yolları vardır.
Veriler
Her kullanıcı ve film kimliği için yeterli örnek olan daha fazla eğitim verisi eklemek, öneri modelinin kalitesini artırmaya yardımcı olabilir.
Çapraz doğrulama, verileri rastgele olarak alt kümelere bölen modelleri değerlendirme tekniğidir (bu öğreticide olduğu gibi test verilerini veri kümesinden ayıklamak yerine) ve bazı grupları eğitim verileri olarak, bazı grupları ise test verileri olarak alır. Bu yöntem, model kalitesi açısından eğitim testi bölme konusunda daha iyi performans gösterir.
Özellikler
Bu öğreticide, yalnızca Features user id movie id rating veri kümesi tarafından sunulan üç (,, ve) kullanın.
Bu iyi bir başlangıç olsa da, gerçekte Features veri kümesine dahil edildiklerinde başka öznitelikler veya (örneğin, Age, cinsiyeti, coğrafi konum vb.) eklemek isteyebilirsiniz. Daha fazla ilgisi eklemek, Features öneri modelinizin performansını artırmaya yardımcı olabilir.
Featuresmakinenizin öğrenimi göreviniz için en uygun olabilecek bir işlem olduğundan emin değilseniz, .net ML özellik katkısı hesaplama (FCC) ve permütasyon özelliği önem dereceside kullanabilirsiniz Features .
Algoritma hiper parametreleri
ML .net, daha iyi varsayılan eğitim algoritmaları sağlarken, algoritmanın hiper parametrelerinideğiştirerek performansı daha ayrıntılı olarak ayarlayabilirsiniz.
İçin Matrix Factorization , Numberofıterlationve yaklaşık olarak, daha iyi sonuçlar verir.
Örneğin, bu öğreticide algoritma seçenekleri şunlardır:
var options = new MatrixFactorizationTrainer.Options
{
MatrixColumnIndexColumnName = "userIdEncoded",
MatrixRowIndexColumnName = "movieIdEncoded",
LabelColumnName = "Label",
NumberOfIterations = 20,
ApproximationRank = 100
};
Diğer öneri algoritmaları
Ortak filtreleme ile matris ayırma algoritması, film önerileri gerçekleştirmeye yönelik yalnızca bir yaklaşımdır. Çoğu durumda, derecelendirme verileri kullanılabilir olmayabilir ve yalnızca film geçmişi kullanıcılardan bulunabilir. Diğer durumlarda, yalnızca kullanıcının derecelendirme verilerinden daha fazlasına sahip olabilirsiniz.
| Algoritma | Senaryo | Örnek |
|---|---|---|
| Bir sınıf matrisi oluşturma | Yalnızca Kullanıcı kimliği ve Movieıd olduğunda bunu kullanın. Bu öneri stili, ortak satın alma senaryosuna veya genellikle birlikte satın alınan ürünlere dayalıdır. Bu, müşterilerin kendi satın alma siparişi geçmişine göre bir ürün kümesi önermesini önermeyeceği anlamına gelir. | >deneyin |
| Alan duyarlı bir ayırma makinesi | Kullanıcı kimliği, ProductID ve derecelendirmeden daha fazla özelliğe sahip olduğunuzda (ürün açıklaması veya ürün fiyatı gibi) öneri sağlamak için bunu kullanın. Bu yöntem ayrıca birlikte çalışan bir filtreleme yaklaşımı kullanır. | >deneyin |
Yeni Kullanıcı senaryosu
İşbirliğine dayalı filtrelemede yaygın olarak karşılaşılan bir sorun, yeni bir kullanıcıya, ıntreler eklemek için önceki verileri olmayan yeni bir kullanıcı olduğunda oluşan soğuk başlatma sorunudur. Bu sorun genellikle yeni kullanıcılardan bir profil oluşturmasını isteyerek ve örneğin, geçmişte gördüğü filmleri derecelendirmek için çözülür. Bu yöntem kullanıcıya bazı yük koyar, ancak derecelendirme geçmişi olmayan yeni kullanıcılar için bazı veri başlatma verileri sağlar.
Kaynaklar
Bu öğreticide kullanılan veriler Movielens veri kümesindentüretilir.
Sonraki adımlar
Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:
- Makine öğrenimi algoritması seçin
- Verilerinizi hazırlayın ve yükleyin
- Model oluşturma ve eğitme
- Modeli değerlendirme
- Bir modeli dağıtma ve kullanma
Daha fazla bilgi edinmek için sonraki öğreticiye ilerleyin