목록전체 글 보기 (258)
귀퉁이 서재
sklearn을 활용하여 서포트 벡터 머신(SVM) 실습을 해보겠습니다. 코드 및 데이터는 제 깃헙에 모두 있습니다. 본 포스트의 내용은 OpenCV의 글을 정리한 것입니다. (Reference1) Linearly Separable Data without Noise 먼저 가장 단순한 케이스를 봅시다. Noise가 전혀 없어 아주 깔끔하게 선형 구분이 가능한 데이터입니다. 맨 왼쪽은 전체 데이터, 가운데는 Training Data, 오른쪽은 Test Data입니다. 전체 데이터를 80:20 비율로 Training Data, Test Data로 나눈 겁니다. Noise가 없고 딱 봐도 두 데이터를 선형(직선)으로 구분할 수 있습니다. SVM Classfier로 위 데이터를 구분하는 Decision Bound..
서포트 벡터 머신(SVM, Support Vector Machine)이란 주어진 데이터가 어느 카테고리에 속할지 판단하는 이진 선형 분류 모델입니다. (Reference1) 본 포스트는 Udacity의 SVM 챕터를 정리한 것입니다. 아래 그림을 봅시다. 빨간 X와 파란 O를 구분하는 3개의 선을 나타낸 것입니다. 3개 선 중 어떤 선이 가장 적절하게 두 데이터를 구분한 선일까요? 표시가 된 가운데 선이 가장 적절합니다. 왜 양 옆의 선보다 가운데 선이 두 데이터를 더 적절히 구분하는 선일까요? Margin의 최대화 정답은 가운데 선이 Margin을 최대화하기 때문입니다. Margin이란 선과 가장 가까운 양 옆 데이터와의 거리입니다. 선과 가장 가까운 포인트를 서포트 벡터(Support vector)라..
나이브 베이즈는 스팸 메일 필터, 텍스트 분류, 감정 분석, 추천 시스템 등에 광범위하게 활용되는 분류 기법입니다. 나이브 베이즈 분류에 대해서 배우기 위해서는 베이즈 정리를 먼저 알아야 합니다. 베이즈 정리를 모르신다면 DATA - 10. 베이즈 추정(Bayesian Estimation)을 먼저 보고 오시기 바랍니다. 머신러닝을 통해 어떤 동물의 사진이 있을 때 그 동물이 호랑이인지 고양이인지 얼룩말인지 등을 구분할 수 있습니다. 사전에 수많은 호랑이, 고양이, 얼룩말 사진에 대해 학습을 시킵니다. 다양한 자세, 표정, 생김새, 털의 색깔 등을 가진 호랑이, 고양이, 얼룩말에 대해 '이 사진은 호랑이고, 이 사진은 고양이야'라고 학습시키는 것입니다. 학습된 머신러닝 모델은 이제 호랑이, 고양이, 얼룩말..
앞으로 2~3개월 동안 Udacity의 Intro to Machine Learning Course를 공부할 계획입니다. 사실 작년에 Sung Kim 교수님의 Machine/Deep Learning with TensorFlow (Python) 50강은 모두 들었습니다. 이번에 Data Analyst Nano degree를 모두 들은 후 Andrew Ng 교수님의 Machine learning 강좌를 들을까 Udacity의 Machine learning 코스를 들을까 고민을 했었습니다. 하지만 커리큘럼을 보니 Udacity가 더 적합해 보였습니다. 들어보지는 않았지만 Andrew Ng 교수님의 커리큘럼에는 다양한 머신러닝 모델이 있지는 않았습니다. 제 목적은 다양한 머신러닝 모델을 학습하는 것이었습니다. 추..
도가도 비상도 (道可道非常道) 명가명 비상명 (名可名非常名) 도덕경의 첫 구절이다. 뜻을 풀어쓰자면, '도'라고 할 수 있는 '도'는 영원한 '도'가 아니다. 이름 지을 수 있는 이름은 영원한 이름이 아니다. '도를 아십니까?'가 이로 인해 나온 말이 아닐까 싶다. '도'라고 할 수 있는 '도'는 '도'가 아니면 무엇이 '도'인가?라는 의문이 자연스레 나올 수 있기 때문이다. 하지만 '도'의 정확한 정의가 무엇인지 알기보다는 도덕경에서 노자가 말하고자 하는 바가 무엇인지 깨닫는 것이 더 중요한 것 같다. 사실 노자가 실존 인물인지는 구체적으로 밝혀지지 않았다. 노자의 도덕경도 노자라는 한 사람이 쓴 것인지 노자가 쓴 글에 그 후손이 글을 더 추가해 쓴 것인지 명확하지 않다. 신비로운 사람이 쓴 신비로운 ..
Udacity의 Data Analyst Nano Degree를 모두 끝냈습니다. 3월 말 시작하여 3개월 정도가 걸렸습니다. 코스는 굉장히 만족스러웠습니다. 시작하기 전에는 3개월에 100만원이라는 돈을 들이며 온라인 강좌를 듣는 게 낭비는 아닐지 고민했지만 투자한 돈이 아깝다는 생각은 한번도 들지 않았습니다. 본 코스에서는 데이터 분석에 대해 배웁니다. 통계 기본, 데이터 수집, 데이터 정제, 데이터 시각화 순으로 배우며 주로 Pandas, Numpy, Matplotlib, Seaborn과 같은 라이브러리를 사용합니다. 과정은 동영상 강의 - 읽기 자료 - 추가 레퍼런스 - 퀴즈 - 실습 - 프로젝트순으로 구성되어 있습니다. 커리큘럼도 짜임새 있어 이해하기가 쉬웠습니다. 진도를 나가는 재미도 있었고요...
이번 챕터에서는 독립 변수가 여러개인 다변량 데이터에 대한 시각화를 다루겠습니다. 독립 변수가 3개일 때를 예로 들어 설명하겠습니다. 기본적으로 x축과 y축에 변수 하나씩을 표현하고, 나머지 변수는 모양(shape), 크기(size), 색깔(color) 등으로 표현할 수 있습니다. Encoding via Shape (2개의 numeric variables, 1개의 categorical variable 일때) cat_markers = [['A', 'o'], ['B', 's']] for cat, marker in cat_markers: df_cat = df[df['cat_var1'] == cat] plt.scatter(data = df_cat, x = 'num_var1', y = 'num_var2', mar..
이 책은 제목 그대로 소프트웨어 장인이란 무엇이고, 소프트웨어 장인이 되기 위해서는 어떤 자세를 취해야 하는지에 대해 말해준다. 기술적인 부분뿐만 아니라 이념과 태도에 대해서도 다루고 있다. 소프트웨어 엔지니어로서의 삶의 자세에 대해 광범위하게 언급하고 있다. 저자인 만쿠소의 경험에 빗대어 설명을 하니 내가 직접 경험해보지 못했어도 실제처럼 느껴지는 부분이 있었다. 저자는 소프트웨어 엔지니어로서 굉장한 사명감과 자부심을 가지고 있다. 소프트웨어 엔지니어는 단순히 코드를 작성하는 코더, 월급 받는 노동자와는 다른 차원이다. 끊임없이 자기 계발을 하고 더 나은 프로그램을 만들기 위해 고심하는 사람이다. 누구나 쉽게 읽을 수 있는 코드를 작성하여 협업을 도모하고, 코드 생태계를 더 발전시키는 사람이다. 돌아가..
지난 글인 단변량 데이터 시각화에서는 가장 단순한 히스토그램과 막대 그래프에 대해 알아봤습니다. 이번 챕터에서는 변수가 두개인 이변량 데이터를 시각화하는 그래프에 대해 알아보겠습니다. 제 깃헙에서 전체 코드와 데이터를 받으실 수 있습니다. import import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sb %matplotlib inline fuel_econ = pd.read_csv('./fuel-econ.csv') 두개의 수치형 데이터 (Two numeric) 두개의 수치형 데이터를 시각화 하는 방법에는 scatter plot, heat map, line plot이 있습니다. 각각에 대해 알아보겠..
단변량(uniariate) 데이터를 시각화하는 것은 아주 쉽습니다. 몇 가지 그래프를 그리는 코드를 간단히 짚어보겠습니다. 데이터와 notebooks 코드는 제 깃헙에서 볼 수 있습니다. (데이터: pokemon.csv, notebooks: Univariate Exploration of Data.ipynb) 히스토그램(histogram)과 막대 그래프(bar chart)가 비슷한 모양이라 헷갈릴 수 있습니다만 차이점이 있습니다. 히스토그램은 수치형 데이터(quantative)를, 막대그래프는 카테고리 데이터(qualitive, categorical data)를 표현하는데 쓰입니다. (Reference 1) import import numpy as np import pandas as pd import ma..
데이터 시각화를 정확하고 효율적으로 하기 위해서는 Chart Junk, Data Ink Ratio, Lie factor를 고려해야 합니다. Chart Junk Chart Junk란 그래프상의 정보를 이해하는데 굳이 필요하지 않은 것을 의미합니다. 두껍고 진한 격자, 불필요한 글귀, 불필요한 그림, 3D 그래프나 그림자, 화려한 축의 장식 등이 이에 해당합니다. 그래프의 목적은 정보를 한눈에 파악하기 위함입니다. 앞서 말한 5가지 요소들(Chart Junk)은 정보를 한눈에 파악하는데 방해가 될 뿐입니다. 그래프는 최대한 깔끔하게 그려줘야 합니다. Data Ink Ratio Data Ink Ration를 구하는 식은 아래와 같습니다. Data Ink Ratio = 데이터를 기술하는 데 쓰인 잉크의 양 / ..
이번 시간에는 데이터 시각화의 중요성에 대해 알아보겠습니다. 이를 위해 Autodesk Research의 Justin Matejka, George Fitzmaurice가 쓴 Same Stats, Different Graphs: Generating Datasets with Varied Appearance and Identical Statistics through Simulated Annealing을 요약해보겠습니다. '같은 통계치, 다른 그래프'라는 제목인데 내용이 상당히 흥미로웠습니다. 이번 글에 나오는 모든 내용과 그림파일은 Same Stats, Different Graphs 논문 및 Autodesk Research 홈페이지에 기재되어 있는 것입니다. Anscombe's Quartet 영국의 통계학자 ..
읽는 순간의 그 느낌이 생각나 다시 집어 들었다. 원서로 2번, 번역본으로 2번 읽었다. 짧지만 묵직한 책이다. [이방인], [짜라투스트라는 이렇게 말했다]와 더불어 내가 가장 좋아하는 책 중 하나이다. 호밀밭의 파수꾼은 주인공인 홀든 콜필드가 학교에서 퇴학을 당하고 집에 돌아가기까지 3일 동안 벌어진 일들로 이야기가 전개된다. 홀든 콜필드는 성적 부진으로 퇴학을 당하고, 얼마 없는 돈으로 길거리를 서성이며 며칠을 보낸다. 퇴학 통지서가 수요일에 집에 도착하는데 그전에 집에 돌아가고 싶지 않아 방황을 하게 된다. 그는 속물들이 넘쳐나는 학교를 떠났지만 도심 속에도 여전히 속물들이 가득한 것에 염증을 느낀다. 홀든이 알고 있는 거의 대부분의 어른들은 속물이었다. 그와 반대로, 여동생 '피비'를 비롯한 대부..
Data Wrangling의 3단계 (Gather Data -> Assess Data -> Clean Data) 중 마지막 단계인 Cleaning Data입니다. Assess Data에서 이슈별로 (Quality, Tidiness) 어떤 데이터를 어떻게 정제해야하는지 정의를 했을 겁니다. 이제 실제로 정제를 하는 단계입니다. 데이터 정제를 할 때는 Missing Value를 먼저 채워주고, Tidiness 문제를 해결한 뒤, 마지막으로 Quality 문제를 해결하면 됩니다. 또한 원본 DataFrame을 유지하기 위해 꼭 copy()해서 Cleaning을 하도록 합니다. (Reference1) 데이터 정제(Cleaning) 실습 데이터를 정제하는 실습을 해보겠습니다. 3가지 데이터셋 환자 정보(patie..
이전 챕터에서 데이터 모으기에 대해 배웠습니다. 이번 챕터는 데이터 랭글링의 두번째 단계, 데이터 평가하기입니다. Gathering한 데이터를 눈으로, 코드로 평가해야 합니다. 정제하기 전 데이터는 Dirty Data, Messy Data로 구분할 수 있습니다. Dirty Data (Low Quality Data) Dirty Data는 컨텐츠(Content) 자체에 문제가 있는 데이터입니다. 다른 말로 Low Quality Data라고도 합니다. 즉 데이터가 부정확하거나, 손상되었거나, 중복된 데이터를 의미합니다. Dirty Data는 다시 아래 4가지 문제로 구분할 수 있습니다. Completeness: 모든 데이터가 채워져 있는가? - 행, 열에 Null 값이 없는지 봐야합니다. Validity: S..
이 책은 빌 게이츠가 미국의 모든 대학생들에게 졸업 선물로 준 책이라고 한다. 그 이유 하나로 책을 구매했다. 사실 난 신작 베스트셀러는 잘 사지 않는다. 아마존 장기 베스트셀러라도, 언론사 및 전문가의 호평, 극찬 등이 있어도 잘 사지 않는다. 그런 책들이 도움이 되지 않아서가 아니라, 더 좋은 옛날 책들이 많기 때문이다. 빌 게이츠는 어쨌든 경영자이자 기술자다. 그는 앞으로 사회를 짊어질 젊은 사람들이 이 책의 메시지를 꼭 알아줬으면 좋겠는 바람으로 이 책을 줬을 것이다. Factfulness(팩트풀니스)는 '사실충실성'이다. 말 그대로 사실에 충실한 정도를 의미한다. 우리는 여전히 선입견 가득한 시선으로 사회를 바라보고 있다. 국가들은 여전히 선진국과 개발도상국으로 나뉘고, 사회의 빈익빈 부익부는 ..
미디어위키(Media Wiki) API 미디어위키(Media Wiki) API는 미디어위키에 접근할 수 있는 API입니다. 너무 당연한 설명이네요.. (Reference1) 미디어위키에 접근할 수 있는 API 라이브러리는 다양합니다. Python 기반 라이브러리 중 가장 많이 쓰이는 것은 wptools입니다. (Reference2) 인터넷을 통해 미디어위키에 직접 접속해 검색하는 것을 wptools를 활용하여 코드화할 수 있습니다. 미디어위키에 '마하트마 간디'를 쳐서 검색 결과를 가져오는 작업을 코드화해 보겠습니다. (Mahatma gandi 위키피디아 검색 결과) 우선 wptools 라이브러리를 설치합니다. pip install wptools Mahatma gandi를 검색한 미디어위키 페이지의 ur..
우선, 데이터 랭글링(Data Wrangling)이란 무엇인지 알아보겠습니다. 아래는 위키피디아 정의입니다. Data wrangling, sometimes referred to as data munging, is the process of transforming and mapping data from one "raw" data form into another format with the intent of making it more appropriate and valuable for a variety of downstream purposes such as analytic. 쉽게 말하면, 원천 데이터(raw data)를 분석하기 좋은 데이터로 변환하는 작업을 뜻합니다. 데이터 랭글링은 총 5단계로 구분됩니다..
이번 챕터에서는 로지스틱 회귀에 대해 알아보겠습니다. 이전 챕터까지 배웠던 단순 선형 회귀, 다중 선형 회귀에서는 독립 변수가 양적 데이터 혹은 범주형 데이터이고, 종속 변수가 양적 데이터였습니다. 이번엔 종속 변수가 범주형 데이터일 때의 회귀 모델에 대해 알아보겠습니다. 종속 변수가 범주형 데이터이며 이진형(binary)일 때를 로지스틱 회귀라 합니다. 위키피디아 정의를 가져와 봤습니다. 로지스틱 회귀(logistic regression)는 D.R.Cox가 1958년에 제안한 확률 모델로서 독립 변수의 선형 결합을 이용하여 사건의 발생 가능성을 예측하는 데 사용되는 통계 기법이다. 로지스틱 회귀의 목적은 일반적인 회귀 분석의 목표와 동일하게 종속 변수와 독립 변수 간의 관계를 구체적인 함수로 나타내어 ..
독립 변수 x를 제곱하거나 서로 곱함으로써 higher order term을 만들 수 있습니다. 보통 x₁² (quadratics) x₁³ (cubics), x₁x₂ (interactions)를 많이 씁니다. quadratics와 cubics는 회귀 모델이 곡선일 때 쓰이며, interactions는 x₁의 변화가 x₂에 따라 달라질 때 쓰입니다. interaction을 써야 하는 경우에 대해 설명하겠습니다. 보라색 선은 neighborhood B일 때 Area에 따른 price 회귀선이며, 파란색 선은 neighborhood A일 때 Area에 따른 price 회귀선입니다. 두 회귀선 모두 기울기는 b₁입니다. 즉 neighborhood A이든 neighborhood B이든 Area의 증가에 따른 pr..