반응형
1. 머신러닝 강의
1) 로지스틱 회귀분석
이전까지는 regression.
로직스틱은 분류. classification.
이를 시그모이드 함수라고 하고.
선형회귀식의 y에 로짓 함수를 대입한다.
2) 회귀분석의 절차
- 필요모듈.
# 회귀모형 from sklearn.linear_model import LogisticRegression # 전처리 from sklearn.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder, OneHotEncoder # 데이터 분리 from sklearn.model_selection import train_test_split # 평가 from sklearn.metrics import f1_score, accuracy_score
- 이상치.
# 이상치 # 1. ESD(정규분포라고 가정) # 평균을 기점으로 3표준편차를 넘으면 이상치임 import numpy as np mean = np.mean(data) std = np.std(data) upper = mean + 3*std lower = mean - 3*std # 2. IQR(4분위수 이용) Q1 = df['data'].quantile(0.25) Q3 = df['data'].quantile(0.75) IQR = Q3 - Q1 upper = Q3 + 1.5*IQR lower = Q1 - 1.5*IQR # 3. 조건필터링을 통한 삭제(기준을 하이퍼파라미터로) df[df['data'] > limit_value]
- 결측치.
# 범주형 : 최빈값 대치 df.dropna(value) df.fillna(value) # 수치형 : EDA를 통해 전처리 방법을 고안할 것 sklearn.impute.SimpleImputer : 통계량으로 대치 sklearn.impute.IterativeImputer : 다변량대치(회귀 대치) sklearn.impute.KNNImputer : 최근접이웃 알고리즘 대치
- 인코딩.
# 회귀식에 넣으려면 숫자여야 하니까 바꿔줘야 함. # 1. 레이블 인코딩 # 아래와 같이 객체화하여 사용 encoder = sklearn.preprocessing.LabelEncoder() # 메서드 fit(col) transform(col) fit_transform(col) inverse_transform(col) # 2. 원 핫 인코딩 # 해당하는 곳에만 불빛이 들어오는 거 같다 해서 원 핫! pd.get_dummies() : 요거는 벡터가 아닌 칼럼을 많이 생성하는 것으로 알고 있음. sklearn.preprocessing.OneHotEncoder() : 얘도 벡터가 아니라 칼럼 생성
- 스캐일링.
# 3. 수치형 데이터 : 스캐일링 # 무대 스캐일이 크네 어쩌네 하는 바로 그 스캐일. # 스캐일링 또한 객체화해서 사용한다 sklearn.preprocessing.StandardScaler() : 표준화(z) sklearn.preprocessing.MinMaxScaler() : 정규화, 이상치의 영향 많이 받음. sklearn.preprocessing.RobustScaler() : 로버스트라는 말답게 이상치에 강함.
- 데이터 분리.
X_train, X_val, y_train, y_val = sklearn.model_selection.train_test_split(X, y, test_size=0.2, # 테스트 데이터 비율 shuffle=True, # 데이터 분리시 섞기 random_state=42, # 난수값. 같은 값 사용시 항상 같은 결과 stratity=y) # 데이터 분리시 정답오답 비율 설정
- 학습 및 평가.
logit = LogisticRegression() logit.fit(X_train, y_train) pred = logit.predict(X_val) acc = accuracy_score(y_val, pred) f1 = f1_score(y_val, pred)
- 교차 검증과 그리드 서치.
교차검증.
: train data를 k개의 하위 집합으로 나누어 모델을 학습시키고 최적화하는 것.
데이터가 부족할 경우 유용(오버샘플링이 아님).
# 교차검증 from sklearn.model_selection import KFold import numpy as np # 하위 집합 생성 kfold = KFold(n_splits=5) # 교차검증 점수 모음집 scores = [] # 교차검증 시행 # .split 메서드의 result가 튜플 형태로 나옴 for i, (train_index, val_index) in enumerate(kfold.split(X)): X_train, X_val = X.values[train_index], X.values[val_index] y_train, y_val = y.values[train_index], y.values[val_index] from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score logit = LogisticRegression() logit.fit(X_train, y_train) y_pred = logit.predict(X.val) acc = accuracy_score(y_val, y_pred) print(f'{i}번째 교차검증 정확도는 {acc}' scores.append(acc) # 평균 점수 print(np.mean(scores))
- 그리드서치.
: 하이퍼 파라미터 최적화하기.
# 묘듈 from sklearn.model_selection imnport GridSearchCV from sklearn.linear_model import LinearRegression # 최적화를 원하는 하이퍼파라미터 설정하기 # param 내에서의 경우의 수를 모두 실행해준다 # solver에 3개, max_iter에 3개면 총 9개의 경우의 수 params = {'solver(최적화메서드)' : [리스트형태로 여러 메서드 넣어두기 뉴턴 랩슨이라든지], 'max_iter' : [solver를 수렴을 위해 최대 몇번까지 사용하냐]} logit = LinearRegression() # scoring에는 평가할 점수, cv는 교차검증 수 grid_lor = GridSearchCV(logit, param_grid=params, scoring='accuray', cv=5) grid_lor.fit(X_train, y_train) gird_lor.best_params_ gird_lor.best_score_
내일부터는 본격적으로 과제를 해야겠다.
반응형
'TIL' 카테고리의 다른 글
내배캠 TIL 34일차 (1) | 2024.02.05 |
---|---|
내배캠 TIL 33일차 (0) | 2024.02.02 |
내배캠 TIL 31일차 (0) | 2024.01.31 |
내배캠 TIL 30일차 (0) | 2024.01.30 |
내배캠 TIL 29일차 (0) | 2024.01.29 |