Sosyal Ağlarda Makine Öğrenmesi 1 [ Linear Regression]

Bu yazımızda sosyal ağlarda makine öğrenmesine bir örnekle giriş yapıyoruz. En basit makine öğrenmesi yöntemlerinden Linear Regession kullanarak bir Instagram profili için takipçi sayısına göre gelebilecek ortalama beğeni miktarını hesaplamaya çalışacağız.

Elimizde begeni.csv şeklinde bir dosya var. Bu dosyadaki iki sütunda profilin takipçi sayısı ve bu takipçi sayısına göre gelen ortalama beğeni miktarı var. Algoritmamız eğitim kümesindeki verileri kullanarak test kümesindeki takipçi sayılarına göre gelebilecek ortalama beğeniyi bulmaya çalışacak.

İsterseniz başlamadan önce yapacağımız işlemlerin özetini adım adım açıklayayım.

1-Spyder üzerinde File Explorer kısmından proje dosyamın olduğu klasörü ayarladım.

2-Kütüphaneleri içe aktardım.

3-Veri setimi içe aktardım.

4-Veri setimi eğitim ve test kümesi olarak aktardım.

5-Veri setini linear regresyon ile eğittim.

6-Test sonuçlarını tahmin ettim.

7-Bulduğum sonuçları görselleştirdim.

 

Şimdi adım adım gidelim.

1- İlk olarak Spyder üzerinde File Explorer kısmını doğru bir şekilde ayarlayalım.

 

Sık karşılaşılan hata

Soru: Verisetini içe aktaramıyorum. “File is not found” hatası alıyorum. Ne yapabilirim ?

Cevap: File Explorer kısmının doğru klasörde olduğuna emin olun. Eğer bu klasördeki csv dosyanız ile kodlarınızdaki csv çağrımı farklı isimde ise veriseti bulunamayabilir. Örneğin bizim örneğimizde her ikisinde de begeni.csv olarak kullandık.

 

2- Kütüphaneleri içe aktarma işlemi yapalım

Kütüphaneler olmazsa olmazımız.  Burada da 3 adet kütüphaneyi içe aktarıyoruz. Peki bu kütüphaneler ne işe yarıyor.

 

Numpy:  İsmiyle müsemma bir kütüphane. “Numerical Python” ifadesinin kısaltmasından geliyor. Bilimsel hesaplamalarda kullanılan temel bir paket. Özellikle çok boyutlu diziler üzerinde kompleks matematiksel işlemleri yapabiliyoruz. Biz bu kütüphaneyi kullanım kolaylığı için np ismiyle içe aktarıyoruz.  Bunun yerine ahmet de diyebilirdik.  np ifadesinin bir hikmeti yok. Maksat kolay bir kısaltma olsun. Fakat kısaltmalarda da ortak teamüller oluşmuş durumda aklınızda olsun. Genelde numpy, np olarak kısaltılıyor.

Matplotlib: Matplotlib iki boyutlu grafikler hazırlamamızı sağlayan bir kütüphane. Bizim projemizde de takipçiye karşılık düşen ortalama beğenileri bu kütüphaneyle ekrana yazdıracağız. Projemize plt kısaltmasıyla aktardık.

Pandas: Python için yüksek performanslı ve kullanımı kolay veri yapıları için kullanılan bir kütüphane. Özellikle csv ve text dosyaları üzerindeki işlemler rahatlıkla yapılıyor.

 

3- Veri setimizi içe aktaralım

 

Kütüphanelerin ardından veri setimizi yükleme aşamasına geçiyoruz. İlk adımda dataset’in nereden alınacağını söyledik. Pandas kütüphanesinden read_csv komutuyla ‘begeni.csv’ dosyasını çağırdık.

Buradaki iloc ifadesi dikkatinizi çekmiştir. Bunu açalım. Iloc “integer-location based indexing/selection” ifadesinin kısatması. Verisetimizdeki satır ve sütunların numaralar esasıyla seçimi için kullanılıyor. İndeksin sırasını kullanıyor.  Eğer iloc yerine loc kullansaydık indeksin sırasını değil kendisini kullanacaktık. Burada [: , :-1] ifadesi Python dizilerden aşina olduğumuz bir dizilim verinin tamamını alırken X ekseninde [:,:-1] Y ekseninde [:,1] ifadesini kullanıyoruz.

4- Verisetini eğitim ve test kümesi olarak ayıralım

Cross Validation kısmı dikkatinizi çekmiştir. Bu makine öğrenmesi modelinde testin hatasını daha iyi tahmin etmek için model seçiminde kullanılan bir teknik. Bunun dışında da farklı teknikler var. Genel teamüller veri setinin 1/3 kısmını test verisi , 2/3 kısmını ise eğitim verisi olarak kullanmanın iyi sonuç verdiğini söylüyor. Biz de modelimizde bunu uyguladık. Peki random_state ne anlama geliyor ? Diyelim ki verisetiniz üzerinde çalışıyorsunuz fakat her seferinde eğitim ve test kümesi farklı şekilde bölünüyor ve bu sizin işinizi zorlaştırıyor. Böyle bir durumla karşılaşmamanız için yani, verilerin her seferinde aynı eğitim ve test kümelerine bölünmesini sağlamak için burada sabit bir sayı kullanıyoruz. random_state=0 da olabilir random_state=34 de olabilir. Buradaki sayı değiştiğinde verisetiniz farklı eğitim ve test kümelerine bölünecektir.

 

5- Verisetini Linear Regresyon ile eğitelim

 

 

Ver isetimizi eğitim ve test olarak böldükten sonra sıra algoritmamızı eğitme kısmına geldi. Bunun için ilk olarak LinearRegression sınıfını içe aktarıyoruz ve fit() metodunu çağırarak verimizi eğitiyoruz.

 

6- Test sonuçlarını tahmin edelim

Oluşturduğumuz regressor’un predict metoduyla test sonuçlarını tahmin ediyoruz.

7- Bulduğumuz sonuçları görselleştirelim.

 

Burada mathplotlib kütüphanesini kullandık.  Scattter metodu  veri kümemizdeki değerleri kırmızı noktalar olacak şekilde ekrana dağıttık. Scatter İngilizcede saçmak anlamına geliyor. Tabiri caizse ekrana saçtık.

Ardından plot metoduyla linear regresyon ile oluşan modeli mavi bir çizgi olarak ekrana çizdik.  Sonrasında ise başlık, isimlendirme yaparak show() metodu ile ekranda gösterdik.

Yukarıda görüldüğü gibi rastgele olarak seçilen eğitim kümemizdeki değerlere göre mavi çizgi oluşturuldu. Bu bizim tahmin çizgimiz.

 

 

Bu çizgi esas alınarak test kümesi için tahminler yapıldı. Bazı noktalar çok yakından yakalanırken bazıları uzakta kaldı. Bu da modelimizi değiştirmemizin daha iyi olacağı anlamına geliyor.

Bonus : Kodları indirmek için tıklayın.

Soru: Mavi çizgi test kümesinde neden 5000’i geçemedi ? 🙂

 

 

 

 

 

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir