Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python을 사용한 의사결정 트리 구현

<시간/>

의사결정나무는 주로 데이터 분류 시나리오에 적용되는 알고리즘입니다. 각 노드는 기능을 나타내고 각 모서리는 결정을 나타내는 트리 구조입니다. 루트 노드에서 시작하여 분류를 위한 기능을 계속 평가하고 특정 에지를 따르기로 결정합니다. 새로운 데이터 포인트가 들어올 때마다 이 동일한 방법을 계속해서 적용하고 필요한 모든 기능을 연구하거나 분류 시나리오에 적용할 때 최종 결론을 내립니다. 따라서 의사 결정 트리 알고리즘은 일련의 훈련 변수로 종속 변수를 예측하는 데 사용되는 지도 학습 모델입니다.

우리는 kaggle에서 사용할 수 있는 약물 테스트 데이터를 가져갈 것입니다. 첫 번째 단계로 팬더를 사용하여 csv 파일에서 데이터를 읽고 내용과 구조를 확인합니다.

pddatainput =pd.read_csv("drug.csv", delimiter=",") #https://www.kaggle.com/gangliu/drugsetsprint(datainput)로 판다 가져오기

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

 연령 성별 BP 콜레스테롤 Na_to_K Drug0 23 F HIGH HIGH 25.355 drugY1 47 M LOW HIGH 13.093 drugC2 47 M LOW HIGH 10.114 drugC3 28 F NORMAL HIGH ..3 28 F NORMAL HIGH 7.798 drugX4 ... .HIGH .. ... ...195 56 F LOW HIGH 11.567 drugC196 16 M LOW HIGH 12.006 drugC197 52 M NORMAL HIGH 9.894 drugX[200행 x 6열]

데이터 전처리

다음 단계에서는 위의 데이터를 사전 처리하여 데이터에 있는 다른 텍스트 값에 대한 숫자 값을 얻습니다. 이는 연령, 성별, 혈압 등의 주어진 값에 대해 특정 약물을 사용하기로 한 결정에 대한 샘플 데이터를 훈련하고 테스트하는 데 유용합니다.

numpy를 npimport로 pdf로 가져오기 sklearn.metrics 가져오기 혼동_matrixdatainput =pd.read_csv("drug.csv", delimiter=",")X =datainput[['Age', 'Sex', 'BP', ' 콜레스테롤', 'Na_to_K']].sklearn import preprocessinglabel_gender =preprocessing.LabelEncoder()label_gender.fit(['F','M'])X[:,1] =label_gender.transform(X[:,1] )label_BP =전처리.LabelEncoder()label_BP.fit([ '낮음', '정상', '높음'])X[:,2] =label_BP.transform(X[:,2])label_Chol =전처리.LabelEncoder( )label_Chol.fit([ 'NORMAL', 'HIGH'])X[:,3] =label_Chol.transform(X[:,3])# 처음 6개 레코드 인쇄print(X[0:6])

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

<미리>[[23 0 0 0 25.355] [47 1 1 0 13.093] [47 1 1 0 10.113999999999999] 00.11399999999999] [28 0 2 0 7.797999999999999] [6>

종속 변수 변환

다음으로 종속변수를 수치로 변환하여 훈련 및 평가 데이터 세트에 사용할 수 있습니다.

판다를 pddatainput =pd.read_csv("drug.csv", delimiter=",")X =datainput[['Age', 'Sex', 'BP', 'Cholesterol', 'Na_to_K']]로 가져오기 .valuesy =datainput["약물"]print(y[0:6])

출력

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

0 약물Y1 약물C2 약물C3 약물X4 약물Y5 약물XName:약물, dtype:개체

데이터 세트 교육

다음으로 제공된 데이터의 30%를 훈련 데이터 세트로 사용합니다. 이것은 우리가 테스트 데이터로 부를 나머지 70%에 대한 분류를 생성하기 위한 기초로 사용됩니다.

판다를 pdf로 가져오기 sklearn.model_selection import train_test_splitdatainput =pd.read_csv("drug.csv", delimiter=",")X =datainput[['Age', 'Sex', 'BP', 'Cholesterol', 'Na_to_K']].valuesy =datainput["약물"]X_train, X_test, y_train, y_test =train_test_split(X, y, test_size=0.3, random_state=3)print(X_train.shape)print(X_test.shape)print( y_train.shape)인쇄(y_test.shape)

출력

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

(140, 5)(60, 5)(140,)(60,)

훈련된 데이터 세트에서 결과 가져오기

다음으로 우리는 훈련된 데이터 세트에 대한 결과를 보기 위해 의사 결정 트리를 적용할 수 있습니다. 여기에서 우리는 입력을 기반으로 엔트로피라는 기준을 사용하여 트리를 만듭니다. 마지막으로 의사 결정 트리의 정확도를 계산합니다.

판다를 pdf로 가져오기 sklearn.tree 가져오기 DecisionTreeClassifierfrom sklearn 가져오기 메트릭datainput =pd.read_csv("drug.csv", delimiter=",")X =datainput[['Age', 'Sex', 'BP', ' Cholesterol', 'Na_to_K']].values# Data Preprocessingfrom sklearn import preprocessinglabel_gender =preprocessing.LabelEncoder()label_gender.fit(['F', 'M'])X[:, 1] =label_gender.transform(X[:, 1])label_BP =전처리.LabelEncoder()label_BP.fit(['LOW', 'NORMAL', 'HIGH'])X[:, 2] =label_BP.transform(X[:, 2])label_Chol =전처리 .LabelEncoder()label_Chol.fit(['NORMAL', 'HIGH'])X[:, 3] =label_Chol.transform(X[:, 3])y =datainput["Drug"]# train_test_splitfrom sklearn.model_selection 가져오기 train_test_splitX_train, X_test, y_train, y_test =train_test_split(X, y, test_size=0.3, random_state=3)drugTree =DecisionTreeClassifier(criterion="entropy", max_depth=4)drugTree.fit(X_train, y_train)predicted =drugTree X_test)print(예측)print("\nDecisionTrees의 정확도:",metrics.accuracy_score(y _테스트, 예측))

출력

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

['drugY' 'drugX' 'drugX' 'drugX' 'drugX' 'drugC' 'drugY' 'drugA' 'drugB''drugA' 'drugY' 'drugA' 'drugY' 'drugY' 'drugX' ' 약물Y' '약물X' '약물X''약물B' '약물X' '약물X' '약물Y' '약물Y' '약물Y' '약물X' '약물B' '약물Y''약물Y' '약물A' '약물X' '약물B' '약물C' 'drugC' 'drugX' 'drugX' 'drugC''drugY' 'drugX' 'drugX' 'drugX' 'drugA' 'drugY' 'drugC' 'drugY' 'drugA''drugY' 'drugY' 'drugY' 'drugY ' 'drugY' 'drugB' 'drugX' 'drugY' 'drugX''drugY' 'drugY' 'drugA' 'drugX' 'drugY' 'drugX']DecisionTrees의 정확도:0.98333333333333333