main
hy.kim 1 year ago
parent f8bc1216ef
commit b22a9c085e

@ -0,0 +1,253 @@
---
layout: default
title: 05. Regression
subtitle: 어프렌티스 프로젝트 과목
---
-----
[PINBlog Gitea Repository](https://gitea.pinblog.codes/CBNU/05_Regression)
-----
# 05. Regression
- 산업인공지능학과 대학원
2022254026
김홍열
---
# **Regression*
### **Linear Regression, Logistic Regression**
# 선형 회귀 (Linear Regression)
선형 회귀는 연속적인 값을 예측하기 위한 회귀 알고리즘입니다. 주로 종속 변수와 독립 변수 간의 선형 관계를 모델링하는 데 사용됩니다.
### 수식
\(y = \beta_0 + \beta_1x_1 + \beta_2x_2 + ... + \beta_nx_n + \epsilon\)
- \(y\): 예측값
- \(x_1, x_2, ..., x_n\): 독립 변수들
- \(\beta_0, \beta_1, ..., \beta_n\): 회귀 계수
- \(\epsilon\): 오차 항
### 목적
오차 항 ϵ의 제곱합을 최소화하는 회귀 계수를 찾는 것입니다.
### 사용 사례
주택 가격 예측, 연봉 예측, 판매량 예측 등 연속적인 값을 가지는 대상을 예측할 때 사용됩니다.
---
### 예제 코드[¶]()
<details>
<summary>Linear Regression</summary>
<div markdown="1">
```python
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import numpy as np
# 예제 데이터 생성
X = np.random.rand(100, 1) * 10 # 100개의 랜덤 데이터
y = 2.5 * X + 5 + np.random.randn(100, 1) * 2 # y = 2.5x + 5 + 잡음
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 선형 회귀 모델 학습
model = LinearRegression()
model.fit(X_train, y_train)
# 예측
y_pred = model.predict(X_test)
print("Coefficients:", model.coef_)
print("Intercept:", model.intercept_)
```
</div>
</details>
<details>
<summary>diabetes 데이터셋 활용</summary>
<div markdown="1">
### 개요
- 위스콘신 대학의 유방암 진단 데이터셋으로, 유방암 종양의 임상 정보를 기반으로 악성(malignant) 또는 양성(benign)으로 분류하는 문제에 사용됩니다.
### 특징
- 30개의 특징 변수가 있으며, 이는 종양의 다양한 특성(크기, 반경, 질감 등)을 나타냅니다.
### 목표 변수
- 종양이 악성인지(1) 양성인지(0)를 나타내는 이진 값입니다.
### 용도
- 이 데이터셋은 주로 분류 문제에 사용됩니다.
### 속성
- age: 나이
- sex: 성별
- bmi: 체질량지수
- bp: 평균 혈압
- s1 ~ s6: 6개의 혈청 측정값
```python
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 데이터 로드
diabetes = datasets.load_diabetes()
X = diabetes.data[:, np.newaxis, 2] # BMI feature만 사용
y = diabetes.target
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 선형 회귀 모델 학습
model = LinearRegression()
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse:.2f}")
```
</div>
</details>
<details>
<summary>Logistic Regression</summary>
<div markdown="1">
# 로지스틱 회귀 (Logistic Regression)
로지스틱 회귀는 이름에 '회귀'가 들어가지만, 분류 문제에 사용되는 알고리즘입니다. 주로 이진 분류 문제에 사용되며, 확률을 출력으로 가집니다.
### 수식
- \(P(Y=1) = \frac{1}{1 + e^{-(\beta_0 + \beta_1x_1 + \beta_2x_2 + ... + \beta_nx_n)}}\)
- \(P(Y=1)\): 클래스 1에 속할 확률
- \(x_1, x_2, ..., x_n\): 독립 변수들
- \(\beta_0, \beta_1, ..., \beta_n\): 회귀 계수
### 목적
- 로그 오즈를 최대화하는 것입니다. 로그 오즈는 실제 값과 예측 확률 간의 로그 비율로 계산됩니다.
### 사용 사례
- 스팸 메일 분류, 환자의 질병 발병 여부 예측, 고객 이탈 여부 예측 등 이진 분류 문제에 주로 사용됩니다. 다중 클래스 분류에도 확장하여 사용할 수 있습니다.
---
<details>
<summary>Code View</summary>
<div markdown="1">
```python
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
# 예제 데이터 생성
X = np.random.rand(100, 1) * 10 # 100개의 랜덤 데이터
y = (X > 5).astype(int).ravel() # X가 5보다 크면 1, 아니면 0
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 로지스틱 회귀 모델 학습
model = LogisticRegression()
model.fit(X_train, y_train)
# 예측
y_pred = model.predict(X_test)
print("Coefficients:", model.coef_)
print("Intercept:", model.intercept_)
```
</div>
</details>
</div>
</details>
<details>
<summary>breast_cancer 데이터셋</summary>
<div markdown="1">
### 개요
- 위스콘신 대학의 유방암 진단 데이터셋으로, 유방암 종양의 임상 정보를 기반으로 악성(malignant) 또는 양성(benign)으로 분류하는 문제에 사용됩니다.
### 특징
- 30개의 특징 변수가 있으며, 이는 종양의 다양한 특성(크기, 반경, 질감 등)을 나타냅니다.
### 목표 변수
- 종양이 악성인지(1) 양성인지(0)를 나타내는 이진 값입니다.
### 용도
- 이 데이터셋은 주로 분류 문제에 사용됩니다.
<details>
<summary>Code View</summary>
```python
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 데이터 로드
cancer = datasets.load_breast_cancer()
X = cancer.data
y = cancer.target
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 로지스틱 회귀 모델 학습
model = LogisticRegression(max_iter=10000) # max_iter를 증가시켜 수렴을 도움
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
acc = accuracy_score(y_test, y_pred)
print(f"Accuracy: {acc*100:.2f}%")
```
<div markdown="1">
</div>
</details>
</div>
</details>
---
### 참고[¶]()
- 어프렌티스 프로젝트 과목, 김재영 교수
- ChatGPT

@ -4,7 +4,22 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# 선형 회귀 (Linear Regression)"
"# 선형 회귀 (Linear Regression)\n",
"\n",
"선형 회귀는 연속적인 값을 예측하기 위한 회귀 알고리즘입니다. 주로 종속 변수와 독립 변수 간의 선형 관계를 모델링하는 데 사용됩니다.\n",
"\n",
"### 수식\n",
" \\(y = \\beta_0 + \\beta_1x_1 + \\beta_2x_2 + ... + \\beta_nx_n + \\epsilon\\)\n",
" - \\(y\\): 예측값\n",
" - \\(x_1, x_2, ..., x_n\\): 독립 변수들\n",
" - \\(\\beta_0, \\beta_1, ..., \\beta_n\\): 회귀 계수\n",
" - \\(\\epsilon\\): 오차 항\n",
" \n",
"### 목적\n",
"오차 항 ϵ의 제곱합을 최소화하는 회귀 계수를 찾는 것입니다.\n",
"\n",
"### 사용 사례\n",
"주택 가격 예측, 연봉 예측, 판매량 예측 등 연속적인 값을 가지는 대상을 예측할 때 사용됩니다."
]
},
{
@ -44,6 +59,32 @@
"print(\"Intercept:\", model.intercept_)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# diabetes 데이터셋\n",
"\n",
"### 개요\n",
" - 위스콘신 대학의 유방암 진단 데이터셋으로, 유방암 종양의 임상 정보를 기반으로 악성(malignant) 또는 양성(benign)으로 분류하는 문제에 사용됩니다.\n",
"\n",
"### 특징\n",
" - 30개의 특징 변수가 있으며, 이는 종양의 다양한 특성(크기, 반경, 질감 등)을 나타냅니다.\n",
"\n",
"### 목표 변수\n",
" - 종양이 악성인지(1) 양성인지(0)를 나타내는 이진 값입니다.\n",
"\n",
"### 용도\n",
" - 이 데이터셋은 주로 분류 문제에 사용됩니다.\n",
"\n",
"### 속성\n",
" - age: 나이\n",
" - sex: 성별\n",
" - bmi: 체질량지수\n",
" - bp: 평균 혈압\n",
" - s1 ~ s6: 6개의 혈청 측정값"
]
},
{
"cell_type": "code",
"execution_count": 9,
@ -86,7 +127,20 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# 로지스틱 회귀 (Logistic Regression)"
"# 로지스틱 회귀 (Logistic Regression)\n",
"로지스틱 회귀는 이름에 '회귀'가 들어가지만, 분류 문제에 사용되는 알고리즘입니다. 주로 이진 분류 문제에 사용되며, 확률을 출력으로 가집니다.\n",
"\n",
"### 수식\n",
" - \\(P(Y=1) = \\frac{1}{1 + e^{-(\\beta_0 + \\beta_1x_1 + \\beta_2x_2 + ... + \\beta_nx_n)}}\\)\n",
" - \\(P(Y=1)\\): 클래스 1에 속할 확률\n",
" - \\(x_1, x_2, ..., x_n\\): 독립 변수들\n",
" - \\(\\beta_0, \\beta_1, ..., \\beta_n\\): 회귀 계수\n",
"\n",
"### 목적\n",
" - 로그 오즈를 최대화하는 것입니다. 로그 오즈는 실제 값과 예측 확률 간의 로그 비율로 계산됩니다.\n",
"\n",
"### 사용 사례\n",
" - 스팸 메일 분류, 환자의 질병 발병 여부 예측, 고객 이탈 여부 예측 등 이진 분류 문제에 주로 사용됩니다. 다중 클래스 분류에도 확장하여 사용할 수 있습니다."
]
},
{
@ -116,6 +170,25 @@
"print(\"Intercept:\", model.intercept_)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# breast_cancer 데이터셋\n",
"\n",
"### 개요\n",
" - 위스콘신 대학의 유방암 진단 데이터셋으로, 유방암 종양의 임상 정보를 기반으로 악성(malignant) 또는 양성(benign)으로 분류하는 문제에 사용됩니다.\n",
"\n",
"### 특징\n",
" - 30개의 특징 변수가 있으며, 이는 종양의 다양한 특성(크기, 반경, 질감 등)을 나타냅니다.\n",
"\n",
"### 목표 변수\n",
" - 종양이 악성인지(1) 양성인지(0)를 나타내는 이진 값입니다.\n",
"\n",
"### 용도\n",
" - 이 데이터셋은 주로 분류 문제에 사용됩니다."
]
},
{
"cell_type": "code",
"execution_count": 11,

Loading…
Cancel
Save