- 실전 머신러닝 적용
1. 회귀 | 논리회귀
[논리회귀 | Logistic regression]
선형회귀로 풀기 힘든 문제를 논리회귀를 이용해 해결해 나아갈 수 있다.
논리회귀 함수는 선형회귀 함수와 다르게 시그모이드 함수를 이용해 오차범위를 줄여나아간다.
aka. Logistic function (=Sigmoid function) | 쉽게 설명하자면 논리회귀에 사용되는 함수이름이 시그모이드 함수
논리회귀는 input 값은 어느값이든 받을 수 있지만, output 값은 0~1 사이의 값으로 표현한다. (확률)
또한 우리는 임계치(threshold)에 따라 0과 1로 나눌 수 있다.

👉 0.5(threshold)를 기준으로 1에 수렴하는 값은 모두=1 / 0에 수렴하는 값은 모두=0 으로 나눌 수 있다.
( + threshold 는 변동 가능 )
시그모이드 함수라고 해도 가설과/ 손실함수 식의 형태는 선형함수와 비슷하다.
(선형함수 정리 링크 : https://wonprogrammer.tistory.com/59?category=1085537 )
[논리회귀 | 손실함수]
손실함수의 형태는 확률에 따라 바뀌는데
- 정답이 0 인 경우 ( y(cost) = 0 ) → 확률이 줄어들어야 1로 수렴
- 정답이 1 인 경우 ( y(cost) = 1 ) → 확률이 늘수록 1로 수렴

- Crossentropy? 가설과 정답값을 나타내는 그래프의 차이를 최소화 시켜주는 함수

2. 회귀 | 다항논리회귀
[다항논리회귀 | Multinomial logistic regression]
논리회귀 방식에서의 output 값이 0~1사이의 값이 였다면 다항논리회귀는 output값이 여러개가 존재할때 적용하는 원리이다.
예를들어) output값이 아래와 같이 0~4라면?
| 결과값 | class | One-hot encoding |
| A | 0 | [1, 0, 0, 0, 0] |
| B | 1 | [0, 1, 0, 0, 0] |
| C | 2 | [0, 0, 1, 0, 0] |
| D | 3 | [0, 0, 0, 1, 0] |
| F | 4 | [0, 0, 0, 0, 1] |
→ 다항논리회귀에선
- 1) 클래스(라벨)의 개수만큼 배열을 0으로 채운다.
- 2) 각 클래스의 인덱스 위치를 정한다.
- 3) 각 클래스에 해당하는 인덱스에 1을 넣는다.
이렇게 output 값을 컴퓨터가 파악할 수 있도록 만들어주는 것을 One-hot encoding 이라고 한다.
🔥 다항논리함수와 One-hot encoding은 짝꿍 🔥
[Softmax 함수]
Softmax 함수는 One-hot encoding 된 배열의 합이 1인것을 이용해 확률을 구하는 함수이다.
다만, 시그모이드 함수와 다른것은 x축 값이 0과 1사이가 아닌 class의 값들로 정의되어 있다.
aka. Multinomial logistic function (= Softmax function) | 쉽게 설명하자면 다항논리회귀에 사용되는 함수이름이 Softmax

+ 다항 논리 회귀 함수에서도 이용되는 Crossentropy 함수 (가설과 정답값을 나타내는 그래프의 차이를 최소화 시켜주는 함수)
3. 다양한 머신러닝 모델
[Support vector machine (SVM)]
정답값들의 경곗값을 잘 설정하여 정답값을 분류하는 모델

각 그래프의 축을 Feature(특징),
각 고양이, 강아지와 빨간 vector(경곗값) 간의 최소 벡터의 거리를 그린 벡터를 Support vector라고 부릅니다.
그리고 정답값 간의 최소 벡터의 거리를 Margin이라고 부르죠.
Margin이 넓을수록 좋은 SVM model 이다. (분류된 값의 차이가 크기 때문에 오류날 확률또한 줄어듬)
+ ⚠️ 만약 충성심이 강한 개냥이가 등장한다면 어떻게 할까요? 그럴 경우에는 Feature(특성)의 개수를 늘려서 학습시키는 것이 일반적
[k-Nearest neighbors (KNN)]

비슷한 특성끼리의 군집화
[Decision tree (의사결정나무)]

aka. 스무고개
[Random forest]
Decision tree (의사결정나무) 의 합본 + Majority voting → 답을 결정

4. 전처리
[전처리(Preprocessing)]
전처리란? Data의 정제 라고 할 수 있다.
- 데이터 정제의 방식
| 정규화 | 표준화 |
| 정규화는 데이터를 0과 1사이의 범위를 가지도록 만드는 것. 같은 특성의 데이터 중에서 가장 작은 값을 0으로 만들고, 가장 큰 값을 1로 만든다 |
표준화는 데이터의 분포를 정규분포로 바꿔준다. 즉 데이터의 평균이 0이 되도록하고 표준편차가 1이 되도록 만들어주는 것 |
| 예) 100점 중에 50점 / 500점 중에 50점 50점만 본다면 두 사람은 실력이 똑같다고 할 수 있지만 동일한 조건이 아니기 때문에 답이 아니다. → 따라서 정규화를 해주면 : 100점 중 50점은 0.5의 확률 : 500점 중 50점은 0.1의 확률 |
- Django
[장고 기본 설정 후]
모든 장고 설정 후
- 가상환경 실행
- 서버 실행 확인
- makemigrations - migrate
- db.sqlite3 확인
- createsuperuser
- 어드민 페이지 확인
까지 해줘야 장고 프로젝트를 본격적으로 시작할 준비가 된다.
[회원모델구현]
회원모델을 구현할 앱을 하나 만들어 준다. → python3 manage.py startapp 앱이름
models.py구성 → settings / admin 작업
- 1) 회원모델에서 사용할 model을 구성하기 위해 models.py 구상
from django.db import models
from django.contrib.auth.models import AbstractUser
# from django.conf import settings
# Create your models here.
class User(AbstractUser):
profile = models.TextField(max_length=500, blank=True)
import / class 모델 형태는 공식 문서 활용 | https://docs.djangoproject.com/en/4.1/topics/auth/customizing/
Customizing authentication in Django | Django documentation | Django
Django The web framework for perfectionists with deadlines. Toggle theme (current theme: auto) Toggle theme (current theme: light) Toggle theme (current theme: dark) Toggle Light / Dark / Auto color theme Overview Download Documentation News Community Code
docs.djangoproject.com
- 2-1) models.py 구성 후 settings.py 에 우리가 사용할 user를 등록해 준다.
AUTH_USER_MODEL = 'users.User'
👉 우리가 사용할 유저는 = '앱이름.class이름' 으로 설정해 준다.
- 2-2) 마찬가지로, models.py 구성 후 admin.py 에 우리가 사용할 user를 등록해 준다.
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
admin.site.register(User, UserAdmin)
👉 이후 장고 admin 페이지에서 users 모델이 잘 등록이 되어있나 확인 해 준다.
[회원가입구현]
사용할 유저를 잘 등록해줬다면, 이후 유저가 회원가입을 할 수 있는 환경을 만들어 줘야한다.
urls.py(전체/앱)작업 → templates / views 작업
- 3) 유저가 이동할 수 있는 경로인 urls.py를 작업해 준다.
- 3-1) 전체 경로의 urls.py 에서 app 과 연동 할 수 있는 경로를 선언 해 준다.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('users/', include('users.urls')),
]
👉 include import 후 users에 있는 urls.py 연결 | 경로 이동시 'users/경로이름' 으로 들어가야 됨
- 3-2) 연결된 앱 urls.py를 작업 해 준다.
from django.urls import path, include
from users import views
app_name = 'users'
urlpatterns = [
path('signup/', views.signup, name='signup'),
]
👉 이제 전체 경로에 따로 선언을 하지 않아도 users.urls.py에서 선언된 경로로 이동 할 수 있다.
- 3-3) 해당 경로에 접근했을때 보여줄 templates 작업과 / 일어날 작업들을 만들어 주는 views.py 를 작업해 줘야 한다.
urlpatterns = [
path('1)signup/', 2)views.signup, name='signup'),
]
1) 보여줄 templates 이름(경로)
2) templates에서 일어날 작업들이 정의된 class 호출
- templates 작업
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sign Up Page</title>
</head>
<body>
<h1> 회원가입 페이지 </h1>
# 해당 action시 이동할 경로는 "{% url 'users:signup' %}" 이다.
<form action="{% url 'users:signup' %}" method="POST">
# 내 사이트 맞아! 를 확인시켜주는 보안 토큰
{% csrf_token %}
# type,name,placeholder 는 장고를 위한 변수
<input type="text"
name="username"
placeholder="username"
#id,class 는 단순 css 작업을 위한 변수
id='username'
class='username'
/>
<input type="password" name="password" id="" placeholder="password" />
<input type="password" name="passwordcheck" id="" placeholder="passwordcheck" />
<input type="submit" />
</form>
</body>
</html>
- views 작업
# 어디에서의 HttpResponse 응답인지 잘 확인해야됨(엉뚱한게 import 될 수 있음)
from django.http import HttpResponse
from django.shortcuts import render, redirect
from .models import User
def signup(request):
# 단순 주소창에 입력했을때 'GET' (경로이동 시)
if request.method == 'GET':
return render(request, 'signup.html')
# 회원가입 진행 (template에서 POST된 요청)
elif request.method == 'POST':
# 아래의 변수들은 signup.html안에 input박스에서 가져온 변수(name으로 정의돼있음)
username = request.POST.get('username')
password = request.POST.get('password')
passwordcheck = request.POST.get('passwordcheck')
if password == passwordcheck:
# models에 저장되어있는 User에 내가 만든 user 저장
User.objects.create_user(username=username, password=password)
return HttpResponse('회원가입 완료')
else:
# 안좋은 코드 (HttpResponse 단순 확인 용도일 뿐 변경될 예정)
return HttpResponse('비밀번호가 틀렸습니다')
return HttpResponse('다른 페이지')'woncoding > TIL' 카테고리의 다른 글
| TIL | 10.14.금 [Django🐢] (0) | 2022.10.14 |
|---|---|
| TIL | 10.13.목 [머신러닝 / Django🐢] (0) | 2022.10.14 |
| TIL | 10.11.화 [Django🐢] (0) | 2022.10.11 |
| TIL | 10.7.금 [머신러닝] (1) | 2022.10.11 |
| TIL | 10.6.목 [Django Project] (0) | 2022.10.06 |