1. 아이리스 데이터 (파이썬)
# 데이터 불러오기 / 데이터 정보 확인 import pandas as pd iris.info() iris.head() |
|
# 목표변수와 나머지 변수들을 따로 저장 x = iris.iloc[:,0:4] y = iris.iloc[:,4] |
|
# 데이터 분포 확인 x.info() # 데이터 프레임 y.value_counts() # 시리즈 |
|
# 데이터셋 나누고 라벨 분포 확인 from sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.20) from collections import Counter Counter(y_train) Counter(y_test) |
|
# 의사결정트리 만들기 (엔트로피구하기, 트리2단계) from sklearn.tree import DecisionTreeClassifier model = DecisionTreeClassifier(criterion = "entropy", max_depth=2) |
|
# 모델 학습 model.fit(x_train,y_train) |
|
# test데이터 라벨 예측 y_pred = model.predict(x_test) |
|
# 정확도 계산 from sklearn.metrics import accuracy_score accuracy_score(y_test, y_pred) |
|
# 입력변수들의 중요도 확인(확률값) model.feature_importances_ pd.DataFrame({'feature' : x_train.columns, 'importance' : model.feature_importances_}) |
|
# 모델의 정답에 대한 정보 확인 model.classes_ |
|
# 새로운 테스트 데이터로 예측하기 model.predict([[5.1,3.5,4.0,0.2]]) |
|
### 의사결정트리 시각화 | |
# 라이브러리 설치하기 |
|
# 라이브러리 불러오기 import pydotplus from sklearn.tree import export_graphviz from IPython.core.display import Image
|
|
# 그래프 설정 dot_data = export_graphviz(model, out_file=None, feature_names=x_train.columns, class_names=model.classes_, filled=True, rounded=True, special_characters=True)
|
|
# 그래프 그리기 dot_data graph = pydotplus.graph_from_dot_data(dot_data) Image(graph.create_png())
첫번째 줄 : 분류 기준 entropy : 엔트로피값 sample : 분류한 데이터 개수 value : 클래스별 데이터 개수 class : 예측한 답
|
2. 타이타닉 데이터 (파이썬)
# 데이터 불러오기 |
|
### 데이터 정제작업 | |
# 성별 여자:0, 남자:1로 만들기 titanic["gender"] = titanic.gender.map({"female":0, "male":1}) |
|
# age의 Null값 체크하기 titanic["age"].isnull().sum() titanic.isnull().sum()['age'] |
|
# 전체 null갯수 확인 titanic.isnull().sum().sum() |
|
# age의 NaN값만 뽑아내기 titanic[titanic['age'].isnull()] |
|
# age의 NaN값을 중앙값으로 대체 titanic.age.fillna(titanic.age.median(), inplace=True) |
|
# embarked의 NaN값 찾기 titanic["embarked"].isnull().sum() titanic.isnull().sum()["embarked"] |
|
# embarked 컬럼 원 핫 인코딩 embarked_dummies = pd.get_dummies(titanic.embarked, prefix="embarked") titanic = pd.concat([titanic,embarked_dummies],axis=1) |
|
# 지정한 컬럼으로 데이터 다시 만들기 feature_col = ['survived','pclass','age','gender','embarked_Q','embarked_S'] titanic = titanic[feature_col] |
|
### 의사결정 트리 시각화 | |
# 종속변수, 입력변수 나누기 x = titanic.iloc[:,1:6] y = titanic.iloc[:,0] x.info() y.value_counts() |
|
# 데이터셋 나누고 라벨 분포 확인 |
|
# 의사결정트리 만들기 (엔트로피구하기, 트리2단계) from sklearn.tree import DecisionTreeClassifier model = DecisionTreeClassifier(criterion = "entropy", max_depth=5) |
|
# 모델 학습 model.fit(x_train,y_train) |
|
# test데이터 라벨 예측 y_pred = model.predict(x_test) |
|
# 정확도 계산 from sklearn.metrics import accuracy_score accuracy_score(y_test, y_pred) |
|
# 입력변수들의 중요도 확인(확률값) model.feature_importances_ pd.DataFrame({'feature' : x_train.columns, 'importance' : model.feature_importances_}) |
|
# 모델의 정답에 대한 정보 확인 model.classes_ |
|
# 새로운 테스트 데이터로 예측하기 model.predict([[2,27,0,0,1]]) |
|
# 라이브러리 불러오기 import pydotplus from sklearn.tree import export_graphviz from IPython.core.display import Image
|
|
# 그래프 설정 dot_data = export_graphviz(model, out_file="C:/data/dot_data.dot", feature_names=x_train.columns, class_names=["perish","survived"], filled=True, rounded=True, special_characters=True)
|
|
# 그래프 그리기 |
3. 독일 은행 데이터 (R)
# 라이브러리 불러오기 library(C50) library(rpart) library(caret) library(rattle) |
|
# 데이터 불러오기 credit <- read.csv("C:/data/credit.csv",stringsAsFactors=F) str(credit) |
|
# 컬럼 정보 --- ------ -------------- ----- 0 checking_balance 1000 non-null object 예금 1 months_loan_duration 1000 non-null int64 대출기간 2 credit_history 1000 non-null object 대출이력 3 purpose 1000 non-null object 목적이 뭐냐 4 amount 1000 non-null int64 대출금 5 savings_balance 1000 non-null object 적금 6 employment_duration 1000 non-null object 회사에 얼마나 근속했냐 7 percent_of_income 1000 non-null int64 가처분 소득 대비 할부율 8 years_at_residence 1000 non-null int64 몇년 그집에 살았니? 9 age 1000 non-null int64 몇살? 10 other_credit 1000 non-null object 다른 신용대출이 있냐 11 housing 1000 non-null object 집이 자가냐 아니냐 12 existing_loans_count 1000 non-null int64 지속되고있는 대출 갯수 13 job 1000 non-null object 직업종류가 뭐냐 14 dependents 1000 non-null int64 부양가족몇명? 15 phone 1000 non-null object YES: 핸드폰있음, NO: 핸드폰없음 16 default 1000 non-null object YES: 상환안함, NO: 상환함
|
|
# 목표변수 table(credit$default) |
|
# 컬럼별 빈 문자열 세기 sapply(credit, function(x)sum(x=='')) |
|
# 컬럼별 NA값 세기 sapply(credit, function(x)sum(is.na(x))) |
|
# rpart로 의사결정트리 만들기 rpart <- rpart(default~., data=credit,method="class") |
|
# 그래프로 그리기 fancyRpartPlot(rpart,main="credit") |
|
# 값 고정 replace=T) credit_train <- credit[train_index==1,] credit_test <- credit[train_index==2,] prop.table(table(credit_train$default)) prop.table(table(credit_test$default)) |
|
# 데이터 나누기(?) |
|
credit_model <- C5.0(credit_train[,-17],credit_train$default,trials=10) |
'인공지능 > 머신러닝' 카테고리의 다른 글
와인품질데이터 - 의사결정트리 / 랜덤 포레스트 (0) | 2020.05.27 |
---|---|
앙상블(Ensemble), 랜덤 포레스트(Random Forest) (0) | 2020.05.27 |
의사결정트리를 이용한 타이타닉 데이터셋 분석 (0) | 2020.05.19 |
의사결정트리 (0) | 2020.05.18 |
머신러닝 연습 ① - 영화평 긍정/부정 리뷰 예측 (0) | 2020.05.14 |