파이썬 라이브러리를 활용한 머신러닝 - 모델 평가, 파이프라인

화이팅·2023년 2월 23일
0

machine_learning

목록 보기
9/12

출처 : 파이썬 라이브러리를 활용한 머신러닝 - 한빛미디어

from sklearn.datasets import make_blobs
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
X,y=make_blobs(random_state=0)
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=0)
logreg=LogisticRegression().fit(X_train,y_train)
logreg.score(X_test,y_test)


  1. 교차검증(안정적인 일반화 성능 츠정 방법)
    : 데이터 여러 번 반복해서 나누고 여러 모델 학습 (k-겹 교차검증)
    ex) 5-fold : 5개의 비슷한 크기의 부분집합으로 나눔-> 1번 모델은 첫 번째 폴드를 테스트세트로 사용, 나머지는 훈련 세트로 사용해서 학습 -> 2번 모델은 두 번째 폴드 테스트세트로 사용, 나머지 훈련 ... 반복 -> 5번 분할마다 정확도 측정, 5개의 정확도 값 얻음

    from sklearn.model_selection import cross_val_score # scikit-learn에서 교차 검증은 model_selection 모듈의 cross_val_score 함수로 구현
    from sklearn.datasets import load_iris
    from sklearn.linear_model import LogisticRegression
    iris=load_iris()
    logreg=LogisticRegression()
    scores=cross_val_score(logreg,iris.data,iris.target,cv=5)
    print(scores)
    print('교차검증 평균 : {:.2f}'.format(scores.mean()))

  • 교차검증 장단점
    • 테스트 세트에 각 샘플 정확하게 한 번씩 들어감
    • 데이터를 여러 개로 나눔-> 모델이 훈련 데이터에 얼마나 민감한지 알 수 있음( 최악, 최선의 경우 짐작 가능)
    • 단점 : 연산 비용 늘어남 k배 느려짐

2. 그리드 서치 ( 매개변수 튜닝하여 일반화 성능 개선 : 관심있는 매개변수 대상 가능한 모든 조합 시도) -> 더 좋은 svc 매개변수 찾기


3. 파이프라인 : 데이터 변환 과정과 머신러닝 모델 연결

  • pipeline과 gridsearchcv 함께 사용 -> 각 처리단계에서 필요한 매개변수 탐색 동시에 수행

  • 여러 단계를 하나의 파이썬 객체로 캡슐화해주고 scikit-learn의 fit,predict,transform 인터페이스 사용 가능

    파이프라인 구축
    from sklearn.pipeline import Pipeline
    pipe=Pipeline([('scaler',MinMaxScaler()), ('svm',SVC())])
    pipe.fit(X_train,y_train)
    pipe.score

    그리드 서치에 파이프라인 적용
    paramgrid={'svcC':[0.001,0.01,0.1,1,10,100],
    'svm
    gamma' : [0.001,0.01,0.1,1,10,100]
    } # 파이프라인용 매개변수 그리드는 단계 이름과 매개변수 이름 __(밑줄 2개)로 연결해서 만듬
    grid=GridSearchCV(pipe, param_grid=parma_grid, cv=5)
    grid.fit(X_train,y_train)
    print('최상의 교차 검증 정확도',grid.best_score
    )

    전처리와 모델의 매개변수를 위한 그리드 서치
    from sklearn.preprocessing import PolynomialFeatures
    pipe=make_pipeline(StandardScaler(),PolyNOMIALfeatures(), Ridge())
    param_grid={'polynomialfeaturesdegree' : [1,2,3],
    'ridge
    alpha' : [0.001,0.01,0.1,1,10,100]}
    grid=GridSearchCV(pipe, param_grid=param_grid, cv=5, n_jobs=-1)
    grid.fit(X_train,y_train)

    모델 선택을 위한 그리드 서치(standard와 minmax중 어떤 것 사용할지)
    pipe=Pipiline([('preprocessing', StandardScaler()), ('classifier',SVC())])

profile
하하...하.

0개의 댓글