일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Chat GPT
- 데이터 분석
- Python
- lambda
- SQLD
- pandas
- da
- jd
- 서브쿼리
- 기초통계
- streamlit
- 태블로
- 머신러닝
- 프로젝트
- 전처리
- 팀프로젝트
- 히트맵
- SQL
- GA4
- 클러스터링
- 크롤링
- 데이터분석
- 최종 프로젝트
- 군집화
- If
- cross join
- data analyst
- 시각화
- 기초프로젝트
- 프롬프트 엔지니어링
- Today
- Total
세조목
머신러닝 - 로지스틱회귀(24.01.31) 본문
1. 데이터 불러오기
titanic_df = pd.read_csv('경로', encoding = 'utf-8')
* encoding의 경우 필요한 경우에만
2. 독립변수, 종속변수 지정
X = titanic_df[['Fare']] <- 대괄호 두번 적어야지 모델링때 오류나지 않음
y = titanic_df[['Survived']]
3. 본격적인 모델링 전 산점도 및 히스토그램으로 분포 확인하기
sns.scatterplot(data = titanic_df, x='Fare', y='Survived')
sns.histplot(titanic_df, x='Fare')
가장 이상적인건 아래와 같은 경우이기때문에 'Fare' 를 독립변수로 놓는건 그다지 좋다고 볼 수 없다.
4. sklearn 라이브러리의 LinearRegression과 LogisticRegression import하기
from sklearn.linear_model import LinearRegression
from sklear.linear_model import LogisticRegression
scikit-learn이라는 이름의 패키지에
sklearn & linear_model이라는 이름의 폴더가 있고,
_base.py라는 이름의 모듈이 있다고 이해할 수 있다.
5. 모델 학습시키기
model_lor = LogisticRegression()
model_lor.fit(X,y)
6. 모델의 속성 확인(함수 활용)
def get_att(x):
# x모델을 넣기
print('클래스 종류', x.classes_)
print('독립변수 갯수', x.n_features_in_)
print('들어간 독립변수(x)의 이름', x.feature_names_in_)
print('가중치',x.coef_)
print('바이어스', x.intercept_)
get_att(model_lor)
>>> 클래스 종류 [0 1]
독립변수 갯수 1
들어간 독립변수(x)의 이름 ['Fare']
가중치 [[0.01519617]]
바이어스 [-0.94129222]
7. 분류평가지표(정확도 & f1 score) 확인하기
from sklearn.metrics import accuracy_score, f1_score
def get_metrics(true, pred):
print('정확도', accuracy_score(true, pred))
print('f1_score', f1_score(true, pred))
정확도(accuracy_score)와 f1 스코어(f1_score)를 구하기위해서는
예측값을 구해야함으로 predict메서드를 활용해준다.
y_pred = model_lor.predict(X)
그런다음 앞에서 만든 함수(get_metrics)로 정확도와 f1 score를 구해준다.
get_metrics(y, y_pred)
>>> 정확도 0.6655443322109988
f1_score 0.354978354978355
f1 score와 정확도의 개념을 이해하려면
혼돈행렬(Confusion Matrix)이 무엇인지 우선적으로 알아야한다.
혼돈행렬이란 실제값과 예측값에 대한 모든 경우의 수를 표현하기 위한 2x2 행렬이다.
실제값과 예측값이 동일하면 True, 그렇지 않으면 False로 적고
예측을 양성으로 했으면 Positive, 음성으로 했으면 Negative를 붙여준다.
2x2 행렬이기에 TP, FP, FN, TN 총 네가지 경우의 수가 나온다.
네가지 경우의 수를 가지고서 정확도를 구할 수 있을 것이다.
예를 들어
TP : 0명 <- 예측값과 실제값 모두 양성인 경우
FP : 0명 <- 실제로는 음성이지만 양성으로 예측한 경우
FN : 5명 <- 실제로는 양성이지만 음성으로 예측한 경우
TN : 95명 <- 예측값과 실제값 모두 음성인 경우
일때 정확도를 계산하면 95/100 이된다.
다음으로 f1 score를 계산하려면 정밀도와 재현율을 우선적으로 계산해야한다.
먼저 정밀도의 산식은 아래와 같다.
정밀도는 모델이 양성으로 예측한(P) 결과 중 실제값도 양성인 경우의 비율을 구하는 것이다.
모델(예측값)의 관점에서 봤다고 할 수 있다.
다음으로 재현율의 산식은 아래와 같다.
재현율은 실제값이 양성인 경우에서 모델도 양성으로 예측한 경우의 비율을 구하는 것이다.
실제값의 관점에서 봤다고 할 수 있다.
다시 f1 score로 돌아와서
앞선 예시로 정밀도와 재현율을 구하면
정밀도 : 0/0(division by zero = 정의되지 않음)
재현율 : 0/5 => 0
이기때문에 f1 score는 0이 된다.
이같은 정확도와 f1 score는 1에 가까울수록
성능이 우수하다는 의미를 가진다.
'데이터 분석 공부 > 머신러닝' 카테고리의 다른 글
머신러닝 - 의사결정나무, 랜덤포레스트, KNN, 부스팅 알고리즘(24.02.02) (1) | 2024.02.02 |
---|---|
머신러닝 - 전처리(인코딩, 스케일링)에서부터 로지스틱 회귀를 적용한 예측 모델 생성까지(feat. 선형회귀와 로지스틱 회귀의 차이, 스케일링의 정규화와 표준화는 각각 언제 사용하는지)(24.02.. (0) | 2024.02.02 |
머신러닝 - 데이터 분리(feat. 과적합)(24.02.01) (0) | 2024.02.01 |
머신러닝 - 전처리(인코딩, 스케일링)(24.02.01) (0) | 2024.02.01 |
머신러닝 - 단순&다중선형회귀(24.01.30) (0) | 2024.01.31 |