Python'daki İlk Karar Ağacınız (NFL Combine)

Feb 22 2023
Bir oyuncunun NFL Combine'daki performansı, draft edilip edilmeyeceğini tahmin edebilir mi? Öğrenmek için bir model oluşturalım! Karar Ağacı nedir? Karar ağacı, sınıflandırma ve regresyon görevleri için kullanılan bir makine öğrenimi algoritmasıdır. Bir tür denetimli öğrenme algoritmasıdır, yani etiketli veriler üzerinde eğitilir.

Bir oyuncunun NFL Combine'daki performansı, draft edilip edilmeyeceğini tahmin edebilir mi? Öğrenmek için bir model oluşturalım!

Karar Ağacı nedir?

Karar ağacı, sınıflandırma ve regresyon görevleri için kullanılan bir makine öğrenimi algoritmasıdır. Bir tür denetimli öğrenme algoritmasıdır, yani etiketli veriler üzerinde eğitilir. Bir karar ağacının arkasındaki temel fikir, birkaç girdi değişkenine dayalı olarak bir hedef değişkenin değerini tahmin eden bir model oluşturmaktır.

Burada nasıl kullanabiliriz?

Yukarıda belirtildiği gibi, karar ağaçları, etiketlenmiş verilerle (geçmişten gelen NFL Combine sonuçları) sınıflandırma (bir oyuncunun draft edilip edilmeyeceği) için kullanılabilir.

Bunu Python'da Uygulayalım (Tam Defter burada bulunur:https://github.com/ant-vessicchio/learn_data_science_through_sports/blob/main/NFL_Combine/NFL_Combine_1st_Decision_Tree.ipynb)

İlk olarak, ihtiyacımız olacak ithalatlar:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn import tree

master_table = master_table = pd.read_csv("NFL.csv")
master_table.head()

      
                

X = master_table.iloc[:,3:9]
Y = master_table.iloc[:,-1]

      
                

#Drop Records Containing Null Values
X.dropna(inplace=True)  
X.isnull().sum() #Check

Bu ne anlama gelir?

Bu, bir modelin performansını önyargısız olarak değerlendirmek için makine öğrenimi algoritmalarında kullanılan bir tekniktir.

Eğitim seti, makine öğrenimi modelini eğitmek için kullanılan veri kısmıdır. Bu veri setinde, model sonucu "bilir" (Y'den çıktı etiketiyle sunulur) ve bu bilgiyi, yeni ve "görünmeyen" verilere genellenebilecek bir modele "uydurmak" için kullanır.

Test seti, eğitilmiş modelin yeni, görünmeyen veriler üzerinde ne kadar iyi performans gösterdiğini değerlendirmek için kullanılır. Test verileri hem girdi verilerini hem de karşılık gelen çıktı etiketlerini içerir, ancak çıktı etiketleri test sırasında __değil__ kullanılmaz. Bunun yerine model, test verileri üzerinde tahminlerde bulunur ve tahmin edilen çıktılar, modelin performansını değerlendirmek için gerçek çıktılarla karşılaştırılır.

X_train, X_test, y_train, y_test = train_test_split(X,Y, test_size = 0.3, random_state=100)

Modelin Eğitimi ve Değerlendirilmesi

DecisionTreeClassifier'ı sklearn'de kullanacağız. İlk adım, sınıfın bir örneğini oluşturmak ve kullanmak istediğiniz hiperparametreleri belirtmektir. Yaygın olarak kullanılan hiperparametrelerden bazıları şunlardır:

- maks_derinlik: karar ağacının maksimum derinliği
- min_samples_split: dahili bir düğümü bölmek için gereken minimum örnek sayısı
- kriter: bir bölmenin kalitesini ölçmek için kullanılan işlev (ör. 'gini' veya 'entropi')

Şimdilik bundan fazlasını kullanmayacağız. Ve daha fazla bilgi için sklearn belgelerini okumanızı tavsiye ederim!
https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html

clf = DecisionTreeClassifier(criterion = 'gini',min_samples_split = 3, max_depth = 3)

clf.fit(X_train, y_train)

y_pred = clf.predict(X_test)

print(f" Accuracy score: {accuracy_score(y_test,y_pred)}")

      
                

Neler olduğunu görselleştirin:

Bir karar ağacının oldukça güzel bir özelliği, sağlayabilecekleri görselleştirmelerdir. Karar vermede her özellik için kesme noktasını, her sınıfta kaç örneğin sınıflandırıldığını ve belirli bir özelliğin eğitim örneklerini bir karar ağacında ne kadar iyi ayırdığının ölçüsü olan gini indeksini esasen görebileceğiniz yer.

plt.figure(figsize=(12,8))
from sklearn import tree
tree.plot_tree(clf.fit(X_train,y_train), feature_names = X_train.columns )
plt.show()

      
                

Bir karar ağacının çok güzel bir özelliği, özellik öneminin oluşturulmasıdır. Bir karar ağacındaki özelliğin önemi, ağacın nihai çıktısını belirlemede her bir özelliğin veya girdi değişkeninin ne kadar önemli olduğunun bir ölçüsünü ifade eder.

# let's create a dictionary of features and their importance values
feat_dict= {}
for col, val in sorted(zip(X_train.columns, clf.feature_importances_),key=lambda x:x[1],reverse=True):
  feat_dict[col]=val

feat_df = pd.DataFrame({'Feature':feat_dict.keys(),'Importance':feat_dict.values()})
feat_df

      
                

Ve özelliğin öneminin basit bir örneğini yapmak için:

import seaborn as sns
values = feat_df.Importance    
idx = feat_df.Feature
plt.figure(figsize=(10,8))
clrs = ['green' if (x < max(values)) else 'red' for x in values ]
sns.barplot(y=idx,x=values,palette=clrs).set(title='Feature Importance - Player Drafted (Y/N)')
plt.show()

      
                

Bazı fikirler:

  • Hiperparametreleri değiştir/ekle
  • Her konum için bir model oluşturun ve bunun doğruluğu artırıp artırmadığına bakın!
  • Kayıp verileri farklı bir şekilde ele almayı deneyebilir misiniz?

Bu makaleyi beğendiyseniz, lütfen aşağıya yorum yapın, daha fazla içerik için beni takip edin ve GitHub ve SubReddit'imde barındırılan "Sporla Veri Bilimini Öğrenin" Ücretsiz kursumun tamamını takip edin:

Ayrıca, LinkedIn üzerinden bana ulaşmaktan çekinmeyin!https://www.linkedin.com/in/anthony-vessicchio/

Çok teşekkür ederim ve umarım bu makaleyi beğenmişsinizdir!