데이터 분석을 해야 하거나 할 줄 아는 사람이라면 처음에 데이터의 형태를 파악해야 할텐데 히스토그램(Histogram)은 데이터의 분포도를 볼 때 매우 유용한 통계 시각화 기법이다. 원래 통계 기법은 R이 상징적인 언어였으나 최근에는 데이터 분석을 하는 사람들이 굳이 R로 하지 않고 파이썬에서 하는 경우가 많아졌다. 히스토그램용 데이터 가져오기 (housing dataset) import os import tarfile import urllib.request as urllib import pandas as pd data_url = "https://raw.githubusercontent.com/ageron/handson-ml2/master/datasets/housing/housing.tgz" data_pa..
이전 포스팅에서는 넷플릭스(Netflix)에 대해서 알아보았다. 다만 많은 추천(Recommendation)을 연구하는 연구원과 다르게 일반 사용자들 특히 대한민국 국민들은 넷플릭스를 추천의 대명사처럼 생각하지는 않을 것이다. 왜냐하면 우리가 추천이라는 것을 별도로 인지하기 힘이 들며, 넷플릭스 추천의 경우 잘 만든 큐레이션 처럼 생각할 수 있기 때문이다. 그에 반해 한국 국민들은 유튜브의 추천 알고리즘을 긍정적이고 핫하게 생각하는 경우가 많다. "알 수 없는 유튜브의 추천 알고리즘이 나를 여기로 이끌었다"[1]와 같은 댓글처럼 유튜브의 추천 알고리즘은 많은 사용자들에게 매우 신기하고 경이로운 영역이며 사람들이 인공지능(AI)을 긍정적으로 평가할 수 있는 요소로 자리잡기도 했다. 브레이브 걸스 역주행 사..
자카드 유사도(Jaccard Similarity)니, 자카드 계수(Jaccard Coefficient)니 자카드 지수(Jaccard Index)니 사실 다 같은 말이지만 여기서는 제목을 자카드 유사도로 지정하였고, 많은 사람들이 자카드 다음에 유사도를 더 많이 검색을 하는 것 같아서 본 포스팅은 자카드 유사도로 용어를 통일하도록 한다. 유사도(Similairy) 유사도란 A라는 아이템과 B라는 아이템이 얼마나 유사한가를 수치로 표현한 값이다. 유사도 측정 방법에는 유클리디안 거리, 맨하튼 거리, 피어슨 상관 계수, 코사인 유사도, 자카드 유사도, 타니모토 유사도 등이 있으며 가장 보편적으로 유클리디안, 자카드, 피어슨 상관 계수, 코사인 등을 활용하고 있다. 사실 자카드 유사도라는 것을 설명해야 될 것인..
Java에는 Http 상의 데이터 즉, URL 기반으로 파일을 download할 수 있는 다양한 라이브러리들이 있고, 기본 버전으로도 제공을 하고 있다. 본 포스팅은 3가지의 대표적인 방법들을 모두 써보고 비교하여 성능을 점검해보도록 하였다. 고전적인 방법 public static void fileDown(String url, String fileName) throws MalformedURLException, IOException { BufferedInputStream in = null; FileOutputStream fout = null; try { in = new BufferedInputStream(new URL(url).openStream()); fout = new FileOutputStream(f..
내가 혹시 누군가에게 불필요한 감정을 낭비했는지를 곰곰히 생각해볼 필요가 있다. 분명 아니라곤 말을 못하겠다 속상한 마음에 말을 하지만, 굳이 그 언어로 표현할 필요는 없을텐데 말이다. 최근 들어 MZ 세대를 이해하고자 책도 사서 보지만, 문득 이런 생각이 들었다. 내가 MZ 세대에 맞춰서 바꾼 다는 것은 우리 세대의 행동이 모두 잘못됐다는 것 아닌가? 우리 세대의 문제점도 있겠지만 내가 볼때 MZ 세대의 문제점도 명확해서 누가 옳고 그르다라고 판단하는 것은 위험해보였다. 결국 서로간의 차이를 인정하고, "감정 소모를 최대한으로 줄이자"라는 결론이 내렸고 검색을 하니 "기린 대화법"이라는 것이 있어서 가져와봤다. 기린 대화법 = 비폭력 대화법 미국의 심리학자 마셜 로젠버그 박사가 35년 전에 제안한’ 비..
요즘 너도나도 풀스택 개발 강의와 데이터 사이언티스트 강의를 수강하는 사람들과 자신을 풀스택과 데이터 사이언티스트라고 소개하는 신입들을 보고 있자면 참 답답한 마음이 너무 크다. 학원에서 저렇게 강의하라고 한 것일까? 왜 저 소리에 답답한지 SI 10년 이상의 PL 및 TA 경력에 데이터 사이언티스트인 사람으로 일침을 한번 가해보고 싶다. 풀스택(Full-Stack) 풀스택이란 무엇인가? 쉽게 생각하면 백엔드와 프론트엔드 및 모든 스택을 마스터한 사람이라 생각할 수 있다. 한마디로 만능 개발자라는 것이다. 하지만 프론트엔드와 백엔드만 둘다 다루면 풀스택이라 칭하는 사람들이 있다. 이 정의가 맞다면 웹개발자 대다수는 모두 풀스택 개발자가 되는 것이다. 결국 풀스택이 일반적인 웹개발자랑 차이가 날려면 일반적..
트랜스퍼 러닝(Transfer Learning) 즉 전이 학습은 특정 태스크에서 학습된 모델을 이용하여 다른 태스트에 재사용하는 기법을 말한다. 전이 학습은 최근 들어 자연어 처리 분야에 상당 부문 많이 활용이 되고 있는데 BERT(Bidirectional Encoder Representations from Transformers)나 GPT(Generative Pre-trained Transformer)와 같은 모델을 이용하여 대규모의 데이터셋을 학습하고 이 학습된 모델을 토대로 다른 분야에 많이 활용 되곤 한다. 전이학습을 사용하는 이유 일반적으로 전이학습이 없이 모두 한번에 학습하는 일반적인 방식은 속도도 매우 오래 걸리고, 태스크(Task)간의 최적화를 이루어낼 수 없다. 이를 현실 세계로 예시를 ..
보통 문자열을 인식하는 기능등은 많은 라이브러리나 정규표현식으로 쉽게 가져올 수 있지만 한자만 가지고 오는 방법은 별도의 작업을 수행해야 한다. 사실 한자라는 것이 무궁무진한 글자이고 한글과 다르게 무한대로 확장이 가능한 글자라서 컴퓨터 영역에서는 표현하기가 상당히 까다로운데 이럴땐 유니코드를 이용해서 추출하거나 인식할 수 있다. Java 소스 코드 public static void main( String[] args ) { String text = "가불有 大韓民國"; for(int i = 0; i = '\u2E80' && charAt = '\u3400' && charAt = '..
최근들어 유튜브(Youtube)의 "오늘도 알 수 없는 유튜브 알고리즘이 나를 이 영상으로 끌고왔다" 라는 댓글이 밈처럼 퍼져서 추천의 상징처럼 되어가고 있지만 추천시스템을 만드는 사람에게는 넷플릭스(Netflix)를 떠올리지 않을 수 없다. 퀀텀 이론(Quantum Theory) 넷플릭스는 콘텐츠를 추천하는 것으로 큰 재미를 보았지만 어느 순간 추천의 한계를 느끼게 되었다. 이를 극복하기 위해 자체적으로 만든 퀀텀 이론(Quantum Theory)라는 것을 만들어 콘텐츠를 분류하였다. 더이상 분류할 수 없을 정도로 쪼개는 양자(Quantum) 단위로 7만 6000여개의 자체적인 장르를 만든 후 내부적으로 평가하는 과정을 통해서 영화별로 수많은 분류 태그를 만들고 데이터베이스를 만들었다. 이렇게 엄청난 ..
이진화(binarization) 이진화는 숫자의 값을 0 혹은 1의 값으로 변환하는 것을 말한다. 대표적으로 활용되는 것으로 0~255의 값을 0-1의 흑백 값으로 변환하는 이미지 이진화가 대표적이며, 그외에도 데이터를 압축하기 위해서도 활용이 된다. 이진화를 만들기 위해서는 기준값(threshold)가 필요한데 이 기준값보다 높으면 1, 낮으면 0의 값을 세팅하는 어찌보면 매우 간단한 기능이라 할 수 있다. 충분히 개인이 펑션등을 만들어서 이진화를 구현할 수 있지만 여기서는 사이킷런(Sci-kit)에서 제공하는 전처리(preprocessing) 라이브러리로 이진화 기능을 사용해보도록 한다. 이진화 예제 from sklearn import preprocessing X = [[-1,2,3],[-0.2,0...
롬복(Lombok)이 사실은 호불호가 상당히 많이 갈리는 유틸리티이고, 같이 프로젝트를 진행할 때 롬복을 사용 안해본 사람들이 있다면 더욱 문제가 발생할 수 있는 기능이고 git 등에 공유하기도 힘들어서 적극적으로 추천하는 기능은 아니지만 롬복을 사용하는 추세가 증가하다보니 설정 방법에 대해서 정리해보고자 한다. 우선 롬복이라는 것은 단순히 라이브러리만 세팅해서 되는 기능이 아니다. 그렇게 간단했었다면 롬복을 비선호할 이유도 없었을 것이다. 롬복(Lombok) 이란? 우선 롬복을 사용하는 사람들은 게터(Getter), 세터(Setter) 등을 편리하게 만들어주기 때문에 사용한다고 하지만 필자는 이것이 뭐가 불편한지 모르기 때문에 왜 이것이 편리한지를 되묻고 싶다. Getter, Setter 만들때 수동으..
개발자가 접근하기 쉽고, SI가 아니라 솔루션 업체나 회사 전산실이나 IT부서 같은 곳에 근무하게 된다면 별도의 디자이너가 붙지 않고 부트스트랩(bootstrap) 등을 이용해서 직접 디자인을 선택하고 만들어야 되는 경우가 많다. 예를 들어 소수가 사용하는 관리기의 경우 웹디자이너가 붙으면 공수(Man Month, M/M)가 많이 들 뿐만 아니라 이미 부트스트랩으로 만들어진 디자인들이 훌륭해서 디자이너가 붙는다고 해서 심미적이나 기능적으로 뛰어나다 장담할 수 없기 때문이다. 현재는 관리기 뿐만 아니라 서비스를 하는 페이지에도 부트스트랩을 받아서 커스터마이징을 하는 경우도 상당히 많은데 이미 웹개발과 부트스트랩 프로젝트는 떼려야 뗄 수 없는 프로젝트가 되어 버렸다. 부트스트랩(Bootstrap) 부트스트랩..