간만에 만족스럽게 열심히 했다.
강의를 잘 하시는 건지 휴식 버프인지 모르겠지만,
수월하게 이해하면서 M/L 기초 강의, 과제 3번 끝냈다.
과거의 나에게 압도적 감사.. 통계부터 머신러닝까지 ADsP가 하드 캐리 중...
앞으로도 과거의 나에게 고마워 하려면 지금 열심히 하는 게 맞다.
선형회귀 심화
선형회귀의 가정
선형 회귀 정리
sklearn.linear_model.LinearRegression
로지스틱 회귀 이론
범주형 Y에서 선형함수의 한계
회귀는 숫자를 예측하므로 범위에 대한 개념이 없음.
= 범주형 변수는 선형회귀가 맞지 않다.
1 이상이면 1에 수렴, 0 미만이면 0에 수렴하도록 Y 값 수정
로짓의 개념의 등장
오즈비(Odds ratio) : 승산비, 실패확률 대비 성공 확률
P: 확률 값
Log : 해당 값을 낮춰주는 역할, 천천히 증가하도록 제동
Logit (Log + odds ratio)
로짓의 그래프가 더 선형적인 그림을 나타내어 선형회귀의 기본식을 활용할 수 있게 됨
로지스틱”회귀”라고 불리는 이유가 이것
. $$
Logit의 장점 : 어떤 값을 가져오더라도 반드시 특정 사건이 일어날 확률(Y값이 특정 값일 확률)이 0과 1안으로 들어오게 하는 특징
= 분류하기에 용이
오즈비(승산비)에 log를 붙여 logit으로 만든 후, 해당 값을 Y축으로 놓고 우변에 기존의 회귀식을 붙임 → “로지스틱 회귀”
정확도와 F1 - Score
정밀도(Precision): 모델이 양성 1로 예측한 결과 중 실제 양성의 비율(모델의 관점)
재현율(Recall): 실제 값이 양성인 데이터 중 모델이 양성으로 예측한 비율(데이터의 관점)
f1-Score: 정밀도와 재현율의 조화 평균
정확도(Accuracy)
로지스틱회귀 정리
import pandas as pd
titanic_df = pd.read_csv('/Users/yejin/Documents/ML 실습/train-2.csv')
titanic_df.head(3)
pd.pivot_table(titanic_df, index = 'Sex', columns = 'Survived', aggfunc='size')
len(titanic_df)
- 정확도(Accuracy) : 맞춘 갯수 / 전체 데이터
- 생존율 확인
- 여성은 다 살았을 것이고, 남성은 모두 죽었을 것이다.
(233+468)/891*100
import seaborn as sns
sns.countplot(titanic_df, x = 'Sex', hue = 'Survived')
titanic_df.head(3)
- 숫자
- Age, SibSp, Parch, Fare,
- 범주형
- Pclass, Sex, Cabin, Embarked
- X변수 1개, Y변수(Survived)
#info() : 데이터에 대한 결측치, 데이터 전체 갯수 등
titanic_df.info()
x_1 = titanic_df[['Fare']]
y_true = titanic_df[['Survived']]
sns.scatterplot(titanic_df, x = 'Fare', y = 'Survived')
#데이터 기술 통계 보는 법(수치형) : describe()
titanic_df.describe()
from sklearn.linear_model import LogisticRegression
model_lor = LogisticRegression()
model_lor.fit(x_1, y_true)
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)
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))
y_pred_1 = model_lor.predict(x_1)
y_pred_1[:10]
len(y_pred_1)
get_metrics(y_true, y_pred_1)
titanic_df.info()
#Y(Survived) : 사망
#X(수치형) : Fare
#X(범주형) : Pclass(좌석등급), Sex
def get_sex(x):
if x == 'female':
return 0
else:
return 1
titanic_df['Sex_en'] = titanic_df['Sex'].apply(get_sex)
titanic_df.head(3)
x_2 = titanic_df[['Pclass', 'Sex_en', 'Fare']]
y_true = titanic_df[['Survived']]
model_lor_2 = LogisticRegression()
model_lor_2.fit(x_2, y_true)
get_att(model_lor_2)
y_pred_2 = model_lor_2.predict(x_2)
y_pred_2[:10]
#x변수 : Fare
get_metrics(y_true, y_pred_1)
#x변수 : Fare, Pclass, Sex
get_metrics(y_true, y_pred_2)
#각 데이터별 y=1인 확률 뽑아내기(생존할 확률)
model_lor_2.predict_proba(x_2)
남은 주말엔 계획대로 M/L심화 1주차 완강하고 과제 제출할 예정.
Github 사용법 좀 알아봐야겠다.
과제도 그렇고 미리 써두면 좋을 것 같은데,,,
노션에 강의 내용이랑 코드까지 다 쓰려니 이제 어디에 뭐가 있는지 못찾겠음,,