Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğreticide bir .NET konsol uygulamasında ML.NET ile film önericisi oluşturma gösterilmektedir. Adımlarda C# ve Visual Studio 2019 kullanılır.
Bu eğitimde şunları öğreniyorsunuz:
- Makine öğrenmesi algoritması seçme
- Verilerinizi hazırlama ve yükleme
- Model oluşturma ve eğitma
- Modeli değerlendirme
- Modeli dağıtma ve kullanma
Bu öğreticinin kaynak kodunu dotnet/samples deposunda bulabilirsiniz.
Makine öğrenmesi iş akışı
Görevinizi ve diğer tüm ML.NET görevleri gerçekleştirmek için aşağıdaki adımları kullanacaksınız:
Önkoşullar
Uygun makine öğrenmesi görevini seçin
Film listesi önermek veya ilgili ürünlerin listesini önermek 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) vereceğini tahmin edecek ve tanımlanmış bir eşikten yüksekse bu filmi önerebilirsiniz (derecelendirme ne kadar yüksekse, kullanıcının belirli bir filmi beğenme olasılığı o kadar yüksektir).
Konsol uygulaması oluşturma
Proje oluştur
"MovieRecommender" adlı bir C# Konsol Uygulaması oluşturun. İleri düğmesine tıklayın.
Kullanılacak çerçeve olarak .NET 8'i seçin. Oluştur düğmesine tıklayın.
Veri kümesini depolamak için projenizde Data adlı bir dizin oluşturun:
Çözüm Gezgini'nde projeye sağ tıklayın veYeni Klasör Ekle'yi> seçin. "Veri" yazın ve Enter tuşuna basın.
Microsoft.ML ve Microsoft.ML.Recommender NuGet Paketlerini yükleyin:
Uyarı
Bu örnek, aksi belirtilmedikçe bahsedilen NuGet paketlerinin en son kararlı sürümünü kullanır.
Çözüm Gezgini'da projeye sağ tıklayın ve NuGet Paketlerini Yönet'i seçin. Paket kaynağı olarak "nuget.org" öğesini seçin, Gözat sekmesini seçin, Microsoft.ML arayın, listeden paketi seçin ve Yükle'yi seçin. Listelenen paketlerin lisans koşullarını kabul ediyorsanız, Değişiklikleri Önizle iletişim kutusunda Tamam düğmesini ve ardından Lisans Kabulü iletişim kutusunda Kabul Ediyorum düğmesini seçin. Microsoft.ML.Recommender için bu adımları yineleyin.
usingdosyanızın en üstüne aşağıdaki yönergeleri ekleyin:using Microsoft.ML; using Microsoft.ML.Trainers; using MovieRecommendation;
Verilerinizi indirin
İki veri kümesini indirin ve daha önce oluşturduğunuz Veri klasörüne kaydedin:
recommendation-ratings-train.csv sağ tıklayın ve "Bağlantıyı (veya Hedefi) Farklı Kaydet..." seçeneğini belirleyin
recommendation-ratings-test.csv dosyasına sağ tıklayın ve "Bağlantıyı (veya Hedefi) Farklı Kaydet..." seçin
*.csv dosyalarını Veri klasörüne kaydettiğinizden emin olun veya başka bir yere kaydettikten sonra *.csv dosyalarını Veri klasörüne taşıyın.
Çözüm Gezgini'nde *.csv dosyalarının her birine sağ tıklayın ve Özellikler'i seçin. Gelişmiş altında, Çıkış Dizinine Kopyala değerini Daha yeniyse kopyala olarak değiştirin.
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 Train veri kümelerine bölünürTest. Veriler Train modelinize uyacak şekilde kullanılır. Veriler Test , eğitilen modelinizle tahminlerde bulunmak ve model performansını değerlendirmek için kullanılır. ve verileriyle TrainTest 20/80'in bölünmesi yaygın olarak görülür.
*.csv dosyalarınızdaki verilerin önizlemesi aşağıdadır:
*.csv dosyalarında dört sütun vardır:
userIdmovieIdratingtimestamp
Makine öğrenmesinde tahminde bulunmak için kullanılan sütunlara Özellikler, döndürülen tahmini içeren sütuna ise Etiket adı verilir.
Film derecelendirmelerini tahmin etmek istiyorsunuz, bu nedenle derecelendirme sütunu olur Label. Diğer üç sütun userId, movieId ve timestamp, Features tahmin etmek için kullanılır.
| Özellikler | Etiket |
|---|---|
userId |
rating |
movieId |
|
timestamp |
tahmin etmek için Featureshangilerinin Label kullanılacağına karar vermek size kalmış. En iyi seçmeye yardımcı olması için Features gibi yöntemleri de kullanabilirsiniz.
Bu durumda, zaman damgası kullanıcının belirli bir timestamp filmi nasıl derecelediğini gerçekten etkilemediğinden ve bu nedenle daha doğru bir tahminde bulunmaya katkıda bulunmadığından sütunu bir olarak ortadan kaldırmalısınızFeature:
| Özellikler | Etiket |
|---|---|
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:
Çözüm Gezgini'nde projeye sağ tıklayın ve ardından Yeni Öğe Ekle'yi >seçin.
Yeni Öğe Ekle iletişim kutusundaSınıf'ı seçin ve Ad alanını MovieRatingData.cs olarak değiştirin. Ardından Ekle'yi seçin.
MovieRatingData.cs dosyası kod düzenleyicisinde açılır. aşağıdaki using yönergeyi MovieRatingData.cs en üstüne ekleyin:
using Microsoft.ML.Data;
Mevcut sınıf tanımını kaldırarak ve MovieRating aşağıdaki kodu 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ümesindeki hangi sütunların (sütun dizinine göre) yüklenmesi gerektiğini belirtir.
userId ve movieId sütunları sizindir Features (modeli tahmin Labeletmek için modele vereceğiniz girişler), derecelendirme sütunu ise tahmin ettiğiniz sütundur Label (modelin çıktısı).
MovieRatingPrediction sınıfından MovieRatingsonra aşağıdaki kodu ekleyerek tahmin edilen sonuçları göstermek için başka bir sınıf oluşturun:
public class MovieRatingPrediction
{
public float Label;
public float Score;
}
Program.cs'de öğesini Console.WriteLine("Hello World!") aşağıdaki kodla değiştirin:
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 mlContext işlemi, model oluşturma iş akışı nesneleri arasında paylaşılabilen yeni bir ML.NET ortamı oluşturur. Entity Framework'tekine DBContext benzer, kavramsal olarak.
Dosyanın en altında adlı LoadData()bir yöntem oluşturun:
(IDataView training, IDataView test) LoadData(MLContext mlContext)
{
}
Uyarı
Bu yöntem, aşağıdaki adımlarda bir return deyimi ekleyene kadar size bir hata verir.
Veri yolu değişkenlerinizi başlatın, *.csv dosyalarından verileri yükleyin ve Train ve Test verilerini IDataView nesneleri olarak döndürmek için aşağıdakini LoadData() içine sonraki kod satırı olarak ekleyin:
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'deki veriler IDataView arabirimi olarak temsil edilir.
IDataView tablosal verileri (sayısal ve metin) açıklamanın esnek ve verimli bir yoludur. Veriler bir metin dosyasından veya gerçek zamanlı olarak (örneğin, SQL veritabanı veya günlük dosyaları) bir IDataView nesneye yüklenebilir.
LoadFromTextFile() veri şemasını tanımlar ve dosyada okur. Veri yolu değişkenlerini alır ve IDataView döndürür. Bu durumda, Test ve Train dosyalarınızın yolunu sağlar, hem metin dosyası üst bilgisini (sütun adlarını düzgün kullanabilmesi için) hem de veri ayırıcısı olarak virgül karakterini (varsayılan ayırıcı sekmedir) belirtirsiniz.
Yönteminizi LoadData() çağırmak ve ve Train verilerini döndürmek Test için aşağıdaki kodu ekleyin:
(IDataView trainingDataView, IDataView testDataView) = LoadData(mlContext);
Modelinizi oluşturma ve eğitma
BuildAndTrainModel() Aşağıdaki kodu kullanarak yöntemini hemen yönteminden LoadData() sonra oluşturun:
ITransformer BuildAndTrainModel(MLContext mlContext, IDataView trainingDataView)
{
}
Uyarı
Bu yöntem, aşağıdaki adımlarda bir return deyimi ekleyene kadar size bir hata verir.
veri dönüşümlerini tanımlamak için BuildAndTrainModel()aşağıdaki kodu ekleyin:
IEstimator<ITransformer> estimator = mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "userIdEncoded", inputColumnName: "userId")
.Append(mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "movieIdEncoded", inputColumnName: "movieId"));
userId
movieId Gerçek değerleri değil kullanıcıları ve film başlıklarını temsil ettiğinden, mapValueToKey() yöntemini kullanarak her userIdmovieId birinin sayısal anahtar türü Feature sütununa (öneri algoritmaları tarafından kabul edilen bir biçim) dönüştürülmesini ve bunları yeni veri kümesi sütunları olarak eklenmesini sağlarsınız:
| userId | movieId | Etiket | userIdEncoded | movieIdEncoded |
|---|---|---|---|---|
| 1 | 1 | 4 | userKey1 | movieKey1 |
| 1 | 3 | 4 | userKey1 | movieKey2 |
| 1 | 6 | 4 | userKey1 | movieKey3 |
Makine öğrenmesi algoritmasını seçin ve aşağıdakini içinde bir sonraki kod satırı olarak ekleyerek veri dönüştürme tanımlarına ekleyin BuildAndTrainModel():
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 Factorization , kullanıcıların geçmişte ürünleri nasıl derecelendirdiği hakkında verileriniz olduğunda öneride yaygın bir yaklaşımdır ve bu, bu öğreticideki veri kümelerinde de geçerlidir. Farklı verileriniz olduğunda kullanabileceğiniz 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, Matrix Factorization "işbirliğine dayalı filtreleme" adlı bir yöntem kullanır ve bu yöntem, Kullanıcı 1'in belirli bir sorunla ilgili olarak 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ığının daha yüksek olduğunu varsayar.
Örneğin, Kullanıcı 1 ve Kullanıcı 2 filmleri benzer şekilde derecelendiriyorsa, Kullanıcı 2'nin izlediği ve yüksek puan aldığı bir filmin keyfini çıkarma olasılığı daha yüksektir:
Incredibles 2 (2018) |
The Avengers (2012) |
Guardians of the Galaxy (2014) |
|
|---|---|---|---|
| Kullanıcı 1 | İzlenen ve beğenilen film | İzlenen ve beğenilen film | İzlenen ve beğenilen film |
| Kullanıcı 2 | İzlenen ve beğenilen film | İzlenen ve beğenilen film | İzlemedi -- ÖNERİLEN film |
Eğitmenin Matrix Factorization çeşitli Seçenekleri vardır, bunlar hakkında daha fazla bilgiyi aşağıdaki Algoritma hiperparametreleri bölümünde bulabilirsiniz.
Modeli verilere sığdırın Train ve yönteminin sonraki kod satırı olarak aşağıdakileri ekleyerek eğitilen modeli döndürin BuildAndTrainModel() :
Console.WriteLine("=============== Training the model ===============");
ITransformer model = trainerEstimator.Fit(trainingDataView);
return model;
Fit() yöntemi, modelinizi sağlanan eğitim veri kümesiyle eğiter. Teknik olarak, verileri dönüştürerek ve eğitimi uygulayarak tanımları yürütür Estimator ve bir olan Transformereğitilmiş modeli geri döndürür.
ML.NET model eğitim iş akışı hakkında daha fazla bilgi için bkz. ML.NET nedir ve nasıl çalışır?.
Yönteminizi LoadData() çağırmak ve eğitilen modeli döndürmek için BuildAndTrainModel() yönteminin altındaki sonraki kod satırı olarak aşağıdakileri ekleyin:
ITransformer model = BuildAndTrainModel(mlContext, trainingDataView);
Modelinizi değerlendirme
Modelinizi eğitdikten sonra test verilerinizi kullanarak modelinizin performansını değerlendirin.
EvaluateModel() Aşağıdaki kodu kullanarak yöntemini hemen yönteminden BuildAndTrainModel() sonra oluşturun:
void EvaluateModel(MLContext mlContext, IDataView testDataView, ITransformer model)
{
}
Test aşağıdaki kodu EvaluateModel()ekleyerek verileri dönüştürün:
Console.WriteLine("=============== Evaluating the model ===============");
var prediction = model.Transform(testDataView);
Transform() yöntemi, test veri kümesinin sağlanan birden çok giriş satırı için tahminler yapar.
yönteminin sonraki kod satırı olarak aşağıdakileri ekleyerek modeli değerlendirin EvaluateModel() :
var metrics = mlContext.Regression.Evaluate(prediction, labelColumnName: "Label", scoreColumnName: "Score");
Tahmin kümesini aldıktan sonra Evaluate() yöntemi, tahmin edilen değerleri test veri kümesindeki gerçek Labels değerle karşılaştıran ve modelin performansına ilişkin ölçümleri döndüren modeli değerlendirir.
Yönteminde bir sonraki kod satırı olarak aşağıdakileri ekleyerek değerlendirme ölçümlerinizi konsola yazdırın EvaluateModel() :
Console.WriteLine("Root Mean Squared Error : " + metrics.RootMeanSquaredError.ToString());
Console.WriteLine("RSquared: " + metrics.RSquared.ToString());
Yönteminizi BuildAndTrainModel() çağırmak için yönteminin çağrısının EvaluateModel() altındaki bir sonraki kod satırı olarak aşağıdakileri ekleyin:
EvaluateModel(mlContext, testDataView, model);
Çıktı şu ana kadar aşağıdaki metne benzer görünmelidir:
=============== 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 yaklaşıp yakınlaşır.
root of mean squared error (RMS veya RMSE) modelin tahmin edilen değerleriyle gözlemlenen test veri kümesi değerleri arasındaki farkları ölçmek için kullanılır. Teknik olarak bu, hataların karelerinin ortalamasının kareköküdür. Ne kadar düşük olursa, model o kadar iyi olur.
R Squared verilerin modele ne kadar uygun olduğunu gösterir. 0 ile 1 arasında değişir. 0 değeri, verilerin rastgele olduğu veya başka bir şekilde modele sığmayacağı anlamına gelir. 1 değeri, modelin veriyle tam olarak eşleşmesi anlamına gelir. Puanınızın R Squared mümkün olduğunca 1'e yakın olmasını istiyorsunuz.
Başarılı modeller oluşturmak yinelemeli bir işlemdir. Öğreticide hızlı model eğitimi sağlamak için küçük veri kümeleri kullanıldığı için 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 bunu iyileştirmeyi deneyebilirsiniz. Daha fazla bilgi için aşağıdaki Modelinizi geliştirin bölümüne bakın.
Modelinizi kullanın
Artık eğitilen modelinizi kullanarak yeni veriler hakkında tahminlerde bulunabilirsiniz.
UseModelForSinglePrediction() Aşağıdaki kodu kullanarak yöntemini hemen yönteminden EvaluateModel() sonra oluşturun:
void UseModelForSinglePrediction(MLContext mlContext, ITransformer model)
{
}
PredictionEngine aşağıdaki kodu 'a ekleyerek derecelendirmeyi tahmin etmek için UseModelForSinglePrediction()öğesini 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ştirmenizi sağlayan kullanışlı bir API'dir.
PredictionEngine iş parçacığı güvenli değildir. Tek iş parçacıklı veya prototip ortamlarda kullanılması kabul edilebilir. Üretim ortamlarında iyileştirilmiş performans ve iş parçacığı güvenliği için PredictionEnginePool hizmetini kullanın. Bu hizmet, uygulamanız genelinde kullanılmak üzere bir PredictionEngine nesne ObjectPool oluşturur.
ASP.NET Core Web API'sinde kullanma PredictionEnginePoolhakkında bu kılavuza bakın.
Uyarı
PredictionEnginePool hizmet uzantısı şu anda önizleme aşamasındadır.
Adlı MovieRating öğesinin testInput bir örneğini oluşturun ve yönteminin sonraki kod satırları olarak aşağıdakileri ekleyerek Tahmin Altyapısı'na UseModelForSinglePrediction() geçirin:
var testInput = new MovieRating { userId = 6, movieId = 10 };
var movieRatingPrediction = predictionEngine.Predict(testInput);
Predict() işlevi tek bir veri sütunu üzerinde tahminde bulunur.
Daha sonra movieId'si 10 olan filmi kullanıcı 6'ya önermek isteyip istemediğinizi belirlemek için tahmin edilen derecelendirmeyi veya Score kullanabilirsiniz. ne kadar yüksek olursa Score, kullanıcının belirli bir filmi beğenme olasılığı o kadar yüksektir. Bu durumda, tahmini derecelendirmesi > 3,5 olan filmleri önerdiğinizi varsayalım.
Sonuçları yazdırmak için yönteminin sonraki kod UseModelForSinglePrediction() satırları olarak aşağıdakileri 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 EvaluateModel() çağırmak için yöntemine çağrısından UseModelForSinglePrediction() sonra sonraki kod satırı olarak aşağıdakileri ekleyin:
UseModelForSinglePrediction(mlContext, model);
Bu yöntemin çıktısı aşağıdaki metne benzer görünmelidir:
=============== Making a prediction ===============
Movie 10 is recommended for user 6
Modelinizi kaydetme
Modelinizi son kullanıcı uygulamalarında tahminlerde bulunmak üzere kullanmak için önce modeli kaydetmeniz gerekir.
SaveModel() Aşağıdaki kodu kullanarak yöntemini hemen yönteminden UseModelForSinglePrediction() sonra oluşturun:
void SaveModel(MLContext mlContext, DataViewSchema trainingDataViewSchema, ITransformer model)
{
}
yöntemine aşağıdaki kodu SaveModel() ekleyerek eğitilen modelinizi 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 ve bu dosya tahminlerde bulunmak için diğer .NET uygulamalarında kullanılabilir.
Yönteminizi UseModelForSinglePrediction() çağırmak için yöntemine çağrısından SaveModel() sonra sonraki kod satırı olarak aşağıdakileri ekleyin:
SaveModel(mlContext, trainingDataView.Schema, model);
Kayıtlı modelinizi kullanma
Eğitilen modelinizi kaydettikten sonra modeli farklı ortamlarda kullanabilirsiniz. Uygulamalarda eğitilmiş bir makine öğrenmesi modelini kullanıma hazır hale getirme hakkında bilgi edinmek için bkz. Eğitilen modelleri kaydetme ve yükleme .
Results
Yukarıdaki adımları izledikten sonra konsol uygulamanızı (Ctrl + F5) çalıştırın. Yukarıdaki tek tahminden elde edilen sonuçlarınız aşağıdakine benzer olmalıdır. Uyarılar veya işleme iletileri görebilirsiniz, ancak bu iletiler netlik 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! Artık film önermek için başarıyla bir makine öğrenmesi modeli oluşturdunuz. Bu öğreticinin kaynak kodunu dotnet/samples deposunda bulabilirsiniz.
Modelinizi geliştirme
Daha doğru tahminler elde edebilmeniz için modelinizin performansını artırmanın çeşitli yolları vardır.
Data
Her kullanıcı ve film kimliği için yeterli örnek içeren daha fazla eğitim verisi eklemek, öneri modelinin kalitesini artırmaya yardımcı olabilir.
Çapraz doğrulama, verileri rastgele alt kümelere bölen (bu öğreticide yaptığınız gibi test verilerini veri kümesinden ayıklamak yerine) ve bazı gruplarını eğitim verisi, bazı gruplarını ise test verisi olarak alan modelleri değerlendirmek için kullanılan bir tekniktir. Bu yöntem, model kalitesi açısından bir eğitim testi bölme işleminin daha iyi performansa sahip olduğunu gösterir.
Özellikler
Bu öğreticide, yalnızca veri kümesi tarafından sağlanan üç Features (user id, movie idve rating) kullanırsınız.
Gerçekte, veri kümesine dahil edilmişlerse, başka öznitelikler veya Features (örneğin, yaş, cinsiyet, coğrafi konum vb.) eklemek isteyebilirsiniz, ancak bu iyi bir başlangıçtır. Daha ilgili Features eklemek, öneri modelinizin performansını iyileştirmeye yardımcı olabilir.
Makine öğrenmesi göreviniz için en ilgili Features hangisi olabileceğinden emin değilseniz, en etkili Features olan öğeyi keşfetmek için ML.NET'in sağladığı Özellik Katkı Hesaplaması (FCC) ile permütasyon yöntemiyle özellik önemini de kullanabilirsiniz.
Algoritma hiper parametreleri
ML.NET iyi varsayılan eğitim algoritmaları sağlarken, algoritmanın hiper parametrelerini değiştirerek performansta daha fazla ince ayar yapabilirsiniz.
için Matrix FactorizationNumberOfIterations ve ApproximationRank gibi hiper parametrelerle denemeler yapabilir ve bunun size daha iyi sonuçlar verip vermediğini görebilirsiniz.
Ö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ı
İşbirliğine dayalı filtrelemeye sahip matris faktörizasyon algoritması, film önerileri gerçekleştirmek için yalnızca bir yaklaşımdır. Çoğu durumda, derecelendirme verilerine sahip olmayabilirsiniz ve yalnızca kullanıcılardan film geçmişiniz olabilir. Diğer durumlarda, yalnızca kullanıcının derecelendirme verilerine sahip olmayabilirsiniz.
| Algorithm | Scenario | Sample |
|---|---|---|
| One Class Matrix Factorization | Bunu yalnızca userId ve movieId'niz varsa kullanın. Bu öneri stili, ortak satın alma senaryosuna veya sık sık birlikte satın alınan ürünlere dayanır. Bu, müşterilere kendi satın alma siparişi geçmişine dayalı bir ürün kümesi önereceği anlamına gelir. | >Deneyin |
| Alan Algılayan Faktörizasyon Makineleri | userId, productId ve derecelendirme dışındaki daha fazla özelliğiniz (ürün açıklaması veya ürün fiyatı gibi) olduğunda öneriler oluşturmak için bunu kullanın. Bu yöntem, işbirliğine dayalı filtreleme yaklaşımını da kullanır. | >Deneyin |
Yeni kullanıcı senaryosu
İşbirliğine dayalı filtrelemede sık karşılaşılan sorunlardan biri, soğuk başlangıç sorunudur; bu, çıkarımlar yapmak için önceki verileri olmayan yeni bir kullanıcınız olduğunda ortaya çıkar. Bu sorun genellikle yeni kullanıcılardan bir profil oluşturmalarını ve örneğin geçmişte gördükleri filmleri derecelendirmelerini isteyerek çözülür. Bu yöntem kullanıcıya biraz yük olsa da, derecelendirme geçmişi olmayan yeni kullanıcılar için bazı başlangıç verileri sağlar.
Kaynaklar
Bu öğreticide kullanılan veriler MovieLens Veri Kümesi'nden türetilir.
Sonraki Adımlar
Bu öğreticide şunların nasıl yapılacağını öğrendiniz:
- Makine öğrenmesi algoritması seçme
- Verilerinizi hazırlama ve yükleme
- Model oluşturma ve eğitma
- Modeli değerlendirme
- Modeli dağıtma ve kullanma
Daha fazla bilgi edinmek için sonraki öğreticiye ilerleyin