ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1. 분류모델 기초
    교육/코칭스터디<Data Science Projects 2024> 2024. 1. 13. 16:12
    728x90

    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이미지
    컬럼별 중요도

    댓글

Designed by Tistory.