-
1. 분류모델 기초교육/코칭스터디<Data Science Projects 2024> 2024. 1. 13. 16:12728x90
1. 분류모델 기초
1.1 사이킷런과 머신러닝
1.1.1 사이킷런 소개
사이킷런? 대표적인 파이썬 머신러닝 라이브러리
https://scikit-learn.org/stable/
scikit-learn: machine learning in Python — scikit-learn 1.3.2 documentation
Model selection Comparing, validating and choosing parameters and models. Applications: Improved accuracy via parameter tuning Algorithms: grid search, cross validation, metrics, and more...
scikit-learn.org
1.1.2 사이킷런 활용 흐름
https://github.com/amueller/odscon-2015
GitHub - amueller/odscon-2015: Slides and material for open data science
Slides and material for open data science. Contribute to amueller/odscon-2015 development by creating an account on GitHub.
github.com
Superviesed Machine Learning(지도학습, 교사학습, 교수학습 등) - 정답을 알고 있는 문제를 풀 때
UnSuperviesed Machine Learning(비지도학습) - 정답을 모르는 문제를 풀 때
cross validation - 검증할 때 사용, 가장 효과적인 파라미터를 찾기 위해 사용
overfitting and underfitting
1.1.3 사이킷런의 의사결정나무 알고리즘 알아보기
Supervised Machine Learning - classification, regression
#학습데이터셋 X, 학습데이터셋의 label Y from sklearn import tree X=[[0,0],[1,1]] Y=[0,1] #DecisionTree모델을 사용하여 fit clf=tree.DecisionTreeClassifier() clf=clf.fit(X,Y) #모델을 사용하여 클래스 예측 clf.predict([[2.,2.]]) #array([1]) #비율로 예측 clf.predict_proba([[2.,2.]]) #array([[0.,1.]]) #Iris 데이터셋을 이용하여 트리 구성 from sklearn.datasets import load_iris from sklearn import tree iris = load_iris() X, y = iris.data, iris.target clf = tree.DecisionTreeClassifier() clf = clf.fit(X, y) #학습 완료 후 완성된 트리를 그림으로 확인 tree.plot_tree(clf)
1.2 의사결정나무로 간단한 분류 예측 모델 만들기
1.2.1 당뇨병 데이터셋 소개
- Pregnancies : 임신 횟수
- Glucose : 2시간 동안의 경구 포도당 내성 검사에서 혈장 포도당 농도
- BloodPressure : 이완기 혈압 (mm Hg)
- SkinThickness : 삼두근 피부 주름 두께 (mm), 체지방을 추정하는데 사용되는 값
- Insulin : 2시간 혈청 인슐린 (mu U / ml)
- BMI : 체질량 지수 (체중kg / 키(m)^2)
- DiabetesPedigreeFunction : 당뇨병 혈통 기능
- Age : 나이
- Outcome : 768개 중에 268개의 결과 클래스 변수(0 또는 1)는 1이고 나머지는 0입니다.
데이터셋 출처
https://www.kaggle.com/datasets/uciml/pima-indians-diabetes-database
Pima Indians Diabetes Database
Predict the onset of diabetes based on diagnostic measures
www.kaggle.com
1.2.2 학습과 예측을 위한 데이터셋 만들기
#라이브러리 import import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt #구버전 jupyter에서 시각화를 보기 위해선 %matplotlib inline을 지정해줘야함 #데이터셋 로드 df=pd.read_csv("data/diabetes.csv" df.shape #(768,9) #앞쪽 5개 데이터셋 살펴보기 df.head() #학습, 예측 데이터셋 나누기 split_count=int(df.shape[0]*0.8) split_count #614 train=df[:split_count].copy() train.shape #(614,9) test=df[split_count:].copy() test.shape #(159,9) #학습, 예측에 사용할 컬럼 feature_names=train.columns[:-1].tolist() feature_names #정답값이자 예측해야될 컬럼 label_name=train.columns[-1] label_name #학습, 예측 데이터셋 만들기 X_train=train[feature_names] y_train=train[label_name] X_test=test[feature_names] y_test=test[label_name]
1.2.3 의사결정나무로 학습과 예측하기
#머신러닝 알고리즘 가져오기 from sklearn.tree import DecisionTreeClassifier model=DecisionTreeClassifier() model #학습(훈련) model.fit(X_train,y_train) #예측 y_predict=model.predict(X_test)
1.2.4 예측한 모델의 성능 측정하기
#트리 알고리즘 분석하기 from sklearn.tree import plot_tree plot_tree(model, feature_names=feture_names) #시각화 from sklearn.tree import plot_tree plt.figure(figsize=(20,20)) tree=plot_tree(model, feature_names=feature_names, filled=True, fontsize=10) #cloumn순서대로 feature의 중요도를 볼 수 있음 model.feature_importances_ #seaborn으로 중요도 수치 그려보기 sns.barplot(x=model.feature_importances_, y=feature_names) #정확도 예측하기 diff_count=abs(y_test-y_predict).sum() #정답이랑 예측한 정답이랑의 차이 갯수 abs(y_test-y_predict).sum()/len(y_test) #정답이랑 예측한 정답이랑의 차이를 비율로 나타내기 (len(y_test)-diff_count)/len(y_test)*100 #예측도 확인 fromsklearn.metrics import accuracy_score accuracy_score(y_test,y_predict) model.score(X_test,y_test)*100 #요 방법으로도 위와 같은 정확도 예측가능
tree이미지 컬럼별 중요도 '교육 > 코칭스터디<Data Science Projects 2024>' 카테고리의 다른 글
3. 탐색한 데이터로 모델 성능 개선 (0) 2024.01.27 2. EDA를 통해 데이터 탐색하기 (1) 2024.01.22