Machine Learning

Decision Tree , Random Forest 로 데이터 분류하기

yugyeong 2022. 12. 2. 17:51

 

Decision Tree

 

결정트리는 계속하여 이것인지 저것인지 결정한다는 의미이다.

차트로 나타내면 아래와같이 분류를 하는 것인데, 이것을 인공지능에 학습시켜서 데이터를 분류 해볼 것이다.

 

 

 

아래에 분류를 하기위해 테스트할 예시 데이터프레임이 있다.

 

여기서 예측에 필요한 컬럼 'Age' : 'Estimated Salary' 을 변수 X로 두고

예측 결과인 데이터 컬럼 'Purchased' 를 변수 y로 둘 것이다.

 

 

 

 

먼저 데이터를 피쳐 스케일링 해주기 위해서 MinMaxScaler 를 해주었다.

피쳐 스케일링이 된 데이터를 각각 훈련용과 테스트용 데이터로 나누어주었다.

 

from sklearn.preprocessing import MinMaxScaler
scaler_X = MinMaxScaler()
X = scaler_X.fit_transform(X)
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= 2)

 

 

 

모델링 

 

먼저 from sklearn.tree import DecisionTreeClassifier 모듈을 임포트 해준다.

변수 classifier 에 DecisionTreeClassifier 을 저장해주고 random_state 는 1로 설정해주었다.

그리고 fit() 함수를 이용하여 인공지능을 학습 시켜준다.

 

 

from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier(random_state= 1)
classifier.fit(X_train, y_train)

 

 

 

 

학습된 인공지능을 테스트 하기위해서 변수 classifier에 predict() 함수를 이용하였고, X_test 의 결과값을 y_pred 에 저장하였다.

 

아래는 confusion_matrix, accuracy_score 를 이용하여 y_pred 와 y_test 을 비교한 결과값이다.

 

 

y_pred = classifier.predict(X_test)
y_test.values
y_pred
from sklearn.metrics import confusion_matrix, accuracy_score
confusion_matrix(y_test, y_pred)
accuracy_score(y_test, y_pred)

 

 

 

 

 

 

Random Forest

 

 

Random Forest 는 Decision Tree 의 성능을 개선한 모델이다.

 

Random Forest 를 이용하기 위해서 필요한 모듈을 임포트 해준다.

from sklearn.ensemble import RandomForestClassifier

 

 

변수 classifier2 에 RandomForestClassifier() 을 저장하였고 파라미터값은 n_estimators=100 (디폴트 값)로 주었다. 여기서 n_estimators 는 생성할 tree의 개수이다.

생성된 인공지능을 fit() 함수를 이용하여서 훈련을 시켜준다.

 

 

from sklearn.ensemble import RandomForestClassifier
classifier2 = RandomForestClassifier(n_estimators=100)
classifier2.fit(X_train, y_train)

 

 

 

훈련된 인공지능을 테스트하기 위해서 변수classifier2 에 predict() 함수를 이용하였고, X_test 의 결과값을 y_pred 에 저장하였다.

 

아래는 confusion_matrix, accuracy_score 를 이용하여 y_pred 와 y_test 을 비교한 결과값이다.

 

 

y_pred = classifier2.predict(X_test)
y_pred
y_test.values
confusion_matrix(y_test, y_pred)
accuracy_score(y_test, y_pred)

 

 

 

 

 

이제 학습된 인공지능에 새로운 데이터를 넣어서 그 데이터의 결과값을 예측하도록 해보자

 

새로운 데이터에서 Age 는 38, EstimatedSalary 는 45000 이라고 했을 때, 이 사람의 Purchased 여부를 예측하는 방법이다

 

변수 new_data 에 넘파이 형식으로 데이터를 저장해준다.

new_data = np.array([38, 45000])

 

 

데이터는 현재 1차원이기 때문에 원래의 데이터 형식에 맞게 2차원으로 생성해주어야한다.

reshape 함수를 이용하여서 new_data 를 2차원으로 생성해주었다.

new_data = new_data.reshape(1,2)

 

 

게시글 위쪽을 보면 데이터들은 현재 피쳐 스케일링이 된 상태이다.

그렇기 때문에 새로 받게된 new_data 도 피쳐스케일링을 해주어야한다.

 

이때 새롭게 피쳐스케일링을 하지말고 위에서 사용하였던 scaler_X 를 가져와서 사용을 하여야한다. fit_transform 을 하지말고 transform 을 하여서 새로운 데이터를 피쳐스케일링 해준다.

new_data = scaler_X.transform(new_data)

 

 

 

new_data 를 확인해보면 알맞게 피쳐스케일링 된 것을 볼 수 있다.

 

 

 

이제 classifier2 에 predict 함수를 이용하여 new_data 값을 예측해보면 결과값이 도출되는 것을 볼 수 있다.

classifier2.predict(new_data)

 

 

 

 

아래는 위 코드들을 모두 합친 내용이다.

 

 

new_data = np.array([38, 45000])
new_data = new_data.reshape(1,2)
new_data = scaler_X.transform(new_data)
new_data
classifier2.predict(new_data)