• 지도학습: 분류모델-SVM
  • 지도학습: 분류모델-KNN
  • 지도학습: 분류모델-나이브베이즈
  • 지도학습: 분류모델-의사결정나무
  • GITHUB 특강
  • 회고

 

☑️ 지도학습 : 분류모델 - SVM

🔎SVM이란?

  • 서포트 벡터 머신(SVM)은 분류와 회귀 분석에 사용되는 강력한 지도학습 모델
  • 데이터를 분류하기 위해 결정 경계(결정 초평면, hyperplane)를 찾아 분류합니다.
  • 초평면은 두 클래스 사이의 최대 마진을 보장하는 방식으로 선택합니다.

결정경계, 초평면, hyperplane, 마진

몸무게를 억지로 맵핑을 해 평면에 나누어 선으로 표현할 수 있게 한다는데 방법은? 

 

결정경계: 데이터를 분리한 선

  • 2차원에서는 선(line)이 결정 경계가 될 수 있습니다.
  • 3차원에서는 평면(plane)이 결정 경계가 됩니다.
  • 고차원에서는 초평면(hyperplane)이 결정 경계 역할을 합니다.

초평면: 데이터가 4차원 이상일 때 나눠주는 평면이 단순한 2차원이 아닌 평면

초평면 = hyperplane

서포터 백터: 결정 초평면에서 가장 가깝게 위치한 데이터

마진 : 마진은 하이퍼플레인과 가장 가까운 서포트 벡터(support vector) 사이의 거리입니다.

 

 

🔎 SVM의 역할

  • SVM은 이 마진을 최대화하는 하이퍼플레인을 찾는 것이 목표입니다. 마진이 넓을수록 하이퍼플레인은 더 많은 데이터를 안정적으로 분리할 수 있으며, 이는 모델의 일반화 성능을 향상시킵니다.
  • 두 클래스의 데이터 포인트 중에서 하이퍼플레인과 가장 가까운 두 서포트 벡터로부터의 거리를 최대화하는 하이퍼플레인을 찾습니다. 이를 통해 데이터의 불확실성을 줄이고 분류의 정확성을 높입니다.

 

데이터로드 전처리 과정은 전과 같음

📚 모델학습 코드

from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

 

# 모델 생성 및 학습
model = SVC(kernel='linear') #kernel설정 현재는 선형모델
model.fit(X_train, y_train)

 

# 예측
y_pred = model.predict(X_test)

# 평가
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(f"Classification Report:\n{classification_report(y_test, y_pred)}")
print(f"Confusion Matrix:\n{confusion_matrix(y_test, y_pred)}")

 

🔎 scikit learn의 장점으로 인터페이스가 동일해서 모델 가져오기부분과 생성 및 학습 부분만 다름

 


 

☑️ 지도학습 : 분류모델 - KNN

🔎KNN이란?

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

비모수적: KNN은 데이터의 분포에 대한 가정이 없으므로 비모수적 방법으로 분류됩니다.

 

🔎 KNN의 역할

  • 분류: KNN은 주어진 데이터 포인트에 대해 가장 가까운 K개의 이웃을 찾아 그 이웃들이 속한 클래스의 다수결 투표를 통해 해당 데이터 포인트의 클래스를 결정합니다. 예를 들어, K=3이라면, 가장 가까운 3개의 이웃 중 2개가 클래스 A에 속하고 1개가 클래스 B에 속한다면, 새로운 데이터 포인트는 클래스 A로 분류됩니다.
  • 회귀: KNN을 회귀 문제에 사용할 때는 K개의 이웃의 평균 값을 사용하여 예측 값을 결정합니다. 즉, K개의 이웃의 값을 더하고 K로 나누어 새로운 데이터 포인트의 값을 예측합니다.

k개를 설정하는 방법은 없고 임의로 넣어서 가장 적합한 상태가 나올 때까지 테스트해 보아야 한다.

 

 

📚 모델학습 코드

from sklearn.neighbors import KNeighborsClassifier #KNN의 알고리즘을 sklearn에서 가져오기
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix #여러가지 matrix 가져오기

# KNN모델 생성 및 학습 (이웃을 5개로 놓음)
model = KNeighborsClassifier(n_neighbors=5)
model.fit(X_train, y_train)

# 예측
y_pred = model.predict(X_test)

# 평가
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(f"Classification Report:\n{classification_report(y_test, y_pred)}")
print(f"Confusion Matrix:\n{confusion_matrix(y_test, y_pred)}")

 

🔎 scikit learn의 장점으로 인터페이스가 동일해서 모델 가져오기부분과 생성 및 학습 부분만 다름

 

 


 

☑️ 지도학습 : 분류모델 - 나이브베이즈

 

🔎 나이브베이즈란?

  • 나이브베이즈(Naive Bayes) 분류기는 베이즈 정리를 기반으로 하는 통계적 분류 기법입니다.
  • 나이브라는 이름이 붙은 이유는 각 특징(feature)이 독립적이라고 가정하기 때문입니다. (독립적이지 않으면 계산할 수 없다)
  • 주로 텍스트 분류 문제에서 널리 사용됩니다.
  • 하나하나의 단어가 어떤 클래스에 속할 확률을 계산해서 확률들을 종합적으로 고려해서 분류하는 방법
  • 나이브 베이즈는 특정 클래스를 선택하는 조건부 확률을 계산하여 분류합니다.

 

🔎 나이브베이즈 종류

  • 가우시안 나이브베이즈: 특징들이 연속적이고 정규 포를 따른다고 가정합니다.(연속형 데이터)
  • 베르누이 나이브베이즈: 특징들이 이진수(0 또는 1)로 표현되는 경우 사용합니다.
  • 멀티노미얼 나이브베이즈: 특징들이 다항 분포를 따르는 경우 사용합니다.(텍스트 데이터)

🔎 나이브베이즈 목적

  • 나이브베이즈의 목표는 주어진 데이터 포인트가 특정 클래스에 속할 확률을 계산하여 분류하는 것입니다.

 

📚 모델학습 코드

from sklearn.naive_bayes import GaussianNB #가우시안 나이브베이즈 가져오기
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

# 모델 생성 및 학습
model = GaussianNB() #가우시안 나이브베이즈 모델 생성
model.fit(X_train, y_train)

# 예측
y_pred = model.predict(X_test)

# 평가
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(f"Classification Report:\n{classification_report(y_test, y_pred)}")
print(f"Confusion Matrix:\n{confusion_matrix(y_test, y_pred)}")

🔎 scikit learn의 장점으로 인터페이스가 동일해서 모델 가져오기부분과 생성 및 학습 부분만 다름

 


 

☑️ 지도학습 : 분류모델 - 의사결정나무

 

🔎 의사결정나무란?

  • 트리 구조로 이루어져 있습니다. 이 구조는 크게 노드와 가지로 이루어져 있으며, 데이터를 나누어가는 과정에서 예측에 필요한 규칙을 도출합니다.
  • 규칙은 불확실성이 낮아지도록 만들어야한다.

  • 각 내부 노드는 데이터의 특정 특징에 대한 테스트를 나타낸다.
  • 각 가지(branch)는 테스트 결과를 나타낸다.
  • 각 리프 노드(leaf)는 클래스 레이블을 나타냅니다.

 

🔎 불확실성을 낮추는 방법

  • 정보 이득(Information Gain) : 엔트로피(Entropy)값을 기준으로 데이터를 나눠준다. 엔트로피는 불확실성을 나타내며, 엔트로피가 낮을수록 불확실성이 적습니다.
  • 지니 계수(Gini Index): 불순도를 측정하는 방법으로, 지니 계수가 낮을수록 불순도가 적습니다

🔎  데이터의 불확실성이 변화가 없을 때 까지 나누어 주는 것이 의사결정나무의 학습이다.

 

 

📚 모델학습(파란글씨는 다른 부분)

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

# 모델 생성 및 학습
model = DecisionTreeClassifier(random_state=42)
model.fit(X_train, y_train)

# 예측
y_pred = model.predict(X_test)

# 평가
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(f"Classification Report:\n{classification_report(y_test, y_pred)}")
print(f"Confusion Matrix:\n{confusion_matrix(y_test, y_pred)}")

 

 

🔎 scikit learn의 장점으로 인터페이스가 동일해서 모델 가져오기부분과 생성 및 학습 부분만 다름

 


 

☑️ GITHUB 특강

🔎 GITHUB란?

  • Git은 형상 관리 도구 중 하나로, 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템이다.
  • Git은 소프트웨어 개발에서 소스 코드를 효과적으로 관리할 수 있도록 하는 무료, 공개 소프트웨어입니다.
  • Git은 프로젝트 폴더 내에서 작업을 기록하고, 버전 관리를 통해 체계적인 개발이 가능하도록 합니다.

📚 git 시작하기

1. git 다운 확인

  • git bash => git --version

2. Linux명령어로 파일 만들기

  • ls 현재 위치에서의 파일 목록 보기
  • ls -al 현재위치에서의 숨김 파일 포함 보기
  • pwd 현재 위치 보기
  • clear 명령어 지우기
  • cd 들어가려는 폴더 ex) cd desktop (만약 한글이름이나 띄어쓰기면 "묶어주세요")
  • cd .. 현재위치에서 한단계 뒤로 이동
  • mkdir 폴더이름  폴더만들기
  • touch 파일명.py 파일만들기
  • rm 파일명 파일삭제
  • rm -r 파일명 폴더 삭제
  • start . 현재파일 열기

3. 버젼관리 시작 로컬 저장소 생성/지정 git init

  • 특정 폴더에서 꼭 시작해야한다. 홈이나 바탕화면에서 하면 안된다.
  • 이것을 입력하게 되면 숨김파일로 .git이 생성 된다.
  • .git이 버젼관리 기록하는 파일이다.

4. 버젼관리 시작

  • git add 파일 => 관리를 시작할거다.

5. Commit

  • git commit => 이상태로 저장할거다.
  • git commit -m "남길 파일을 구분 할 수 있는 이름"
  • git status => commit한 내용을 확인
  • git log =>

 

 

📚  git의 세가지 영역

  • Working Directory 현재 git으로 관리하는 폴더(.git이 들어있는 폴더)
  • Staging Area 앞으로 Commit으로 남기고싶은 특정버젼으로 관리하고 싶은 파일이 있는 곳 
  • Repository Commit들이 저장되는 곳

 

☑️ 마크다운

 

🔎 마크다운이란?

  • 텍스트 기반의 마크업 문법
  • 마크업 = 태그를 이용하여 문서의 구조를 나타내는 표현법

 

📚 마크다운 실습

 

1. 헤딩

"#"갯수에 따라 제목의 수준을 구별(h1~h6)

ex)

# 제목

## 소제목

## 소소제목

 

2. 리스트

3가지 방법으로 사용할 수 있습니다.

-

*

1. 2.  3.

 

3. 파이썬 코드 넣기

esc밑에 `

ex)

```python

코드들

```

4. url이나 파일경로 넣기

[Google](링크) 를 하게 되면 링크를 걸 수 있다.

[파일 열기도 가능](파일 경로)

 

5. 이미지 넣기

![비워도 되고 아무거나](img/이미지파일 이름)

 

6. text 글꼴

일반

**뚱뚱**

*기울*

~~취소~~

 

7. 구분선(수평선)

***

---

___

 

8. 인용표현

> 인용

>>인용안에 인용

>>> 인용안에 인용안에 인용

 


 

🔎 회고

☑️ 지도학습 : 분류모델 - SVM

1. 결정경계:

데이터를 분리한 선

  • 2차원에서는 선(line)이 결정 경계가 될 수 있습니다.
  • 3차원에서는 평면(plane)이 결정 경계가 됩니다.
  • 고차원에서는 초평면(hyperplane)이 결정 경계 역할을 합니다.

2. 초평면:

  • 데이터가 4차원 이상일 때 나눠주는 평면이 단순한 2차원이 아닌 평면
  • hyperplane = 초평면

 

3. 마진:

  • 마진은 하이퍼플레인과 가장 가까운 서포트 벡터(support vector) 사이의 거리입니다.

 

4.서포터 백터:

  • 결정 초평면에서 가장 가깝게 위치한 데이터

 

5. 몸무게를 억지로 맵핑을 해 평면에 나누어 선으로 표현할 수 있게 한다는데 방법은? 

 

 

 

☑️ 지도학습 : 분류모델 - SVM

비모수적:

  • NN은 데이터의 분포에 대한 가정이 없으므로 비모수적 방법으로 분류됩니다.

 

 

오늘은 처음 들어보는 단어들이 많이 나왔지만 내용에 대한 정의가 이해가 가는 부분이 많아 궁금한 부분이 적었다.

 

오전에 파이썬 응용 문제를 풀는데 많은 시간을 할애하였고 특강이 2번이나 있어 강의를 많이 수강하지 못했다.

 

아직 사전캠프의 문제들에서도 감을 못잡고있어 오래걸리더라도 문제를 많이 풀어보고 다시 풀어보고 강의 교안의 코드들을 따라 써보는 것이 중요해 보인다. 

 

 

 

 

 

 

 

 

 

+ Recent posts