C# ML.NET ile Makine Öğrenimine Giriş

boole

Ar-Ge Ekibi Proje Yöneticisi
12 Nis 2019
735
201
.Net Core
RGQJLC.gif
Makine Öğrenmesi nedir?

Makine öğrenimi yapay zekanın bir alt alanıdır . Makine öğreniminin amacı genel olarak verilerin yapısını anlamak, analizini ve bu veriyi kullanıclar tarafından anlaşılabilir bir şekilde modellenmesidir.örnek olarak sistem şu şekilde işler, tahmine dayalı bir algoritma tahmine dayalı bir model oluşturulur. Ardından, tahmine dayalı modele veriler sağladığınızda modeli eğiten verilere dayalı bir tahmin alırsınız.Günümüzdeki herhangi bir teknoloji kullanıcısı uygulamalar ararıcılığıyla, makine öğreniminden faydalanmıştır.

En bilinen örneklerden biri Facebook da bulunan Haber Kaynağı‘dır. Haber Kaynağı, her üyenin özet akışını özgün kılmak için makine öğreniminden faydalanmaktadır. Bir üye belirli bir arkadaşının yayınlarını okumak veya beğenmek için sık sık kaydırma yapmayı durdurursa, Haber Kaynağı o arkadaşın etkinliğinin daha önde ve haber kaynagında daha fazla göstermekte olucaktır.Görününenin arkasında, yazılım, kullanıcı verisindeki değerleri tanımlamak için istatistik analizini ve tahmin analitiği kullanmatadır ve bu analizi, Haber Kaynağı’nı doldurmak için kullanır. Üyenin artık arkadaşlarının yazılarına yapılan etkileşimler örn: okuma, beğenme veya yorum yapmayı bırakmaması durumunda, veri kümesine yeni veriler eklenecek ve Haber Kaynağı buna göre yeniden düzenlenicektir.

• İş zekası ve analitik sağlayıcıları, kullanıcıların potansiyel olarak önemli veri noktalarını otomatik olarak tanımlamasına yardımcı olmak için yazılımlarında makine öğrenimini kullanır.

• İnsan kaynakları sistemleri, etkili çalışanların özelliklerini tanımlamak için öğrenme modellerini kullanır ve açık pozisyonlara en iyi adayları bulmak için bu bilgiye güvenir.

• yüz tanıma teknolojisi sosyal medya platformlarında kullanıcıların paylaştıkları görseller deki arkadaşlarını etiketlemesine ve paylaşmasına yardımcı olmasını sağlar.

• Optik karakter tanıma (OCR) teknolojisi, metin görüntülerini hareketli bir türe dönüştürür. Makine öğrenimi ile desteklenen öneri motorları, kullanıcıların tercihlerine göre film veya televizyon programlarının nelerin izleyeceğini önermektedir.Örn: netflix de izlediğiniz ve beğendiğiniz içeriklere göre önerilen içeriklerin çıkması.

• Müşteri ilişkileri yönetimi (CRM) sistemleri, e-postaları analiz etmek için öğrenim modellerini kullanır ve ilk olarak en önemli mesajlara yanıt vermek için satış ekibi üyelerini uyarır. Daha gelişmiş sistemlerde potansiyel olarak en etkili yanıtları önerebilir.

RGQJLC.gif

Makine Öğrenme Yöntemleri
Makine öğrenmede görevler genellikle bir çok kategorilere ayrılır. Bu kategoriler, öğrenmenin nasıl alındığına veya geliştirilen sisteme öğrenmeyle ilgili geri beslemenin nasıl verildiğine dayanır.

RGQJLC.gif

Denetimli Öğrenme
Denetlenen öğrenmede, bilgisayar istenen çıktılarla etiketlenmiş örnek girdileri ile donatılmıştır. Bu yöntemin amacı, algoritmanın, hataları bulmak için gerçek çıktısını “öğretilen” çıktılarla karşılaştırarak “öğrenmesini” sağlamak ve buna göre modeli değiştirmek için yapabilmesidir.Denetimli öğrenmenin yaygın olarak kullanıldığı durum, istatistiksel olarak gelecekteki olası olayları öngörmek için geçmiş verileri kullanmaktadır. Gelecekteki dalgalanmaları öngörmek için tarihi borsa bilgilerini kullanabilir veya spam e-postaları filtrelemek için kullanılabilirler.

RGQJLC.gif

Denetimsiz Öğrenme
bu öğrenmede, veriler etiketsizdir, bu nedenle öğrenme algoritması, girdi verileri arasında ortak noktalar bulmak için bırakılmıştır. Etiketsiz veriler etiketli verilere göre daha bol olduğundan, denetimsiz öğrenmeyi kolaylaştıran makine öğrenme yöntemleri özellikle değerlidir.

RGQJLC.gif

Karar Ağacı Öğrenme
Makine öğrenme ve veri madenciliği ile çalışırken, karar ağaçları bir tahmin modeli olarak kullanılır. Karar ağacı öğrenmesinin amacı, girdi değişkenlerine dayanan bir hedefin değerini tahmin edecek bir model oluşturmaktır. ne zaman net bir sonuca ulaştığını anlamak gibi çeşitli belirlemeler yapılmasına ihtiyaç vardır.

RGQJLC.gif

Derin Öğrenme
Derin öğrenme, insan beyninin hafif ve sesi uyarıları görme ve işitme sürecine nasıl taklit edebileceğini taklit eder. Derin bir öğrenme mimarisi, biyolojik sinir ağlarından esinlenmiştir.
Şu anda kullanılan ve geliştirilen makine öğrenme algoritmaları arasında derinlemesine öğrenme en çok bilgiyi absorbe eder ve bazı bilişsel görevlerde insanlara yenebilir. Bu özniteliklerden dolayı, derin öğrenme, yapay zeka alanında önemli bir potansiyel olan yaklaşım haline geldi

RGQJLC.gif


Ml.net Projeye Dahil Etmek için

9bX1rQ.gif


RGQJLC.gif

Gelin Hadi Ufak Bir Çalışma Yapalım​
Clasımızda Oluşturduğumuz Fonksiyon
Kod:
public static double arabaFiyatTahmin(int koltukAdeti,int paketTuru, int yasi)
        {
            double fiyat = 0;
            fiyat += koltukAdeti *  5000;
            fiyat += paketTuru * 2000;
            fiyat -= yasi * 1000;
            return fiyat;
   }
/* Açıklama kısmı
burada temel olarak yaptığımız işlem şu şekilde aracın fiyatını hesaplamak için belirleyici özellikleri parametre olarak atıyoruz daha sonra bunlar
in fiyata nasıl etki yapacağını belirliyoruz başlangıç olarak fiyatı=0 olarak aldık
fiyat += koltukAdeti * 5000; bu kısımda araçda koltuk adetine göre fiyat artışına gittik yani araç daki koltuk sayısı başına araç fiyatında 5000TL artış gerçekleşmektedir.
fiyat -= yasi * 1000; bu kısmında ise fiyat dan aracın yaşı * 1000TL olarak düşüş sağladık yani araç yaşı büyüdükçe değeri düşüyor (antika olmayan araçlar için)
*/

Main Fonksiyonumuza Ekliyeceğimiz Kodlar
Kod:
            Console.Write("Koltuksayisi giriniz: ");  
            int koltukSayısi= Convert.ToInt32(Console.ReadLine()); 
           
            Console.Write("paket türünü giriniz en iyi 3 en kötü 1: ");
            int paket = Convert.ToInt32(Console.ReadLine());

            Console.Write("aracın yaşını giriniz: ");
            int yas = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Araç Fiyatı Tahmini olarak:"+arabaFiyatTahmin(koltukSayısi, paket, yas)+"TL");
            
            Console.ReadLine();
// öncelikle her seferınde kullanıcıya değerleri girmesini söyledik
// yine her seferinde girilşini istediğmiz değerleri kullanıcıdan aldık
// son olarak burada da fonksiyonumuzu kullanıcıdan aldığımız değerler doğrultusunda yazdırdık.

Program Çıktısı:
5vjVAu.png

burada neden if lerle bir yapı oluşturup örnek yaşı 10 ise 10.000TL fiyat dan düşebilirdik fakat bu her durmu ayrı ayrı yazmamızı gerektirmekle birlikte program yükünü çok büyük ölçüde arttırıcaktır. bunun yerine böyle bir yapı sayesinde bütün durumları kolaylıla hesaplayabilir ve değerlendirme yapabiliriz.
 
Son düzenleme:

bazr09

Üye
3 Haz 2017
158
0
Gayet güzel bir konuya değinilmek istenmiş fakat yapılan örnek projede ML.NET paketi eklenmesine rağmen kullanılmamış, sadece belirli bir formülle fiyatını bilmediğimiz arabanın hesaplaması yapılmış.


ML.NET kütüphanesi dolayısıyla makine öğrenmesini kullanarak aynı örnek üzerinde bir başlangıç uygulaması yapabiliriz;

Gayet güzel bir konuya değinilmek istenmiş fakat yapılan örnek projede ML.NET paketi eklenmesine rağmen kullanılmamış, sadece belirli bir formülle fiyatını bilmediğimiz arabanın hesaplaması yapılmış.


ML.NET kütüphanesi dolayısıyla makine öğrenmesini kullanarak aynı örnek üzerinde bir başlangıç uygulaması yapabiliriz;


Kod:
[/COLOR]
[COLOR=Silver]using System;
using Microsoft.ML;
using Microsoft.ML.Data;

public class ArabaData
{
    public float KoltukAdedi { get; set; }
    public float Paket { get; set; }
    public float Yas { get; set; }
    public float Fiyat { get; set; }
}

public class Tahmin
{
    [ColumnName("Score")]
    public float Fiyat { get; set; }
}

class Program
{
    static **** Main(string[] args)
    {
        MLContext mlContext = new MLContext();

        // Veri seti import edilir.
        ArabaData[] houseData = 
        {
            // Fiyat Hesap Formülü = KoltukAdedi * 5 + Paket * 2 - Yas [+- 1]
            new ArabaData() { KoltukAdedi = 4, Paket = 2, Yas = 7, Fiyat = 16.76f },
            new ArabaData() { KoltukAdedi = 6, Paket = 3, Yas = 10, Fiyat = 27.04f },
            new ArabaData() { KoltukAdedi = 2, Paket = 1, Yas = 2, Fiyat = 10.32f },
            new ArabaData() { KoltukAdedi = 2, Paket = 3, Yas = 4, Fiyat = 12.54f },
            new ArabaData() { KoltukAdedi = 2, Paket = 3, Yas = 5, Fiyat = 12.00f },
            new ArabaData() { KoltukAdedi = 4, Paket = 1, Yas = 4, Fiyat = 17.27f },
            new ArabaData() { KoltukAdedi = 4, Paket = 3, Yas = 8, Fiyat = 17.89f }
        };
        IDataView trainingData = mlContext.Data.LoadFromEnumerable(houseData);

        // Eğitilecek model için data hazırlanır.
        var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "KoltukAdedi", "Paket", "Yas" })
            .Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Fiyat", maximumNumberOfIterations: 10000));

        // Model eğitilir.
        var model = pipeline.Fit(trainingData);

        // Fiyatı tahmin edilecek arabanın özellikleri girilir.
        var tahminAraba = new ArabaData() { KoltukAdedi = 4, Paket = 2, Yas = 4 };

        //Tahmin yapılır.
        var fiyat = mlContext.Model.CreatePredictionEngine<ArabaData, Tahmin>(model).Predict(tahminAraba);

        //Karşılaştırma için beklenen fiyat aralığı hesaplanır.
        var beklenenFiyat = tahminArab****oltukAdedi * 5 + tahminAraba.Paket * 2 - tahminAraba.Yas;

        Console.WriteLine($"{tahminArab****oltukAdedi} kapılı, {tahminAraba.Paket} paketinde, {tahminAraba.Yas} yıllık araba için;\n");
        Console.WriteLine($"Tahmini Fiyat : {fiyat.Fiyat} bin TL");
        Console.WriteLine($"Beklenen Fiyat: { beklenenFiyat-1 } - {beklenenFiyat+1} bin TL");
    }
}
[/COLOR]
[COLOR=Silver]


Çıktı:



Ek olarak çok fazla değişken (KoltukSayisi, Paket, Yas) olduğundan ve yeterli bir dataset ile eğitmediğimizden, eğilmiş model sonrasında hata hesabı yapılarak tekrar üstüne eğitilmediğinden bazen beklenmedik sonuçlar verebilir. Bu dediklerim yapılarak ML uygulamaları daha ileri seviyeye de taşınabilir.

Yine de başlangıç için merak eden arkadaşlara yeterli bir kod sunmuş olalım. Senin de eline sağlık.
 
Son düzenleme:

boole

Ar-Ge Ekibi Proje Yöneticisi
12 Nis 2019
735
201
.Net Core
Gayet güzel bir konuya değinilmek istenmiş fakat yapılan örnek projede ML.NET paketi eklenmesine rağmen kullanılmamış, sadece belirli bir formülle fiyatını bilmediğimiz arabanın hesaplaması yapılmış.


ML.NET kütüphanesi dolayısıyla makine öğrenmesini kullanarak aynı örnek üzerinde bir başlangıç uygulaması yapabiliriz;

Gayet güzel bir konuya değinilmek istenmiş fakat yapılan örnek projede ML.NET paketi eklenmesine rağmen kullanılmamış, sadece belirli bir formülle fiyatını bilmediğimiz arabanın hesaplaması yapılmış.


ML.NET kütüphanesi dolayısıyla makine öğrenmesini kullanarak aynı örnek üzerinde bir başlangıç uygulaması yapabiliriz;


Kod:
[/COLOR]
[COLOR=Silver]using System;
using Microsoft.ML;
using Microsoft.ML.Data;

public class ArabaData
{
    public float KoltukAdedi { get; set; }
    public float Paket { get; set; }
    public float Yas { get; set; }
    public float Fiyat { get; set; }
}

public class Tahmin
{
    [ColumnName("Score")]
    public float Fiyat { get; set; }
}

class Program
{
    static **** Main(string[] args)
    {
        MLContext mlContext = new MLContext();

        // Veri seti import edilir.
        ArabaData[] houseData = 
        {
            // Fiyat Hesap Formülü = KoltukAdedi * 5 + Paket * 2 - Yas [+- 1]
            new ArabaData() { KoltukAdedi = 4, Paket = 2, Yas = 7, Fiyat = 16.76f },
            new ArabaData() { KoltukAdedi = 6, Paket = 3, Yas = 10, Fiyat = 27.04f },
            new ArabaData() { KoltukAdedi = 2, Paket = 1, Yas = 2, Fiyat = 10.32f },
            new ArabaData() { KoltukAdedi = 2, Paket = 3, Yas = 4, Fiyat = 12.54f },
            new ArabaData() { KoltukAdedi = 2, Paket = 3, Yas = 5, Fiyat = 12.00f },
            new ArabaData() { KoltukAdedi = 4, Paket = 1, Yas = 4, Fiyat = 17.27f },
            new ArabaData() { KoltukAdedi = 4, Paket = 3, Yas = 8, Fiyat = 17.89f }
        };
        IDataView trainingData = mlContext.Data.LoadFromEnumerable(houseData);

        // Eğitilecek model için data hazırlanır.
        var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "KoltukAdedi", "Paket", "Yas" })
            .Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Fiyat", maximumNumberOfIterations: 10000));

        // Model eğitilir.
        var model = pipeline.Fit(trainingData);

        // Fiyatı tahmin edilecek arabanın özellikleri girilir.
        var tahminAraba = new ArabaData() { KoltukAdedi = 4, Paket = 2, Yas = 4 };

        //Tahmin yapılır.
        var fiyat = mlContext.Model.CreatePredictionEngine<ArabaData, Tahmin>(model).Predict(tahminAraba);

        //Karşılaştırma için beklenen fiyat aralığı hesaplanır.
        var beklenenFiyat = tahminArab****oltukAdedi * 5 + tahminAraba.Paket * 2 - tahminAraba.Yas;

        Console.WriteLine($"{tahminArab****oltukAdedi} kapılı, {tahminAraba.Paket} paketinde, {tahminAraba.Yas} yıllık araba için;\n");
        Console.WriteLine($"Tahmini Fiyat : {fiyat.Fiyat} bin TL");
        Console.WriteLine($"Beklenen Fiyat: { beklenenFiyat-1 } - {beklenenFiyat+1} bin TL");
    }
}
[/COLOR]
[COLOR=Silver]


Çıktı:



Ek olarak çok fazla değişken (KoltukSayisi, Paket, Yas) olduğundan ve yeterli bir dataset ile eğitmediğimizden, eğilmiş model sonrasında hata hesabı yapılarak tekrar üstüne eğitilmediğinden bazen beklenmedik sonuçlar verebilir. Bu dediklerim yapılarak ML uygulamaları daha ileri seviyeye de taşınabilir.

Yine de başlangıç için merak eden arkadaşlara yeterli bir kod sunmuş olalım. Senin de eline sağlık.

Eline saglik güzel bir ekleme olmuş fakat konuya giriş başlığı atarak konuya veya c# a uzak insanların bile anlayabilicegi şekilde düzenledim ki yaptığım aciklamalara bakılırsa bunu görmek zor değil ama ekleme yapmanız bir bakıma faydali olmuş teşekkürler.
 

Mapzilla

Adanmış Üye
23 Eyl 2016
7,205
13
Eline saglik güzel bir ekleme olmuş fakat konuya giriş başlığı atarak konuya veya c# a uzak insanların bile anlayabilicegi şekilde düzenledim ki yaptığım aciklamalara bakılırsa bunu görmek zor değil ama ekleme yapmanız bir bakıma faydali olmuş teşekkürler.

Bana bahane yapıyorsunuz gibi geldi. Ha bu konuda kütüphaneyi anlattınız, ha diğer konuda anlattınız. Ne farkı var? İnsanda kafa karıştırma falan yapmaz, merak etmeyin. Şayet hâlâ itiraz ediyorsanız; bu konu spamladığınız anlamına gelir.
 

boole

Ar-Ge Ekibi Proje Yöneticisi
12 Nis 2019
735
201
.Net Core
Bana bahane yapıyorsunuz gibi geldi. Ha bu konuda kütüphaneyi anlattınız, ha diğer konuda anlattınız. Ne farkı var? İnsanda kafa karıştırma falan yapmaz, merak etmeyin. Şayet hâlâ itiraz ediyorsanız; bu konu spamladığınız anlamına gelir.

bak arkadaş eksik olduğunu belirtmiş güzelce ekleme yapmış ben teşekkür etmişim konu kapanmış
sen gelip boş yapmış sın bildiğin bir bilgin varsa veya copy/paste yapmayı biliyorsan ekle yoksa bu konu polemik yaratmak için açılmadı.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.