오늘은 지난 시간에 이어서 파이썬에서 의사결정 트리를 구현하는 법을 알아보겠다.
사용 데이터 : iris
#이상치 구하여 평균으로 치환 후 성공적으로 마치면 '성공했습니다'라는 문장이 나오는 함수 만들기
def outlier_value(data):
a = data.describe().columns
cnt = 0
for i in range(len(a)):
col = data[a[i]]
Q1 = col.quantile(0.25)
Q3 = col.quantile(0.75)
IQR = Q3-Q1
print(a[i],col[(col<Q1-1.5*IQR)|(col>Q3+1.5*IQR)].count(),'개')
col[(col<Q1-1.5*IQR)|(col>Q3+1.5*IQR)] = col.mean()
if col[(col<Q1-1.5*IQR)|(col>Q3+1.5*IQR)].count() == 0:
cnt+=1
if cnt == len(a):
print('성공적으로 바꿨습니다. ')
import pandas as pd
iris = pd.read_csv("c:\\data\\iris2.csv")
#2. 결측치 확인
iris.isnull().sum()
#3. 이상치 확인
outlier_value(iris)
#4. 명목형 --> 숫자형
#명목형 데이터 없음
#5. 훈련과 테스트로 데이터를 분리
x = iris.iloc[ : , :-1 ].to_numpy() # 정답을 뺀 전체 데이터를 numpy arrary 로 변환
y = iris.iloc[ : , -1 ].to_numpy() # 정답을 numpy array 로 변환
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split( x, y, test_size=0.2, random_state=40)
print(x_train.shape) #(120, 4)
print(x_test.shape) #(30, 4)
print(y_train.shape) #(120,)
print(y_test.shape) #(30,)
#6. 훈련 데이터 정규화
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(x_train)
x_train2 = scaler.transform(x_train)
#7. 테스트 데이터 정규화
scaler = MinMaxScaler()
scaler.fit(x_test)
x_test2=scaler.transform(x_test)
# 계산된 내용으로 데이터를 변환해서 x_train2 에 담는다.
#8. 모델 생성
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(criterion='entropy', max_depth=5)
#9. 모델 훈련
model.fit( x_train2, y_train)
#10. 모델 예측
result = model.predict( x_test2 )
#11. 모델평가
sum( y_test == result ) / len(y_test)
#random_state = 1이면 정확도 99.65
#random_state =40이면 정확도 100