Python의 첫 번째 결정 트리(NFL Combine)
NFL 컴바인에서 선수의 성적을 보고 드래프트 여부를 예측할 수 있습니까? 알아보기 위해 모델을 만들어 봅시다!
의사 결정 트리 란 무엇입니까?
의사 결정 트리는 분류 및 회귀 작업에 사용되는 기계 학습 알고리즘입니다. 지도 학습 알고리즘의 한 유형으로, 레이블이 지정된 데이터에 대해 훈련됨을 의미합니다. 의사 결정 트리의 기본 아이디어는 여러 입력 변수를 기반으로 대상 변수의 값을 예측하는 모델을 만드는 것입니다.
여기서 어떻게 사용할 수 있습니까?
위에서 언급한 바와 같이 결정 트리는 레이블이 지정된 데이터(과거의 NFL 결합 결과)를 사용하여 분류(선수 드래프트 여부)에 사용할 수 있습니다.
이것을 파이썬으로 구현해 봅시다(전체 노트북은 여기에서 찾을 수 있습니다:https://github.com/ant-vessicchio/learn_data_science_through_sports/blob/main/NFL_Combine/NFL_Combine_1st_Decision_Tree.ipynb)
먼저 필요한 가져오기는 다음과 같습니다.
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
이것은 무엇을 의미 하는가?
편향 없이 모델의 성능을 평가하기 위해 기계 학습 알고리즘에서 사용되는 기술입니다.
훈련 세트는 기계 학습 모델을 훈련하는 데 사용되는 데이터의 일부입니다. 이 데이터 세트에서 모델은 결과를 "알고"(Y의 출력 레이블과 함께 표시됨) 이 정보를 사용하여 새로운 "보이지 않는" 데이터로 일반화할 수 있는 모델을 "적합"합니다.
테스트 세트는 훈련된 모델이 보이지 않는 새로운 데이터에서 얼마나 잘 수행되는지 평가하는 데 사용됩니다. 테스트 데이터에는 입력 데이터와 해당 출력 레이블이 모두 포함되지만 출력 레이블은 테스트 중에 사용되지 __않습니다__. 대신 모델은 테스트 데이터에 대해 예측하고 예측된 출력을 실제 출력과 비교하여 모델의 성능을 평가합니다.
X_train, X_test, y_train, y_test = train_test_split(X,Y, test_size = 0.3, random_state=100)
모델 교육 및 평가
우리는 sklearn에서 DecisionTreeClassifier를 사용할 것입니다. 첫 번째 단계는 클래스의 인스턴스를 생성하고 사용할 하이퍼파라미터를 지정하는 것입니다. 일반적으로 사용되는 일부 하이퍼파라미터는 다음과 같습니다.
- max_depth: 의사 결정 트리의 최대 깊이
- min_samples_split: 내부 노드를 분할하는 데 필요한 최소 샘플 수
- criterion: 분할 품질을 측정하는 데 사용되는 함수(예: 'gini' 또는 'entropy')
지금은 이 이상을 사용하지 않을 것입니다. 자세한 내용은 sklearn 설명서를 읽어 보시기 바랍니다!
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)}")
진행 상황 시각화:
의사 결정 트리의 매우 멋진 기능은 그들이 제공할 수 있는 시각화입니다. 기본적으로 의사 결정의 각 기능에 대한 컷오프 포인트, 각 클래스에서 분류된 샘플 수, 주어진 특성이 의사 결정 트리에서 교육 예제를 얼마나 잘 분리하는지 측정한 지니 인덱스를 볼 수 있습니다.
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()
결정 트리의 매우 멋진 기능은 기능 중요도 생성입니다. 의사 결정 트리의 기능 중요도는 각 기능 또는 입력 변수가 트리의 최종 출력을 결정하는 데 얼마나 중요한지를 나타내는 척도입니다.
# 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
기능 중요도를 간단하게 설명하자면 다음과 같습니다.
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()
몇 가지 아이디어:
- 하이퍼파라미터 변경/추가
- 각 위치에 대한 모델을 구축하고 정확도가 향상되는지 확인하십시오!
- 누락된 데이터를 다르게 처리해 볼까요?
이 기사가 마음에 드셨다면 아래에 댓글을 달아 더 많은 콘텐츠를 보려면 저를 팔로우하고 제 GitHub 및 SubReddit에서 호스팅되는 전체 "스포츠를 통한 데이터 과학 학습" 무료 과정을 따르십시오.
또한 LinkedIn에서 저에게 연락해 주세요!https://www.linkedin.com/in/anthony-vessicchio/
정말 감사합니다. 이 기사가 마음에 드셨기를 바랍니다.

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































