전체 글 139

[머신러닝 기초] 학습 유형

- 지도학습(Supervised Learning): 문제(feature)와 답(target, label)을 주면서 보정해 나감 분류: 양성/음성 등 단일값 예측 회귀: 연속값 예측 추천 시스템: A를 하면? -> B를 추천 시각, 음성 감지, 인지 - 비지도학습(Un-Supervised Learning): 답(target, label)이 없음 군집화: 비슷한 데이터 모으기 차원 축소: feature 줄이기, 함축 의미 찾기 토픽 모델링, 문서 군집화 - 강화학습(Reinforcement Learning):시행착오(Trial and Error)를 통해 학습, 보상 개념 존재 출처: [개정판] 파이썬 머신러닝 완벽 가이드 - 인프런

theory/NLP 2023.05.07

[머신러닝 기초] entropy, binary cross entropy, KL divergence

entropy 머신러닝 초기학습 진행 후, 성능을 높이려면 사람이 레이블링한 데이터를 추가해서 재학습을 시켜야 하는데 이는 (1) 비용이 크고 (2) train data 다시 넣을 시 중첩 데이터가 있어 비효율적이다. 이때 해결책으로 엔트로피를 사용하여 불확실한 값들을 필터링 할 수 있다. 엔트로피란, 정보를 표현하는데 필요한 '최소 정보량' / 정보의 만국 공통어 개념으로 여기서 '최소 정보량'이란, 0과 1의 bits 단위로, bits값이 최소값일 때 효율적으로 데이터를 저장하는 lower bound가 된다. 보통 가우시안 + continuous 에서 엔트로피가 최악이 되며, dicision tree에서도 앞에서부터 필터링하는데에 필요한 중요 요소 중 하나이다. binary cross entropy ..

theory/NLP 2022.09.26

udemy 클린코드 강의 정리

udemy에서 온라인으로 진행했던 클린코드 강의를 정리해본다. (2022.06.16) 강의자는 박재호님으로, 그 유명한 클린코드 책을 번역하신 분이다. http://www.yes24.com/Product/Goods/11681152 Clean Code 클린 코드 - YES24 애자일 소프트웨어의 혁명적인 패러다임을 제시하는 책이다. 저자 로버트 마틴은 오브젝트 멘토(Object Mentor)의 동료들과 힘을 모아 ‘개발하며’ 클린 코드를 만드는 최상의 애자일 기법을 정제 www.yes24.com commit message 동사로 시작해야 함 SRP (Single Responsibility Principle) 글로벌시대에 맞게 되도록이면 영어로 작성 주석 TODO:, XXX:, FIXME: 적극 사용하기 한..

develop/etc 2022.08.09

5년차 개발자의 이직 회고록

제목을 저렇게 쓰니 거창해 보이는데 어쩌다 보니 벌써 만 4년 동안 개발자로서 직장생활을 하였다. 두 번째 직장 1년 반 만에 원하는 직무가 아닌 곳에서 고여가는 나를 되돌아보며 이 정도면 충분히 쉬었다 판단하고 원하는 직무로의 이직 결심을 하였다. 그렇게 세 번째 직장을 찾은 도전기를 두서없이 적어보려 한다. 지원한 회사가 10군데가 넘는다. 올해 2월 말 처음 서류접수부터 최종 합격 이메일을 받은 7월 말까지 총 6개월이 걸렸고, 중간에 최종면접에서 탈락하면서 현타로 잠시 쉬기도 했었다. 서류나 코테 탈락은 스킬셋이 안 맞았거나 내 역량이 애초에 부족했던 것이니 패스하고 면접까지 갔었던 회사들 위주로 적어보겠다. 공교롭게도 면접 본 회사명이 모두 N사이다. 먼저, 이직 팁은 다음과 같다. 정말 가고 ..

일상/리뷰 2022.07.30

gRPC

무엇인가? Google에서 개발한 RPC(Remote Procedure Call) 시스템 전송을 위해 TCP/IP 프로토콜과 HTTP 2.0 프로토콜 사용 IDL(Interface Definition Language)로 ProtoBuf 사용 어떨 때 사용하나? 최근 많은 회사에서 MSA구조로 서비스를 개발하고 있다. MSA 단점 중 하나로 동일 머신에 존재하지 않는 분리된 모듈끼리의 네트워크 통신 overhead 이슈가 있는데 이에 REST API 대신 gRPC를 도입하는 것으로 해결한다고 한다. 어떻게 해결하는지 알아보도록 한다. HTTP 2.0 프로토콜 HTTP1.1 은 기본적으로 client가 server로 요청을 보내고 응답을 받는 구조이다. 요청 단위가 client와 server를 왕복하고, c..

develop/etc 2022.07.21

실행계획 explain

쿼리 튜닝 및 최적화시 사용하는 explain에 대해 복습해보려 한다. DB는 mysql/mariadb 기준이다. - 실행할 쿼리 앞에 EXPLAIN 키워드를 붙이면 각 단계별 실행 계획 결과가 출력된다. EXPLAIN Format = JSON을 추가하면 cost 등 더 자세한 정보를 알 수 있다. 주요 키워드들을 나열해본다. table 어떤 테이블에 대한 접근을 표시하고 있는지 id select에 붙은 번호, 보통 join을 하나의 단위로 실행하기 때문에 id는 그 쿼리 실행 단위를 식별하는 것이다. 따라서 조인만 수행하는 쿼리에서는 id는 항상 1이다. partitions 파티셔닝이 되어 있는 경우에 사용되는 필드이다. 파티셔닝 안되어 있는 경우엔 NULL type 접근방식을 표시하는 필드로 테이블에..

develop/etc 2022.07.12

REST API

정의 REST 아키텍쳐 스타일에 부합하는 API 그렇다면 API란: client와 server 사이 대화의 규칙 URI를 통해 자원을 지정하고, HTTP 메서드를 통해 자원에 대한 행위(CRUD)를 표현한다. post, get, put, delete 자원이란: 이름을 지닐 수 있는 모든 정보, 개념적인 대상, 객체라고 볼 수 있으며, 상태 변화 가능하다. → 변하지 않는 식별자가 필요하다 → URI를 통해 자원을 식별해야 한다! 표현을 통한 자원에 대한 조작 (REpresentational State Transfer) 자원의 현재 상태와 자원의 기대되는 상태를 URI로 표현함 표현을 client와 server가 서로 주고 받게 된다 서버가 변해서 Response Data가 변경되었다. 그럼 클라이언트에서..

develop/etc 2022.07.09

프로그래머스/스택,큐/다리를 지나는 트럭

https://programmers.co.kr/learn/courses/30/lessons/42583 문제 조건 +) 문제에 빠져있는 조건이 있어 계속 틀렸다. "트럭은 1초 다리 1칸씩 전진한다"는 조건을 추가해야 한다. from collections import deque def solution(bridge_length, weight, truck_weights): answer = 0 truck_weights = deque(truck_weights) inBridge = deque([0]*bridge_length) weight_sum = 0 while truck_weights or sum(inBridge) > 0: answer += 1 getOut = inBridge.popleft() weight_sum..

algorithm/python 2022.06.21

re.split() 과 str.split() 차이

문자열을 정규식을 구분자로 하여 split 하는데 정규식 package re를 사용한 re.split()과 string 내부 메소드를 사용한 str.split() 의 결과값이 다른 이슈가 있었다. import re pattern = r',(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)' data = "\"UK/밑바닥부터 시작하는 딥러닝\",homepage,http://www.sample.co.kr" test1 = re.split(pattern, data) test2 = data.split(pattern) print(test1) print(test2) 분명 같은 정규식인데 re.split에서는 되고 str.split에서는 안된다. 이유는 당연한 거였는데 re.split 메소드는 regex pat..

language/python 2022.06.17

deque는 어떻게 빠른가

알고리즘 문제를 풀다보면 흔히 list보다 deque(double ended queue)가 훨씬 빠르다고 한다. deque의 popleft()는 배열의 첫번째 데이터를 꺼내는 것으로 O(1)의 시간복잡도가 걸린다. 그 이유가 무엇인지 궁금하여 찾아보았다. deque는 원형 큐를 확장하여 손쉽게 구현할 수 있다. 다음과 같이 초기화 가능하다. class Deque: rear = 0 front = 0 MAX_SIZE = 100 deq = list() def __init__(self): self.rear = 0 self.front = 0 self.deq = [0 for i in range(self.MAXSIZE)] 이렇게 rear, front 변수를 활용하여 linkedlist와 비슷한 방식으로 삽입, 삭제시..

algorithm/common 2022.06.15