# 회귀모형
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
# 범주형 : 최빈값 대치
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_