2026/04/27 Mon.
| X | ● 개인과제 |
| O | |
| X | ● 머신러닝 심화 완강 |
| ↓ 주간 목표 ↓ | |
| ● 개인과제 제출 ● 자격증 공부 |
|
⊙ 머신러닝 기초 ~1-18
● 1-11
☑️ 다중선형회귀
- (X, y가 하나씩인 = 단순회귀분석)
- 비선형적 관계
- X 변수가 1개 이상(x변수가 2개 또는 x, x² 변수)

☑️ 범주형 데이터 사용

수치형 데이터 |
범주형 데이터 |
| ● 숫자로 된 데이터 ● 연속형 데이터 : 50~51 사이 소수점으로 연속된 숫자들이 존재하는 데이터 ● 이산형 데이터 : 두 개 값이 유한한 개ㅐ수로 나누어진 데이터 - 주사위 / 나이 |
● 숫자가 아닌 데이터 ● 순서형 자료 : 자료 자체에 순서가 있음 - 학점 A B C D = 100 90 80 70 ● 명목형 자료 : 순서 의미 없음 - 혈액형, 성별 |
☑️ 범주형 데이터 - 실습
- 머신러닝 모델에 훈련 시 해당 데이터를 숫자로 바꿔야함
- 성별 같은 범주형 데이터를 임의의 숫자로 바꿀 수 있음 ▷ Encoding 과정
더보기
|
#함수를 쓸수도, sklearn에서 제공하는 함수를 쓸 수도 있음
tips_df.head()
|
![]() |
|
# Female 0, Male 1
def get_sex(x):
if x == 'Female':
return 0
else:
return 1
|
|
|
# 'apply'method - 매 행을 특정한 함수를 적용
tips_df['sex_en'] = tips_df['sex'].apply(get_sex)
tips_df.head()
|
![]() |
|
# 모델설계도 가져오기
# 학습
# 평가
|
|
|
model_lr3 = LinearRegression()
X = tips_df[['total_bill','sex_en']]
y = tips_df[['tip']]
|
![]() ![]() |
|
#학습
model_lr3.fit(X,y)
|
![]() |
|
#예측
y_pred_tip2 = model_lr3.predict(X)
|
|
|
y_pred_tip2[:5]
|
![]() |
|
# 단순선형회귀 mse: X변수가 전체 금액
# 다중선형회귀 mse: X변수가 전체 금액, 성별
print('단순선형회귀', mean_squared_error(y_true_tip, y_pred_tip))
print('다중선형회귀', mean_squared_error(y_true_tip, y_pred_tip2))
|
![]() |
|
print('단순선형회귀', r2_score(y_true_tip, y_pred_tip))
print('다중선형회귀', r2_score(y_true_tip, y_pred_tip2))
|
![]() |
|
sns.barplot(data = tips_df, x = 'sex', y = 'tip')
|
![]() |
● 1-12
☑️ 선형회귀
- 이해하기 쉽고 방법도 쉽지만! 선형적인 관계가 존재해야 함 = Linearity(선형성)
- 등분산성(Honoscedasticity) : 오차의 분산이 모든 독립변수에 대해 일정한 패턴을 가져야함

- 정규성(Normality) : 정규분포를 따라야 한다
- 독립성(Independence)
: x 변수는 서로 독립적이어야 함 = x 변수 간의 연관이 없어야 함
: 독립변수(x)간의 강한 상관관계 = 다중공선성
: 해결 방법 - 상관관계가 높은 변수 중 하나 선택
☑️선형회귀 정리
장점 |
단점 |
| ● 직관적이고 이해가 쉬움 ● X-Y관계를 정량화 할 수 있음 ● 모델이 빠르게 학습함 - 가중치 계산이 빠 |
● X-Y간의 선형성 가정이 필요 ● 평균(mean)포함 하기에 이상치에 민감 ● 범주형변수를 인코딩 시 정보손실이 생김 |
sklearn.linear_model.LinearRegression |
|
☑️ 데이터 프로세스

● 1-13
☑️ 로지스틱 회귀 - 타이타닉
더보기
|
import pandas as pd
titaninc_df = pd.read_csv('/content/train.csv', encoding= 'utf-8')
titaninc_df.head()
|
![]() |
|
- 가설:
1. 비상상황특성상 여성을 배려해서 많이 생존
- 1. pivot table을 만들어 확인
- 2. 그래프를 통해서 확인
|
|
|
pd.pivot_table(titaninc_df, index = 'Sex', columns = 'Survived',aggfunc='size')
|
![]() |
|
import seaborn as sns
sns.countplot(titaninc_df, x = 'Sex', hue ='Survived')
|
![]() |
|
- 정확도(Accuracy): 맞춘갯수 / 전체 데이터
- 생존을 맞춤
- 여성은 다 살았을것이고, 남성은 모두 죽었을 것이다.
|
|
|
#전체개수
len(titaninc_df)
|
|
|
(233+468)/891*100
|
|
● 1-14
☑️ 로지스틱 회귀
- X가 연속형 변수이고, Y가 특정 값이 될 확률
- ex) 타이타닉 - p(y = 1(생존)) : 생존할 확률값을 예측
확률p가 0 ≤ p ≤ 1 여야 하지만 회귀에서는 그런게 존재하지 않음 - 선형회귀가 적절하지 않

- 오즈비(Odds ratio) 개념
: "승산비" 실패확률 대비 성공확률
: 예를 들어 도박이 성공할 확률이 80% 라면, 오즈비는 80%/20% = 4 예요. 다시 해석해보면 1번 실패하면 4번은 딴다는 소리입니다.



- 어떤 값을 가져오더라도 반드시 특정 사건이 일어날 확률(Y값이 특정 값일 확률)이 0과 1안으로 들어오게 하는 특징을 가지게 됨

- 중치 값을 안다면 X값이 주어졌을 때 해당 사건이 일어날 수 있는 P의 확률을 계산
- 분류 예측에 사용
● 1-15
☑️ 분류 평가 지표

- 정밀도(Precision) : 모델이 양성 1로 예측한 결과 중 실제 양성의 비율(모델의 관점)

- 재현율(Recall) : 실제 값이 양성인 데이터 중 모델이 양성으로 예측한 비율(데이터의 관점)

- f1-Score: 정밀도와 재현율의 조화 평균

- 정확도(Accuracy)

● 1-16
☑️ 로지스틱 회귀 - 실습
- sklearn.linear_model.LogisticRegression : 로지스틱회귀 모델 클래스
- 속성
- classes_: 클래스(Y)의 종류
- n_features_in_ : 들어간 독립변수(X) 개수
- feature_names_in_: 들어간 독립변수(X)의 이름
- coef_: 가중치
- intercept_: 바이어스
- 메소드
- fit: 데이터 학습
- predict: 데이터 예측
- predict_proba: 데이터가 Y = 1일 확률을 예측
- 속성
- sklearn.metrics.accuracy : 정확도
- sklearn.metrics.f1_socre: f1_score
더보기
|
titaninc_df.head()
|
![]() |
|
- 숫자
- Age, SibSp,Parch, Fare
- 범주형
- Pclass, Sex, Cabin, Embarked
- X변수 1개, Y변수(Survived)
|
|
|
# info(): 데이터에 대한 결측치, 데이터전체 갯수 등을
titaninc_df.info()
|
![]() |
|
# X변수: Fare, Y변수: Survived
X_1 = titaninc_df[['Fare']]
y_true = titaninc_df[['Survived']]
|
|
|
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
|
|
|
from sklearn.linear_model import LogisticRegression
|
|
|
sns.scatterplot(titaninc_df, x = 'Fare',y = 'Survived')
|
![]() |
|
sns.histplot(titaninc_df, x = 'Fare')
|
![]() |
|
# 수치형데이터를 확인하는 쉬운방법 describe()
titaninc_df.describe()
|
![]() |
|
#모델 불러오기
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)
|
![]() |
● 1-17
☑️ 다중 로지스틱 회귀 - 실습
더보기
|
titaninc_df.info()
|
![]() |
|
#Y(Surivved): 사망
#X(수치형): Fare
#X(범주형): Plcass(좌석등급), Sex
|
|
|
def get_sex(x):
if x == 'female':
return 0
else:
return 1
titaninc_df['Sex_en'] = titaninc_df['Sex'].apply(get_sex)
|
|
|
titaninc_df.head(3)
|
![]() |
|
X_2 = titaninc_df[['Pclass','Sex_en','Fare']]
y_true = titaninc_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_1[: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)
|
![]() |
|
y_pred_2[:10]
|
|
● 1-18
☑️ 로지스틱 회귀 마무리
- 선형회귀의 아이디어에서 종속 변수(Y)만 가공한 것
장점 |
단점 |
| ● 직관적이고 이해하기 쉽다 | ● 복잡한 비선혀여 관계 모델링이 어려울 수 있음 |
sklearn.linear_model.LogisticRegresson |
|
☑️ 회귀, 분류 정리
- 선형회귀 + 로지스틱 공통점
1. 모델 생성이 쉬움
2. 가중치(혹은 회귀계수)를 통한 해석이 쉬운 장점
3. X 변수에 범주형, 수치형 변수 둘 다 사용 가능
| 선형회귀(회귀) | 로지스틱회귀(분류) | |||
| Y(종속변수) | 수치형 | 범주형 | ||
| 평가척도 | MSE R square(Only 선형회귀) |
Accuracy(정확도) F1 - score |
||
| sklearn 모델 클래스 |
|
|
||
| sklearn 평가 클래스 |
|
|
☑️ 데이터 분석 프로세스

'내일배움캠프(QC,QA_5기)' 카테고리의 다른 글
| [내일배움캠프_QA/QC 5기] 37일차 _ 머신러닝 심화 완강 | 개인 과제 해설 (0) | 2026.04.28 |
|---|---|
| [내일배움캠프_QA/QC 5기] 36일차(2) _ 머신러닝 심화 1강 (1) | 2026.04.27 |
| [내일배움캠프_QA/QC 5기] 35일차 _ 데이터 전처리&시각화 4강 (0) | 2026.04.25 |
| [내일배움캠프_QA/QC 5기] 33일차 _ 제약 데이터 분석 (0) | 2026.04.22 |
| [내일배움캠프_QA/QC 5기] 32일차 _ 베이직문제 | 아티클 스터디 | 개인프로젝트 (1) | 2026.04.21 |






























