분류 전체보기 439

머신러닝 7강. 선형회귀

길이라는 특성 하나만으로 무게를 예측한다는 게 말이 안 된다는 지난 시간의 문제점을 해결하기 위해 선형 회귀를 사용해볼 것이다. 선형 회귀에서 선과 점의 오차율은 음수가 될 수도 있기 때문에 모든 손실(잔차) 값에는 제곱을 해준 뒤 더해서 MSE(평균 오차 제곱)를 구한다. 구한 mse가 좋은 건지 알 수 없다. 여러 가지 선을 비교를 해보지 않았기 때문이다. 비교하기 위해 사용하는 게 미분이다. 미분으로 기울기를 변경해가며 mse가 최소인 지점을 찾아야 한다. 이 값이 최소가 되는 회귀식을 찾는 것을 최소 제곱법이라고 하고 방법은 경사 하강법(미분)을 사용해야 한다. 이 선형 회귀 알고리즘이 최소 제곱법을 찾아주고 이때 내부적으로 경사 하강법 알고리즘을 사용하는 것이다. from sklearn.line..

Python/머신러닝 2022.05.18

머신러닝 6강. k-최근접 이웃 회귀

지도 학습 알고리즘은 크게 분류와 회귀로 나뉜다. 회귀는 임의의 어떤 숫자를 예측하는 문제이다. 예측하려는 샘플에 가장 가까운 샘플 몇 개를 선택하여 이웃들의 타겟값의 평균이 예측 타겟값이 된다. 우선 농어의 길이만으로 무게를 예측해보자. import numpy as np import matplotlib.pyplot as plt perch_length = np.array([8.4, 13.7, 15.0, 16.2, 17.4, 18.0, 18.7, 19.0, 19.6, 20.0, 21.0, 21.0, 21.0, 21.3, 22.0, 22.0, 22.0, 22.0, 22.0, 22.5, 22.5, 22.7, 23.0, 23.5, 24.0, 24.0, 24.6, 25.0, 25.6, 26.5, 27.3, 27...

Python/머신러닝 2022.05.17

머신러닝 5강. 결정계수

회귀 전제 조건 : 100% 정답은 없다. 길이가 3일 때 regressor는 무게가 5일 것으로 예측했지만 실제 무게는 6이였다. 이때 발생하는 간극을 오차라고 한다. SSE (Error Some of Squares) y의 평균과 regressor가 예측한 선 사이는 충분히 예측 가능한 범위라 하여 SSR이라고 한다. SSR (Regression Some of Squares) 그리고 SSE와 SSR을 더한 값을 SST라고 한다. SST (Total Some of Squares) 전제적으로 봤을 때 SSE의 평균이 가장 작아지도록 선을 그려야한다. 전체 분산의 평균 최소점 오차율이 작도록 직선의 기울기를 바꾸면서 SSE가 가장 작은 선을 찾는 알고리즘이 regressor이다.

Python/머신러닝 2022.05.17

몽고DB 16강. aggregate

더미 데이터 넣기 use('cosdb'); for(let i=1; i < 21; i++) { db.users.insertOne({"i" : i, "username" : "user" + i, "age" : 12}); } db.users.find(); SELECT 연습을 할 건데 기본적인 CRUD는 스프링 부트에서 지원해주지만 복잡한 쿼리(고급 SELECT)를 수행하기 위해서는 쿼리를 직접 짜야한다. 이때 aggregate(집계 함수)를 사용해준다. 집계 함수의 포인트 : 파이프 라인 SELECT 한 결과를 가지고 다시 SELECT를 거치며 내가 원하는 결과를 도출할 수 있다. 몽고에서 파이프 라인을 도큐먼트 스트림이라고 부른다 1. match 일치 (RDB : WHERE) : 행을 추리기 2. projec..

DB/MongoDB 2022.05.16

머신러닝 4강. 데이터 전처리

K-최근접 이웃 알고리즘으로 훈련한 데이터에 이상한 점이 발견되었다. 분명 테스트 세트의 도미와 빙어를 모두 올바르게 분류했는데 이 모델에 길이 25cm, 무게 150g 데이터를 넣고 결과를 확인해봤더니 당연히 도미(1)로 예측할 줄 알았으나 빙어(0)로 예측했다. 대체 근처에 있는 이웃이 뭐길래 빙어로 예측했는지 그래프로 확인해보자. import matplotlib.pyplot as plt plt.scatter(train_input[:, 0], train_input[:, 1]) # 모든 행의 length, wieght plt.scatter(test_input[:, 0], test_input[:, 1]) # 모든 행의 length, wieght plt.scatter([25], [150], marker="..

Python/머신러닝 2022.05.14

머신러닝 3강. 표준 점수

표준 점수(standard score) : 각 특성 값이 평균에서 표준편차의 몇 배만큼 떨어져있는지를 나타냄 A학교 60 80 80 80 100 => 400 (평균 80) -20 0 0 0 +20 => 평균으로부터 얼마나 떨어져 있는지의 점수 B학교 40 60 60 60 80 => 300 (평균 60) -20 0 0 0 +20 => 평균으로부터 얼마나 떨어져 있는지의 점수 정규분포는 가장 평균이 되는 곳에 가장 많이 몰려있다 평균에서 데이터가 얼마나 떨어져 있는지의 점수를 모두 더해서 평균을 낸 것을 분산이라고 한다. 1. 분산 (데이터 - 평균) 제곱의 합 / 데이터 개수 모든 데이터의 분산을 다 더하면 0이 나와서 평균을 구할 수 없다. 부호를 없애기 위해 제곱을 사용한다. -20 0 0 0 +20 ..

Python/머신러닝 2022.05.14

머신러닝 2강. Cross Validation

머신러닝 알고리즘은 크게 지도 학습과 비지도 학습으로 나눌 수 있다. 지도 학습 알고리즘은 훈련하기 위한 데이터와 정답(타겟)이 필요하다. 1강에서 봤던 마켓과 머신러닝에서 도미와 빙어의 길이와 무게를 알고리즘에 사용했다. 이 경우 정답을 도미인지 아닌지 여부이다. 지도 학습에서는 데이터와 정답을 입력(input)과 타겟(target)이라고 하며, 이를 합쳐 훈련 데이터라고 부른다. 입력으로 사용된 생선의 이름과 무게를 특성(feature)이라고 한다. 특성에 의해 타겟이 변경된다. 반면 비지도 학습 알고리즘은 타겟 없이 입력 데이터만 사용한다. 미리 학습하지 못하여 정답을 사용하지 않으므로 무언가를 맞힐 수가 없다. 대신 데이터를 잘 파악하거나 변형하는데 도움을 준다. 머신러닝 알고리즘의 성능을 제대로..

Python/머신러닝 2022.05.13

머신러닝 1강. 사이킷런

마켓과 머신러닝 - 도미와 빙어 데이터 준비하기 - 사이킷런 사용을 위해 2차원 리스트로 변경 - 데이터(fist_data)와 타겟 데이터(fish_target) 준비 - 학습(훈련) - 평가 - 예측 - 참고 사이트 : 캐글 https://www.kaggle.com/ 개발에 필요한 데이터들의 모임 1. 데이터 준비 bream_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, ..

Python/머신러닝 2022.05.12

파이썬 11강. numpy

파이썬은 객체를 지향하는 언어는 아니다. 모든 게 1급 객체이기 때문에 기본 자료형이 값을 들고있는건 아무것도 없다는 말이다. 모든게 다 콜 바이 레퍼런스! 포인터인 것이다. 사이즈를 모르기 때문에 모두 heap 주소를 참조한다. 레퍼런스 타입의 단점은 항상 점프해야한다. 20번 주소로 갔더니 300번지라고 적혀있어서 300번지로 가면 안녕이라는 데이터가 있다. 300번지가 포인터인것이다. 찾아갔을때 값이 바로 있는게 찾기 빠른데, 주소가 있어서 한번 더 찾아가야 하면 느려지기 때문에 나온게 numpy 라이브러리이다. 수치연산 라이브러리! 장점 1. 차원을 다루기 좋은 메서드를 많이 제공한다. 2. call by reference 단점 해결 → numpy 라이브러리를 사용하는 순간 API가 된다. num..

Python 2022.05.12

스프링부트 Junit5 통합 테스트

Layer를 분리해놓은 이유 : 책임 분리 컨트롤러가 잘 실행하려면 레이어가 다 메모리에 떠야 한다. 무거울 것이다. 이는 메인을 실행하는 것과 마찬가지이다. 보통 메인으로는 테스트를 잘하지 않는다. 메인으로 실행한다는 것은 전체 프로젝트를 띄우는 것이기 때문이다. 전체 프로그램을 메모리에 띄우고 테스트하는 것을 통합 테스트라고 한다. @SpringBootTest // 통합테스트 -> 이 파일이 실행될 때 모든게 메모리에 다 뜸 public class NaverApiControllerTest { } 내가 윈도우에서 개발한 프로젝트를 AWS로 던져서 gradle로 빌드할 때 빌드 과정에서 test 파일을 무조건 실행한다. 테스트가 잘 실행되면 jar 파일로 구워준다. 만약 테스트가 실패..

Spring 2022.05.11