Python ile Makine Öğrenmesine Giriş
- Elimizde yaş ve cinsiyetlere göre müzik tarzını belirten bir veri seti bulunmaktadır. Bu veri setini kullanarak oluşturacağımız bir makine öğrenmesi modeli ile yaş ve cinsiyeti verilen kişinin müzik tarzını tahmin etmeyi öğreneceğiz.
Veri Seti (music.csv)
xxxxxxxxxxage,gender,genre20,1,HipHop23,1,HipHop25,1,HipHop26,1,Jazz29,1,Jazz30,1,Jazz31,1,Classical33,1,Classical37,1,Classical20,0,Dance21,0,Dance25,0,Dance26,0,Acoustic27,0,Acoustic30,0,Acoustic31,0,Classical34,0,Classical35,0,Classicalxxxxxxxxxximport pandas as pdfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_scoredf_musicdata= pd.read_csv('mldataset/music.csv')# genre(tarz) sütunundaki verileri kaldırıp sadece yaş ve cinsiyet verilerini alarak X değişkenine atama yapX = df_musicdata.drop(columns=['genre'])# genre(tarz) sütunundaki verileri y değişkenine atama yapy = df_musicdata['genre']# train_test_split fonksiyonu ile %20 test %80 train(eğitim) verisi olarak kullanmak üzere# veri setini parçalaX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)# Makine öğrenmesi sınıflandırma algoritmasını(model) Karar Ağacı olarak kullanmodel = DecisionTreeClassifier()# model'i X eğitim ve y eğitim verileri ile hazırlamodel.fit(X_train, y_train)"""# manuel olarak yaşı 21 cinsiyeti erkek(1) olan yaşı 22 cinsiyeti kadın(0) olan kişilerin# hangi tarz müzik sevdiğini aşağıdaki gibi tahmin edebiliriz.# predictions = model.predict([ [21,1], [22,0] ])"""# train_test_split fonksiyonu ile veri setini parçalayıp edindiğimiz X test veri setini aşağıdaki gibi tahmin edebiliriz.predictions = model.predict(X_test)# aşağıdaki fonksiyon ile oluşturduğumuz makine öğrenmesi modelinin doğruluğunu kontrol edebiliriz.accuracy_score(y_test, predictions) # Bir kaç defa çalıştırdıktan sonra 1.0, 0.75, 0.5 gibi doğruluk değerleri ediniyoruz.# Eğer test_size=0.2 yani %20 yerine daha yüksek verilseydi yani eğitim(train) için %80'den daha düşük değerler verilseydi# accuracy_score yani doğruluk skoru(değeri, oranı) daha düşük olacaktı.# denemek için test_size=0.8 olacak şekilde verirsek # 0.6, 0.2, 0.4, 0.4666666666666667, 0.13333333333333333, 0.26666666666666666 gibi doğruluk skorları ediniriz.Makine Öğrenmesi ile Oluşturulan(Eğitilen) Modelin Kaydedilmesi
- Makine Öğrenmesi modelinin eğitilmesi bazen uzun sürebilir. Yeni verilerle tahmin yaparken tekrar tekrar modeli eğitmek zaman israfı olacaktır. Aşağıdaki yapıyı kullanarak oluşturduğumuz modeli kaydedip daha sonra yeni verilerle bu modeli kullanarak tahmin yapabiliriz.
xxxxxxxxxximport pandas as pdfrom sklearn.tree import DecisionTreeClassifierimport joblibdf_musicdata= pd.read_csv('mldataset/music.csv')X = df_musicdata.drop(columns=['genre'])y = df_musicdata['genre']model = DecisionTreeClassifier()model.fit(X, y)joblib.dump(model, 'music-recommender.joblib')joblibmodülündekidumpfonksiyonunu kullanarak.joblibuzantılımusic-recommenderdosyasına makine öğrenmesi modelini kaydediyoruz.- Dosya içeriği aşağıdaki gibidir
xxxxxxxxxx8004 954d 0200 0000 0000 008c 1573 6b6c6561 726e 2e74 7265 652e 5f63 6c61 73736573 948c 1644 6563 6973 696f 6e54 7265...Kayıtlı Modelin Okunması ve Tahmin
- Kaydedilen modeli aşağıdaki gibi okuyup tahmin yapabiliriz.
xxxxxxxxxximport pandas as pdfrom sklearn.tree import DecisionTreeClassifierimport joblib#LOAD MODELmodel = joblib.load('music-recommender.joblib')predictions = model.predict([ [21,1] ]) # yaşı 21 olan bir erkek(1) için müzik tarzını tahmin et.print(predictions) # array(['HipHop'], dtype=object)Karar Ağacının Görselleştirilmesi
- Kullandığımız veri setine göre oluşturduğumuz modeli
.dotuzantılı olarak kaydedip görselleştirmeyi VScode'da Graphviz (dot) extension'ı ile yapabiliriz.
xxxxxxxxxximport pandas as pdfrom sklearn.tree import DecisionTreeClassifierfrom sklearn import treedf_musicdata= pd.read_csv('mldataset/music.csv')X = df_musicdata.drop(columns=['genre'])y = df_musicdata['genre']model = DecisionTreeClassifier()model.fit(X, y)tree.export_graphviz(model, out_file='music-recommender.dot', feature_names=['age','gender'], class_names=sorted(y.unique()), label='all', rounded=True, filled=True )music-recommender.dotadındaki dosyanın içeriği aşağıdaki gibidir.
xxxxxxxxxxdigraph Tree {node [shape=box, style="filled, rounded", color="black", fontname=helvetica] ;edge [fontname=helvetica] ;0 [label="age <= 30.5\ngini = 0.778\nsamples = 18\nvalue = [3, 6, 3, 3, 3]\nclass = Classical", fillcolor="#e5fad7"] ;1 [label="age <= 25.5\ngini = 0.75\nsamples = 12\nvalue = [3, 0, 3, 3, 3]\nclass = Acoustic", fillcolor="#ffffff"] ;0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;2 [label="gender <= 0.5\ngini = 0.5\nsamples = 6\nvalue = [0, 0, 3, 3, 0]\nclass = Dance", fillcolor="#ffffff"] ;1 -> 2 ;3 [label="gini = 0.0\nsamples = 3\nvalue = [0, 0, 3, 0, 0]\nclass = Dance", fillcolor="#39e5c5"] ;2 -> 3 ;4 [label="gini = 0.0\nsamples = 3\nvalue = [0, 0, 0, 3, 0]\nclass = HipHop", fillcolor="#3c39e5"] ;2 -> 4 ;5 [label="gender <= 0.5\ngini = 0.5\nsamples = 6\nvalue = [3, 0, 0, 0, 3]\nclass = Acoustic", fillcolor="#ffffff"] ;1 -> 5 ;6 [label="gini = 0.0\nsamples = 3\nvalue = [3, 0, 0, 0, 0]\nclass = Acoustic", fillcolor="#e58139"] ;5 -> 6 ;7 [label="gini = 0.0\nsamples = 3\nvalue = [0, 0, 0, 0, 3]\nclass = Jazz", fillcolor="#e539c0"] ;5 -> 7 ;8 [label="gini = 0.0\nsamples = 6\nvalue = [0, 6, 0, 0, 0]\nclass = Classical", fillcolor="#7be539"] ;0 -> 8 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;}- VScode'da Graphviz (dot) extension'ı ile
.dotuzantılı dosyamızı aşağıdaki gibi görselleştirebiliriz.

Yorumlar