혼공머신 - knn

화이팅·2023년 3월 3일
0
  • 훈련 세트와 테스트 세트 나누기
    : 판다스 데이터ㅡ레임을 넘파이 배열로 바꾸고 나눔

    data=[[]].to_numpy()
    target=wine['class'].to_numpy()

  • 사이킷런
    : 사이킷런 패키지 사용하려면 각 특성의 리스트를 세로 방향으로 늘어뜨린 2차원 리스트 만들어야 함(zip())
    - 2차원 리스트와 정답 데이터 필요
    - 평가 : score()
    - 사이킷런에서는 numpy배열 사용
    - 예측 : predict()

  • numpy

    np.column_stack(([1,2,3],[4,5,6]))
    -> array([[1,4],
    [2,5],
    [3,6]])


knn

distances, indexes = kn.kneighbors() # 가까운 이웃의 거리와 샘플 인덱스 구하기

혼공머신 농어 예측하기
1. knn시도 -> 훈련세트 범위 벗어난 거 예측 제대로 못함
2. 선형 회귀 사용 -> 농어 무게가 음수로 나옴
3. 다항 회귀 사용 (값 제곱하여 2차 방정식으로 훈련)
4. 다중 회귀 (특성 공학 : 여러 개 특성 사용)

from sklearn.preprocessing import PolynomialFeatures 
poly=PolynomialFeatures(degree=n,include_bias=False) # n : 고차항 최대 차수, include_bias=False : 절편 항 무시
poly.fit_transform(train_input)
  1. 규제
    1) 릿지 : 계수 제곱한 값 기준(일반적으로 더 선호)
    2) 라쏘 : 계수 절댓값 기준
    -> 규제 양 alpha매개변수로 강도 조절 가능
    alpha 값 이 작으면 계수 줄어들고 선형회귀와 유사해지므로 과대적합될 가능성 높아짐

  2. 분류

    .predictproba() : 클래스별 확률값 반환
    .classes
    : 클래스 확인

  3. 로지스틱회귀(분류/ 선형 방정식 학습)

  • 시그모이드 함수 : z가 무한하게 큰 음수 - 0에 가까워짐 / z 무한하게 큰 양수 - 1에 가까워짐
    -> 확률을 0~1 사이의 값으로 나타낼 수 이씅ㅁ
    -> 매개변수 C가 작을수록 규제 커짐 (기본값 : 1)
  1. 확률적 경사하강법 (데이터가 모두 준비되어 있지 않고 매일 업데이트될 때 사용)
    : 가장 가파른 경사를 따라 원하는 지점에 도달하는 것이 목표, 훈련세트에서 랜덤하게 1개의 샘플 고름 -> 전체 샘플 모두 사용할 때까지 반복
from sklearn.linear_model import SGDClassifier
sc=SGDClassifier(loss='log', max_iter=10,tol=None, random_state=42) # tol=None : 일정 에포크동안 성능 향상 x -> 자동으로 멈춤 /향상될 최소값 지정
sc.fit(train_scaled, train_taget)
sc.partial_fit(train_scaled, train_taget) # 모델을 이어서 학습하고 싶을 때 (1 에어포크씩)
  1. 교차검증

    cross_validate() 함수
    회귀모델 : KFold 분할기 사용
    분류모델 : StratifiedKFold 사용

from sklearn.model_selection import cross_validate
from skelarn.tree import DecisionTreeClassifier

dt=DecisionTreeClassifier(random_state=42)
scores=cross_validate(dt,train_input, train_target,cv=StratifiedKFold())
  1. 하이퍼파라미터 튜닝 (GridSearchCV)
  • 탐색할 매개변수와 탐색할 값 리스트 딕셔너리로 ㄱ
from sklearn.model_selection import GridSearchCV

params={'min_impurity_decrease' : [0.0001,0.0002, 0.0003, 0.0004, 0.0005]}
gs=GridSearchCV(DecisionTreeClassifier(random_state=42), parmas, n_jobs=-1)

gs.best_params_

선형회귀 VS 로지스틱 회귀

  • 선형회귀 : 계산한 값 그대로 출력
  • 로지스틱 회귀 : 선형회귀 값을 0~1 사이로 압축 -> 0 ~100% 확률로 이해 가능
profile
하하...하.

0개의 댓글