실무에 바로 쓰는 바닥부터 시작하는 머신러닝 3-6 [完]
지도학습 : 회귀모델
선형회귀
종속 변수와 하나 이상의 독립 변수 간의 선형관계를 모델링하는 방법이다.
독립변수의 수에 따라 단순 선형회귀와 다중 선형회귀로 나뉜다.
학습이란?
머신러닝에는 가중치라는것이 잇고 가중치에 따라 예측값이 결정됨 예측치와 실제값의 차이의 오차를 계산할수있고,
이 오차를 최소화할수있는 법은 미분이있다. 이 미분을 통해 가중치를 바꿔가며 오차가 줄어들게 하는것이다
오차가 줄어드는 이 과정을 학습이라한다.
Scilkit-learn을 사용한 선형 회귀 모델 구현 및 평가

학습과 테스트 데이터로 나누는 과정인데 , train_test_split 함수를 사용하고 첫째인자를 독립변수 X ,
두번째로 종속변수y를 넣어준다. test_size 테스트의 비율인데 현재는 20프로로 설정 하였고 ,
4번째인 random_state의 값에 따라 함수는 이 데이터셋을 랜덤하게 분할하게 된다.
train_test_split 함수는 학습용 데이터셋과 테스트용 데이터셋을 반환해주는 함수이며 ,
반환값은 순서대로 학습용 데이터셋, 테스트용 데이터셋, 학습용 레이블, 테스트용 레이블이다.
X_train =학습용 데이터셋 X_train = 테스트용 데이터셋 y_train= 학습용레이블 , y_test = 테스트용 레이블

선형 회귀 모델을 생성하고 학습시키기 위해
model = LinearRegression() 넣어주면 선형모델을 자동으로 생성해주며
model.fit(X_traion,y_train) 에 테스트 데이터와 테스트 정답을 순서로 넣어주면 자동으로 학습을 시작한다.
이후 예측을 확인하기위해 y_pred라는 변수를 설정하고 테스트할 독립 변수를 넣어 예측값을 확인할수있다.
다항회귀
비선형 모델 관계를 모델링하는 방법 이며 , 독립변수의 다항식을 사용하여 관계를 모델링한다.
좀더 쉽게 생각하자면 , 데이터 각 특성에 제곱을 추가하여 선형 회귀 모델을 훈련시키는 방법이라고 생각하면 될거같다.

기존 데이터의 특성을 제곱하는 방법으로는 sklearn 의 PolynomialFeatures 함수를 이용 할수있고,
degree를 통해 계수를 선택할수있다. 현재는 2를 넣어 2차항으로 진행하였다.
이후 poly.fit_transform을 통해 실제로 2차항으로 만들어준다.

위와 같이 0차항 , 1차항 , 2차항으로 생성된걸 확인할수 있다.

이후 선형회귀 부분과 동일하게 모델 생성 -> 학습 -> 예측순으로 값을 확인한다.

모델평가?
mse = 0과 가까워야 좋고, r2는 1과 가까워야 좋다?
이부분은 아직 정확히 이해하지 못하였다. 내일 주말시간을 이용해 좀더 알아보고 공부 필요.
로지스틱 회귀 - 분류모델
종족 변수가 이진형일때 (즉, 결과가 두가지중 하나일때) 사용되는 통계 기법.
로지스틱 회귀는 선형회귀와 달리 결과값이 0과 1사이에 위치하게 하기 위해 시그모이드 함수를 사용한다.
로지스틱 회귀는 데이터를 학습하여 각 데이터 포인트가 특정 클래스에 속할 확률을 예측한다.

datasets -다양한 데이터셋이 들어있다.
StandardScaler - 데이터 분포를 동일하게 맞춰주는 역할을 한다.
train_tst_split - 데이터를 훈련/테스트 세트로 분할

이후 유방암 데이터를 불러와 주고
X=data 를 통해 특징만을 가져올수있고
y=target 를 통해 레이블만을 가져올수있다.


위에 사용한 모델과 , 메트릭의 설명은 다음과 같다.

이후 학습을 시키는 부분은 선형회귀 부분과 동일.

이후 불러온 타이타닉 데이터인데 이 데이터는 로지스틱 회귀에 사용할수 없다.
이유는 스트링이나 카테고리 데이터도 포함되어있고 결측값도 있기 때문이다.
그래서 데이터 전처리를 통해 필요한 열 선택 및 결측값을 처리해야 한다.

NaN값을 제거하고

sex와 embarked를 인코딩하여 범주형 데이터를 수치형으로 바꿔주며,

seaborn 데이터에서 survived를 사용하는데 종속 변수이고 학습에 사용하는 데이터가 아니다 그래서 분류가 필요하다.
survived는 맞추기 위한 종속변수 y로 나머지는 x로 만들어야하기에 사용한다.
이후 데이터 값을 분류하고 스케일링을 진행한다


이후 학습 및 예측 ,평가.
분류모델 - SVM
- 분류와 회귀분석에 사용되는 강력한 모델.
- 데이터를 분류하기 위해 결정경계를 찾아 분류함.
- 초평면은 두 클래스 사이의 최대 마진을 보장하는 방식으로 선택함.


전체적인 부분은 기존과 동일하며 , 모델 생성,학습 부분만 다르다.
SVC에서 kernel을 설정해 줄수있는데 현재는 선형 모델로 설정한다.

분류모델 - KNN
- KNN 알고리즘은 분류와 회귀 분석에 사용되는 비모수적 방법
- 새로운 데이터 포인트를 기존 데이터 포인트 중 가장 가까운 K개의 이웃과 비교하여 분류
- 데이터 포인트의 특성을 기준으로 거리 계산을 통해 가장 가까운 이웃을 찾는다


전체적으로 다 동일하나 SVC와 동일하게 모델 생성및 학습 부분이 다르다.

분류모델 - 나이브베이즈
- 베이즈 정리를 기반으로 하는 통계적 분류기법
- 나이브라는 이름이 붙은 이유는 각 특징이 독립적이라고 가정하기 때문이다.
- 주로 텍스트 분류 문제에서 널리 사용한다.
나이브베이즈의 종류
- 가우시안 나이브 베이즈 : 특징들이 연속적이고 정규 분포를 따른다고 가정.
- 베르누이 나이브베이즈 : 특징들이 이진수(0,1)로 표현되는 경우 사용.
- 멀티노미얼 나이브베이즈 : 특징들이 다항 분포를 따르는 경우 사용.

전체 코드는 동일하나 이번에도 역시 모델 생성 및 학습 부분이 다르다.

분류모델 - 의사결정나무
456456456456
의사결정나무
- 예측모델 중 하나로 , 데이터의 특징을 기준으로 의사결정 규칙을 만들고
이를 바탕으로 데이터를 분류하거나 회귀하는데 사용한다. - 의사결정나무는 트리 구조를 가지며 , 각 내부 노드는 데이터의 특정 특징에 대한 테스트를 나타내고 ,
각 가지는 테스트 결과를 나타내며, 각 리프노드는 클래스 레이블을 나타낸다.


전부 동일하나 모델 생성 및 학습 부분은 다르다.

'나의개발일지(TIL)' 카테고리의 다른 글
| TIL 12일차 - 딥러닝 (2) | 2024.10.21 |
|---|---|
| TIL 11일차 -머신러닝 (0) | 2024.10.18 |
| [스파르타 내일배움캠프]9일차 -머신러닝 (0) | 2024.10.15 |
| [스파르타 내일배움캠프]8일차 -머신러닝 (0) | 2024.10.14 |
| [스파르타 내일배움캠프]7일차 -파이썬 라이브러리 (0) | 2024.10.11 |