상관관계는 -1 ~ +1 사이의 값으로 나타난다.
음수는 음의 상관관계, 양수는 양의 상관관계를 가진다.
Survived 와 Pclass 는 음의 상관관계를 가지므로, 등급이 낮을 수록 생존율은 높다.
Survived 와 Fare 은 양의 상관관계를 가지며, 요금이 높을 수록 생존율은 높다
import numpy as np
import matplotlib.pyplot as plt
2. 데이터 준비
공부 시간과 성적 데이터를 준비한다.
공부 시간에 따른 성적을 예측할 것이기 때문에 공부시간을 독립변수(x)로 하고, 성적 데이터를 종속변수(y)로 설정한다.
# 공부 시간 x와 성적 y의 넘파이 배열 생성
x = np.array([2, 4, 6, 8])
y = np.array([81, 93, 91, 97])
3. 데이터 분포 확인
그래프로 데이터 분포를 확인한다.
plt.scatter(x, y)
plt.show()
데이터 분포
4. 하이퍼 파라미터 설정
이제 선형회귀 모델을 만들기 위해 하이퍼 파라미터를 설정한다.
하이퍼 파라미터(Hyper parameter)란?
모델을 만들 때 사용자가 직접 세팅해주는 값으로 학습률, 이웃수(KNN) 등이 있다.
경사하강법을 시작 하기 전 기울기와 절편 값을 초기화 한다.
# 기울기 a와 절편 b의 값을 초기화
a = 0
b = 0
학습률을 설정한다.
학습률(Learning rate)란?
경사하강법에서는 점을 따라 이동하는데, 이 점이 어느 만큼 이동시킬지 정해주는 것이다.
학습률이 작으면 학습이 오래 걸릴 수 있으며, 반대로 학습률이 너무 크면 최소값을 지나쳐 정확한 학습을 할 수 없다.
따라서 적절한 학습률을 설정해줘야 한다.
# 학습률 설정
lr = 0.03
에포크(반복횟수)도 설정한다.
# 반복 횟수 설정
epochs = 2001
5. 경사하강법을 이용하여 모델 학습
에포크 수 만큼 반복하며 경사하강법을 이용해 모델을 학습시킨다.
# x 값 개수 저장
n = len(x)
# 경사하강법 시작
for i in range(0, epochs): # 에포크 수 만큼 반복
y_pred = a * x + b # 예측 값 계산
error = y - y_pred # 실제 값과 예측 값의 오차
a_diff = (2/n) * sum(-x * (error)) # 오차 함수를 a로 편미분
d_diff = (2/n) * sum(-(error)) # 오차 함수를 b로 편미분
a = a - lr * a_diff # 학습률을 곱해 기존의 a 값을 업데이트
b = b - lr * d_diff # 학습률을 곱해 기존의 b 값을 업데이트
if i % 100 == 0: # 100번 반복될 때마다 현재의 a 값, b 값을 출력
print("epoch=%.f, 기울기=%.04f, 절편=%.04f" % (i, a, b))
닉네임 설정 시 사용하기 위한 Form을 "nick", 채팅은 "message"로 하였다.
main
form#nick
input(type="text", placeholder="choose a nickname", required)
button Save
ul
form#message
input(type="text", placeholder="write a msg", required)
button Send
프론트엔드 : 기능
app.js 에 버튼을 누르면 닉네임 및 메시지를 전송하도록 구현한다.
먼저 서버로 메시지 전송 시 String 형태로 보내주기 위해, JSON -> String 로 변환하는 함수를 작성한다.
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 Chat
link(rel="stylesheet", href="https://unpkg.com/mvp.css")
body
header
h1 Chat
main
h2 hello
script(src="/public/js/app.js")