Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Week2] - donghwan #43

Open
wants to merge 2 commits into
base: week2
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
151 changes: 151 additions & 0 deletions week1/task1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
# 1장 – 한눈에 보는 머신러닝

## 목차
1. [1. 머신러닝 개요](#1-머신러닝-개요)
2. [2. 데이터 준비](#2-데이터-준비)
3. [3. 선형 회귀 모델](#3-선형-회귀-모델)
4. [4. k-최근접 이웃 회귀](#4-k-최근접-이웃-회귀)
5. [과제](#과제-1-선형-회귀와-k-최근접-이웃을-사용한-삶의-만족도-예측)

---

## 1. 머신러닝 개요
- **정의**: 머신러닝이란 데이터를 사용해 패턴을 학습하고 새로운 데이터에 대한 결과를 예측하는 기술
- **사용 예제**:
- 가격 예측: 아파트의 크기와 위치로 가격 예측
- 사용자 만족도: GDP로 국가의 삶의 만족도 예측

---

## 2. 데이터 준비

### 데이터 설명
- 데이터는 **1인당 GDP**(독립 변수)와 **삶의 만족도**(종속 변수)로 구성
- 예제 데이터:
| GDP per capita (USD) | Life satisfaction |
|-----------------------|-------------------|
| 30000 | 5.5 |
| 40000 | 6.0 |
| 50000 | 6.5 |
| 60000 | 7.0 |

### 데이터 시각화
```python
import matplotlib.pyplot as plt
import pandas as pd

# 데이터 로드
data = {"GDP per capita (USD)": [30000, 40000, 50000, 60000],
"Life satisfaction": [5.5, 6.0, 6.5, 7.0]}
df = pd.DataFrame(data)

# 데이터 시각화
df.plot(kind="scatter", x="GDP per capita (USD)", y="Life satisfaction")
plt.title("GDP와 삶의 만족도 관계")
plt.xlabel("GDP per capita (USD)")
plt.ylabel("Life satisfaction")
plt.show()
```
<img width="574" alt="스크린샷 2024-11-18 오후 9 11 31" src="https://github.com/user-attachments/assets/b78c0d0d-3fbb-4f40-97cb-a1d66c3ba91a">

## 3. 선형 회귀 모델

### 정의
- **선형 회귀**는 독립 변수와 종속 변수 간의 **직선 관계**를 모델링
- 선형 모델의 수식:
<img width="135" alt="스크린샷 2024-11-18 오후 8 43 37" src="https://github.com/user-attachments/assets/d6178ea5-0190-4c30-a6d0-e7e5072aab69">
<img width="249" alt="스크린샷 2024-11-18 오후 8 46 09" src="https://github.com/user-attachments/assets/c17e8da2-0d34-4ffb-a0ce-82435573db91">

### 코드
```python
from sklearn.linear_model import LinearRegression

# 독립 변수(X)와 종속 변수(y)
X = df[["GDP per capita (USD)"]].values
y = df[["Life satisfaction"]].values

# 선형 회귀 모델 생성 및 학습
model = LinearRegression()
model.fit(X, y)

# 예측
X_new = [[37655]] # 키프로스의 1인당 GDP
prediction = model.predict(X_new)
print(f"선형 회귀 예측 결과: {prediction[0, 0]:.2f}")
```
### 출력 예시
```
선형 회귀 예측 결과: 5.88
```

## 4. k-최근접 이웃 회귀

### 정의
- **k-최근접 이웃 회귀(k-NN)**는 새로운 데이터 포인트와 가장 가까운 k개의 데이터를 사용하여 예측하는 모델
- 주요 작동 원리:
1. 새로운 데이터와 기존 데이터 간의 거리를 계산
2. 가장 가까운 k개의 데이터를 선택
3. 선택된 데이터들의 평균을 계산하여 예측값으로 사용

- k-NN의 특징
장점: 데이터 분포를 잘 반영하며, 복잡한 패턴을 다룰 수 있음.
단점: 데이터 양이 많을수록 계산 비용이 증가하며, 최적의 k 값을 찾는 것이 중요.

### k-NN 회귀 코드

```python
from sklearn.neighbors import KNeighborsRegressor

# k-최근접 이웃 회귀 모델 생성
model = KNeighborsRegressor(n_neighbors=3)
model.fit(X, y)

# 예측
prediction_knn = model.predict(X_new)
print(f"k-최근접 이웃 예측 결과: {prediction_knn[0, 0]:.2f}")
```
### 출력 예시
```
k-최근접 이웃 예측 결과: 6.00
```
--

# 과제: 1. 선형 회귀와 k-최근접 이웃을 사용한 삶의 만족도 예측

## 목표
- **선형 회귀**와 **k-최근접 이웃**을 사용하여 키프로스의 삶의 만족도를 예측하고, 결과를 비교하세요.

---

## 단계별 과제

### 1. 데이터 준비
1. 아래의 데이터를 사용하여 **GDP**와 **삶의 만족도**를 생성하세요.
2. `pandas`를 사용해 데이터를 DataFrame으로 변환하세요.
3. `matplotlib`를 사용해 데이터를 시각화하세요.

| GDP per capita (USD) | Life satisfaction |
|-----------------------|-------------------|
| 30000 | 5.5 |
| 40000 | 6.0 |
| 50000 | 6.5 |
| 60000 | 7.0 |

---

### 2. 모델 학습
1. **선형 회귀 모델**:
- **`LinearRegression`**을 사용해 모델을 정의하고 학습시키세요.
2. **k-최근접 이웃 모델**:
- **`KNeighborsRegressor`**를 사용해 \( k=3 \)으로 모델을 정의하고 학습시키세요.

---

### 3. 예측
1. 키프로스의 1인당 GDP\(37655 USD\)를 입력하여 두 모델의 삶의 만족도 예측값을 출력하세요.

---

### 4. 결과 비교
두 모델의 예측 결과를 비교후, 장단점을 간단히 작성하세요.

102 changes: 102 additions & 0 deletions week1/task2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# 과제2: Iris 데이터셋을 사용하여 꽃의 품종을 예측하는 간단한 분류 모델 만들기

## 목차
1. [1. 분류(Classification)](#1-분류classification)
2. [2. Iris 데이터셋](#2-iris-데이터셋)
3. [3. Logistic Regression](#3-logistic-regression)
4. [4. 정확도(Accuracy)](#4-정확도accuracy)
5. [과제](#과제-iris-데이터셋을-사용하여-꽃의-품종을-예측하는-간단한-분류-모델-만들기)


## 1. 분류(Classification)
- **정의**: 머신러닝에서 분류는 입력 데이터의 레이블(클래스)을 예측하는 작업입니다.
- 예: 이메일이 스팸인지 아닌지를 예측하거나, 꽃의 품종을 분류하는 문제.
- **사용 예**:
- 스팸 메일 필터링
- 질병 진단
- 이미지에서 객체 분류
- **알고리즘**:
- Logistic Regression, Decision Tree, SVM, Random Forest 등.

## 2. Iris 데이터셋

### Iris 데이터셋이란?
- 머신러닝의 기본 예제로 사용되는 데이터셋으로, 세 가지 종류의 꽃(Setosa, Versicolor, Virginica)에 대한 정보를 담고 있습니다.
- 데이터의 각 샘플은 4개의 특성(feature)을 포함합니다:
- 꽃받침 길이(Sepal Length)
- 꽃받침 너비(Sepal Width)
- 꽃잎 길이(Petal Length)
- 꽃잎 너비(Petal Width)

### 데이터 구성:
- 총 150개의 샘플로 이루어져 있으며, 각 클래스에 50개씩의 샘플이 포함되어 있습니다.

## 3. Logistic Regression
- **정의**:
Logistic Regression은 이름과는 달리 회귀가 아닌 **분류 알고리즘**입니다.
- 입력 데이터를 분석하여 특정 클래스에 속할 확률을 예측합니다.

- **작동 원리**:
데이터를 선형적으로 분리할 수 있는 초평면(Hyperplane)을 찾고, 그 결과를 확률로 변환하여 예측합니다.

## 4. 정확도(Accuracy)
- **정의**:
모델이 예측한 값 중에서 실제 레이블과 일치하는 예측의 비율입니다.

- **공식**:
\[
\text{Accuracy} = \frac{\text{Correct Predictions}}{\text{Total Predictions}}
\]

- **주의**:
데이터가 불균형한 경우(예: 한 클래스가 90% 이상을 차지하는 경우) 높은 정확도가 반드시 좋은 모델을 의미하지 않을 수 있습니다.

</br>
</br>
</br>

## 과제: Iris 데이터셋을 사용하여 꽃의 품종을 예측하는 간단한 분류 모델 만들기

## 목표
주어진 데이터에서 꽃의 특성(길이와 너비)을 바탕으로 꽃 품종을 예측하는 모델을 만들어보세요.


### 1. 데이터 탐색
- `sklearn.datasets.load_iris`를 사용하여 Iris 데이터셋을 불러오세요.
- 데이터를 간단히 출력하고 특성과 타깃의 형태를 확인하세요.


### 2. 데이터 분할
- 데이터를 훈련 세트와 테스트 세트로 나누세요. (`train_test_split` 사용)
- 테스트 데이터 비율은 20%로 설정하고, `random_state=42`로 고정하세요.


### 3. 모델 정의 및 훈련
- `LogisticRegression` 모델을 정의하고 훈련 데이터로 학습시키세요.


### 4. 예측 및 평가
- 테스트 데이터를 사용하여 품종을 예측하세요.
- 예측 결과를 기반으로 정확도를 출력하세요. (`accuracy_score` 사용)


### 참고
- **Documentation**:
- [Scikit-learn Logistic Regression](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html)
- [Scikit-learn Accuracy Score](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html)
- **필요한 라이브러리**:
- `sklearn.datasets`, `sklearn.model_selection`, `sklearn.linear_model`, `sklearn.metrics`


**출력 예시**:
```plaintext
데이터셋 샘플:
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7 3.2 1.3 0.2]
[4.6 3.1 1.5 0.2]
[5. 3.6 1.4 0.2]]
타깃 샘플:
[0 0 0 0 0]
특성(shape): (150, 4)
타깃(shape): (150,)
23 changes: 23 additions & 0 deletions week2-donghwan/week2-conceptnote.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# week2- concept note
## 선형 회귀 모델 (Linear Regression)
* 데이터 간 선형관계를 모델링 해서 예측
* 최소제곱법을 사용해 가중치를 학습
* 이때 선형 회귀에서 정규방정식을 통해 가중치 계산

## 경사하강법
* 비용함수의 기울기를 계산하여 최소값을 찾아가는 최적화 알고리즘
* 학습률을 설정하여 가중치를 업데이트
* 모든 데이터를 사용해 손실함수의 기울기를 계산한 후 가중치 업데이트

## 로지스틱 회귀
* 이진분류 문제에서 사용되는 모델로 확률을 예측
* 시그모이드 함수로 출력 값을 0과 1 사이로 변환함

## 서포트 벡터 머신(SVM)
* 데이터 간 마진을 최대화하여 분류
* 고차원 공간에서 선형 분리가 가능하도록 커널 함수 사용
* 결정경계는 50% 확률로 분류되는 선형 경계로 데이터를 2개의 클래스로 나뉨

## 결정트리와 랜덤 포레스트
* 결정트리는 데이터를 조건에 딸 분할하여 예측
* 랜덤 포래스트는 여러 결정트리를 앙상블하여 예측 성능을 향상
Loading