İstanbul Aydın Üniversitesi
Yazılım Mühendisliği Bölümü
UYB 212 Veri Madenciliği ve İş Zekası
Bütünleme Projesi
Python ile Makine Öğrenmesine Giriş:
Neural Networks, Clustering, Outlier Analysis
Verilme Tarihi: 7 Temmuz Salı, Teslim Tarihi: 15 Temmuz Çarşamba, 23:59
Teslim Şekli: Google Classroom’a yüklenecek.
Teslim: Word formatında Lab Raporu ve ilgili Python, RMS ve veri dosyaları aşağıda belirtilen şekilde.
Bu projede önce aşağıda tanıtılan Python kodunu anlayacak ve basit kısa satırlar ekleceksiniz. Python ile
ilgili Türkçe ve İngilizce İnternet’te sayısız kaynak var. Çok fazla geniş tutmayıp sadece ödevi tamamlayacak
kadar Python örneklerine bakmanız yeterli.
Aşağıda adresi verilen Python koduyla oluşturulan bir Sinir Ağı (Neural Network) bir veri seti üzerinde
işlem yaparak ev fiyatlarıyla ilgili tahminde bulunuyor. Bu projede ayrıca Kümeleme (Clustering – KMeans) ve Ayrık Analizi (Outlier Analysis) ile ilgili Rapid Miner uygulamaları da yapacaksınız.
Aşağıdaki adreste Python'da sıfırdan katmanlı bir Sinir Ağı uygulaması nasıl geliştirilir ayrıntılı olarak
anlatılıyor ve kodu veriliyor:
An Introduction to Neural Networks with Implementation from Scratch in Python
https://towardsdatascience.com/an-introduction-to-neural-networks-with-implementation-from-scratchusing-python-da4b6a45c05b
Programda kullanılan veri seti olan Boston Ev Fiyatları’nda (Boston House Prices) 13 giriş değişkeni
(ev özellikleri) ve 1 hedef (veya çıkış) değişkeni (ev fiyatı) bulunuyor. Giriş değişkenlerine göre ev fiyatı
çıkış olarak veriliyor.
Bakınız: sklearn.datasets.load_boston
https://ogrisel.github.io/scikit-learn.org/sklearn-tutorial/modules/generated/sklearn.datasets.load_boston.html
Boston Housing Dataset
https://medium.com/@haydar_ai/learning-data-science-day-9-linear-regression-on-boston-housing-datasetcd62a80775ef
Programda önce temel metotlar yazıldıktan sonra, aşağıdaki kod satırlarıyla veri yükleniyor. Veri önce eğitim
ve test setlerine ayrılıyor. Programda 80-20 oranı kullanılarak, veri eğitim seti (%80’ni) ve test setine (%20’si)
ayrılıyor. Daha sonra sinir ağı parametreleri belirlenip model eğitiliyor ve son olarak eğitim ve test
doğrulukları hesaplanıyor.
data = load_boston() #load dataset
X,Y = data["data"], data["target"] #separate data into input and output features
#split data into train and test sets in 80-20 ratio
X_train,X_test,Y_train,Y_test = train_test_split(X, Y, test_size = 0.2)
1. (25 puan) Veriyi Tanıma ve Ön İşleme
a) Veri setini kaynaklardan öğrenerek tanıtınız. Veri setindeki 13 özellik nelerdir (features), kısaca
açıklayınız.
b) Kaç tane eğitim ve kaç tane test verisi programda kullanılıyor?
c) Programdaki eğitim ve test verilerini CVS formatında iki ayrı dosyaya (boston_training.cvs ve
boston_test.cvs) yazınız. Ayrıca bütün verilerin olduğu boston.cvs dosyasını da üretin.
d) Verinizi bir makine öğrenme algoritmasına uygulamadan önce verilerinizi biraz tanımak iyi bir fikirdir.
Yazacağınız basit bir Python programınya (boston_pre.py) veri setindeki 13 sütunun istatistiğini
alınız. Yani: örnek sayısı (count), ortalama (mean), standart sapma (std), min ve max ve diğerleri
(aşağıdaki örneğe bakınız).
Yardımlar: Python programınızda pandas kullanın (import pandas as pd). Sonra dosyadan
verileri okuyarak (dataframe = pd.read_csv(...)) program veri yapınıza çekir. Faydalı
istatistikleri şimdi dataframe.describe() ile veya
Faydalı istatistikleri
Programdaki data, X_train ve X_test verileri üzerinden doğrudan alabilirsiniz.
Dosyadaki veriler için: pandas ile: (import pandas as pd). Sonra dosyadan verileri
okuyarak (dataframe = pd.read_csv(...)) program veri yapınıza çekir. Faydalı
istatistikleri şimdi dataframe.describe() ile alabilirsiniz.
https://pandas.pydata.org/
https://medium.com/@haydar_ai/learning-data-science-day-9-linear-regression-on-bostonhousing-dataset-cd62a80775ef
Python kodunuzun çıktısı aşağıdaki çıktıya benzeyecektir:
e) Oluştuduğunuz boston.cvs dosyasını RMS’da okuyacak bir proses diyagramı oluşturun (RMS
dosya adları: boston_pre.rmp ve boston_pre.properties). Bu proses diyagramı ve RMS çıktısını
(Boston Ev Fiyatları tablosu) raporunuz koyunuz. Bu veri setindeki 13 özelliğin (attribute) Boxplot
kullanarak grafiğini (chart) oluşturun ve lab raporunuza bu çıktıyı koyun. Grafikteki 13 özellik için 5-
sayı özetini (5-number summary) yani min, Q1, median, Q3, max değerlerini raporunuza yazınız.
2. (25 puan) Linear Regression
a) LinearRegression()’ı ve %80’lik eğitim verisini (X_train ve Y_train) kullanarak, Python ile bir
doğrusal (linear) model oluşturun. Daha sonra %20’lik test verisi (X_test) için ev fiyatlarını (Y_pred)
tahmin edin. Gerçek fiyatları (Y_test) X ekseninde ve tahmini fiyatları (Y_pred) Y ekseninde
gösteren bir grafik üretiniz ve bu grafiği yorumlayınız. Nasıl bir grafik bulmanız gerekiyordu ve bu
grafik ne anlama geliyor? Elde edeceğiniz grafik aşağıdaki gibi olacaktır.
b) Doğrusal modelinizin hatasını MSE (Mean Squeare Error) yöntemiyle bulan Python satırlarını koda
ekleyin. Bulduğunuz MSE nedir? Sonucu yorumlayınız.
c) Rapid Miner’da training.cvs ve test.cvs veri setlerini kullanan ev fiyat tahmini yapan Linear
Regresyon operatörünün kullanıldığı bir proses diyagramı kurunuz ve raporunuza koyarak kısaca
açıklayınız.
d) Rapid Miner’da elde ettiğimiz model nedir? Kısaca modeli yorumlayınız.
e) Rapid Miner’da elde ettiğimiz başarı sonucunu MSE (Performace Vector) nedir? Yukarıda (b)
şıkkında Python kodu ile elde ettiğiniz MSE ile karşılaştırarak kısaca karşılaştırınız.
3. (25 puan) Sinir Ağı
Verilen programda Boston Ev Fiyatları verisi yüklenip eğitim ve test verilerine ayrıldıktan sonra
aşağıdaki satırlarla, 13 giriş ve bir çıkışa sahip bir sinir ağının parametreleri belirlenip model eğitiliyor
ve son olarak eğitim ve test doğrulukları hesaplanıyor.
#set layer sizes, do not change the size of the first and last layer
layer_sizes = [13, 5, 5, 1]
#set number of iterations over the training set
# (also known as epochs in batch gradient descent context)
num_iters = 1000
learning_rate = 0.03 #set learning rate for gradient descent
params = model(X_train, Y_train, layer_sizes, num_iters, learning_rate) #train the model
#get training and test accuracy
train_acc, test_acc = compute_accuracy(X_train, X_test, Y_train, Y_test, params)
print('Root Mean Squared Error on Training Data = ' + str(train_acc))
print('Root Mean Squared Error on Test Data = ' + str(test_acc))
a) (2 puan) Verilen örnek program, açıklamaları ve ders notlarını kullanarak, bu sinir ağının şu
ayrıntılarını anlatınız:
a. Gizli katman sayısının işlemlere ve tahminlere olan etkisi, gizli katman sayısı nasıl seçilir?
b. Gizli katman sayısı arttırıldıkça ne oluyor? Bu daha iyi tahmin yapmak için iyi midir, yoksa
kötü müdür? Tam uygunluk (Overfitting) ile ilişkisi nedir? Raporunuza çıktılar koyarak bu
soruları açıklayınız.
c. Aktivasyon fonksiyonu nedir ve nasıl seçilir, programda hangisi nasıl kullanılmış?
d. Programdaki sinir ağının öğrenme parametreleri nelerdir? Bu parametreler nasıl seçilir, ağ
nasıl öğrenir, ağ nasıl tahminde bulunur?
Önemli ikaz: İnternet’ten bulunan ve bu soru ile hiç alakası olmayan kopyala-yapıştır cevaplar
kabul edilmeyecektir.
b) (2 puan) Programın layer_sizes = [13, 5, 5, 1] ifadesiyle verilen parametrelere göre göre
oluşturulan sinir ağının diyagramını çiziniz. Bu diyagramda giriş ve çıkışların isimleri, nöron yapıları
ve bağlantıları tam olarak gösterilecek. Ayrıca bir nöronun ayrıntılı giriş ve çıkış ilişkisini gösteren
basit diyagramı çizerek matematiksel ilişkilerini yazınız.
c) (2 puan) Verilen programda Gradient Decent algoritması nasıl çalışıyor? Batch Gradient Descent
algoritmasının farkları ve avantajları nelerdir, karşılaştırınız? Bilgi için:
https://cs231n.github.io/optimization-1/#gd
d) (2 puan) Verilen programın model, forward_propagation, backward_propagation ve predict gibi
metotlarını ve önemli değişkenlerini kısaca açıklayınız.
e) (2 puan) Program çalıştırıldığında ekran çıktısını raporunuz koyarak, iterasyonlar, maliyet (cost),
RMSE gibi çıktıları kısaca açıklayınız. Bunlar ne gösteriyor?
f) (5 puan) Verilen programa scikit-learn kütüphanesinden Confusion Matrix oluşturmak için
gereken ek satırları yazarak bu matrisi oluşturun ve bu yeni dosyayı neural_networkCM.py adıyla
saklayın. Çıktıyı raporunuza koyarak kısaca açıklayınız.
g) (5 puan) Rapid Miner’da training.cvs ve test.cvs veri setlerini kullanan ev fiyat tahmini yapan
Neural Network operatörünün kullanıldığı bir proses diyagramı (neural_network.rmp) kurunuz ve
bu diyagramı ve yaptığınız ayarları raporunuza koyarak kısaca açıklayınız.
h) (5 puan) Rapid Miner’da elde ettiğimiz model ve başarı sonuçları nedir? Modeli ve başarı sonuçlarını
raporunuza koyarak kısaca yorumlayınız. Yukarıda (g) şıkkında Python kodu ile elde ettiğiniz
Confusion Matrix ile karşılaştırarak kısaca açıklayınız.
4. (25 puan) Clustering / Outlier Analysis
a) (5 puan) Kümeleme (Clustering) ve Aykırı Analizi (Outlier Analysis) veri madenciliğinde ne zaman
hangi teknikler kullanılarak yapılır?
b) (5 puan) Boston Ev Fiyatlarını RMS’da Clustering (k-Means) operatörü kullanarak ve küme sayısı
parametresiyle oynayarak farklı kümemelere ayıran, değişik renkli noktalar olarak scatter çizim
(plot) ile gösteren prosesi (boston_clustering.rmp) oluşturun ve çıktıyı üretiniz. Proses
diyagramını raporunuza koyarak kullandığınız parametrelerle beraber yaptığınız kümeleme işlemini
kısaca açıklayınız.
c) (5 puan) Boston Ev Fiyatları veri setinindeki genel dağılımdan farklı aykırı ev fiyatları verilerini
(outliers) RMS’da ilgili operatörleri kullanarak bir proses (boston_outliers.rmp) oluşturarak
tespit edin ve temizleyiniz. Proses diyagramını raporunuza koyarak kullandığınız parametrelerle
beraber yaptığınız temizleme işlemini kısaca açıklayınız.
d) (10 puan) Boston Ev Fiyatları verisi setine RMS’de yaptığımız gibi benzer kümeleme ve aykırı
durum analizini Pyhton kodu ile yapabilecek basit bir program geliştiriniz (clustering_outliers.py)
ve çıktılarını alıp raporunuza koyarak yaptığınız kümeleme ve temizleme işlemlerini kısaca
açıklayınız.
Bazı Faydalı Kaynaklar
Python
Python home: https://www.python.org/downloads/
Python için en popüler ortam olan PyCharm IDE'sini yükleyebilirsiniz. Öğrenciler ve akademik personel için ücretsiz
olan profesyonel sürümünü (PyCharm Professional 2020.1) kullanabilirsiniz:
https://www.jetbrains.com/pycharm/
Confusion Matrix
sklearn.metrics.plot_confusion_matrix
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.plot_confusion_matrix.html
Example of Confusion Matrix in Python
https://datatofish.com/confusion-matrix-python/
Confusion Matrix Visualization
https://medium.com/@dtuk81/confusion-matrix-visualization-fc31e3f30fea
Sinir Ağları (Türkçe)
Sıfırdan Python İle Neural Network (Yapay Sinir Ağ ) Oluşturmak : Bölüm 1 — Yapay Sinir Ağları ve Nöronlar Nasıl
Çalışır?
https://medium.com/@sergencansiz/s%C4%B1f%C4%B1rdan-python-i%CC%87le-neural-network-yapay-sinira%C4%9F-olu%C5%9Fturmak-b%C3%B6l%C3%BCm-1-yapay-sinir-a%C4%9Flar%C4%B1-6209b27a17c1
Sıfırdan Python İle Neural Network (Yapay Sinir Ağ ) Oluşturmak: Bölüm 2— Yapay Sinir Ağlarının Eğitilmesi
https://medium.com/@sergencansiz/s%C4%B1f%C4%B1rdan-python-i%CC%87le-neural-network-yapay-sinira%C4%9F-olu%C5%9Fturmak-b%C3%B6l%C3%BCm-2-yapay-sinir-a%C4%9Flar%C4%B1n%C4%B1n6fc09c0a2fbf
Bütünleme Projesi Nasıl Teslim Edilecek?
Lütfen aşağıdaki dosyaları ve adlandırmaları harfiyen takip ediniz. Aksi durumda final projeniz eksik
değerlendirilebilir. Çünkü farklı formatlarda teslim edilen dosyaların değerlendirmesi çok zor oluyor.
Google Classroom’a bir tane zip dosya yükleceksiniz: BütünlemeProjesi.zip
BütünlemeProjesi.zip içinde aşağıdaki BütünlemeProjeRaporu.docx ve 4 zip dosya bulunacak:
boston_preprocess.zip: İçinde aşağıdaki dosyalar bulunacak:
boston.cvs
boston_training.cvs
boston_test.cvs
boston_pre.py
boston_pre.rmp
boston_pre.properties
linear_regression.zip:
linear_regression.py
linear _regression.rmp
linear _regression.properties
neural_network.zip:
neural_networkCM.py
neural_network.rmp
neural_network.properties
clustering_outliers.zip:
boston_clustering.rmp
clustering.properties
boston_outliers.rmp
outliers.properties
clustering_outliers.py
Python ile Makine Öğrenmesi konusunda uzmanlaşmış bir ekibe sahip olan Ödevcim, size Phyton programında ve tüm alanlarda destek olmak için burada. Dilerseniz tüm ödevinizi biz hazırlayalım, dilerseniz size dilediğiniz…