목록머신러닝 (23)
Dev log
이제 2021년 된 새해 기념으로 나의 2020년 정리해볼까 한다. (일기처럼 줄줄 썻기 때문에 그냥 술술 읽고 가볍게 넘기면 된다) 2020년 3줄 요약 팀 이동 팀원들 절반이 퇴사하는 일 발생하며, 팀 이동됨 머신러닝 개발 1도 안함 급하게 REST API 만드는 일이 생겨 올해 절반을 API개발만 함. 대학원 합격 나 자신을 공부시키기 위해 스스로 대학원에 들어감. 누군가 2020년도는 나에게 어떤 해였는지 물어본다면, 정신적으로 정말 힘들었던 해라고 이야기 할 수 있다. 나는 3년동안 현재 회사를 다니며 정말 우리팀 사람들과 가족같이 지냈고 행복했었다. 내 첫 팀이였고, 내 첫 회사여서 더욱더 깊게 추억이 자리 잡았던 것 같다. 그러나 올해 우리팀의 절반정도가 퇴사했고 그로인해 정신적으로 힘들었다..
이제 3년차 머신러닝 개발자로 들어서고 있는 시점에 나는 내가 가지고 있는 역량이나 방향이 제대로 가고 있는지에 대해 또는 무엇을 더 공부해야 되는지에 대해 의문을 가졌다. 로드맵은 언제든 바뀔 수 있으므로 최신버전을 보고 싶다면 링크를 타고 확인하기를 바란다. 또한 공지에도 적어놨지만 모든 블로그의 글은 내 깃블로그에 먼저 업로드 되므로 티스토리보다 더 빠르게 글을 확인하고 싶다면 깃블로그를 참고하기를 바란다. Introduction Fundamentals Data Science Roadmap Machine Learning Roadmap Deep Learning Roadmap Data Engineer Roadmap Big Data Engineer Roadmap 정답이라는 보장은 못하지만 그래도 방향 잡..
회귀는 하나의 변수가 나머지 다른 변수들과의 선형적 관계를 갖는가의 여부를 분석하는 하나의 방법이디. 즉 하나의 종속변수와 독립변수 사이의 관계를 명시하는 것을 우리는 회귀라고 한다. 오늘은 회귀가 무엇인지와 구하는 방법에 대해 알아보겠다. 회귀 독립변수와 종속변수는 아래와 같다. - 독립 변수: 종속 변수의 영향을 주는 변수(평수, 학군) - 종속 변수: 서로 관계를 가지고 있는 변수들 중에서 다른 변수의 영향을 받는 변수 (집값) 회귀식은 y = ax + b 이며, 정말 간단하다. 회귀식을 이용하여 간단하게 예제 문제를 풀어보겠다. 1986년 1월 28일 미국의 스페이서 셔틀 챌린저호의 승무원 7명이 사망했다. 우주 왕복선이 발사 도중에 폭파해서 사망을 했기 때문이다. 폭파에 대한 원인 분석을 했는데..
저번 포스팅때는 한국 사회의 흐름을 알아보았는데요. 지난 19년을 되돌아보니 사건, 사고가 많았으며, 다시는 일어나면 안되는 사고들과 잊으면 안되는 일들이 많았습니다. 그럼 이번엔 경제를 되돌아보며 한국 경제에는 어떤 일들이 있었는지 알아보겠습니다. 그리고 크롤링은 저번에 했기 때문에 따로 다루지는 않겠습니다. Keyword 사회와 마찬가지로 경제도 표를 만들면 아래와 같습니다. 우선 경제하면 가장 많이 떠오르는 것이 부동산이 아닐까 싶습니다. 역시나 부동산이나 재건축이 가장 많이 눈에 띄는 것이 보입니다. 2005년 국세청 키워드가 보이는데, 아마 종부제 시행으로 인해 많은 헤드라인을 장식했던 키워드 인것 같습니다. 경제하면 기업들이 빼놓을 수 없는데, 아래와 같이 예전에 비해서는 갈수록 기업의 이름이..
미디어는 한국 사회의 흐름을 압축적으로 담고 있는 Snapshot입니다. 지난 19년, 가장 대표적이고 강력한 미디어, 헤드라인 뉴스로 한국 사회를 되돌아 볼까합니다. 이번 포스팅은 사회 부분을 다뤄보겠습니다. SBS뉴스 사회 부분의 헤드라인 부분을 다 크롤링하여 문장을 단어별로 나눈 후 count 하였습니다. Web Crawling R을 이용하여 크롤링을 하려고 할때 아래와 같은 라이브러리가 필요합니다. # 필요 패키지 설치 library(gsubfn) library(stringr) library(XML) 크롤링 함수는 아래와 같이 URL을 입력받아 긁어오도록 하였습니다. SBSnews
오늘은 적절한 k값을 알아내는 방법에 대해 이야기 해보겠습니다. 여태껏 이 블로그에서 다양한 데이터를 사용하여 knn 분류를 해보았는데, 그때마다 k값을 다르게 하면 매번 값이 달라진다는 것을 어렴풋 다들 알고 계실꺼라 생각합니다. 그렇다면 적절한 k값을 찾기 위해서는 어떻게 해야댈까요 ? 오늘은 그 방법에 대해 알아보겠습니다. 마찬가지로 데이터는 데이터는 여기에서 볼 수 있으며 전체 코드 역시 GitHub에서 보실 수 있습니다. DataSet 이번 데이터는 부도 데이터이며, load 후에 결측값과 공백값을 제거하겠습니다. HMEQ
오늘은 knn을 사용하여 유방암 분류를 해볼까합니다. 데이터는 데이터는 여기에서 볼 수 있으며 전체 코드 역시 GitHub에서 보실 수 있습니다. 월래 오늘 적절한 k값을 알아내는 것에 관려하여 포스팅을 할 예정이였으나, R에서 knn 관련 데이터 예제로 가장 많이 사용하는 것중에서 하나만 집고 넘어가는 것도 나쁘지 않고 해서 오늘은 유방암 데이터를 가지고 분류를 해보도록 하겠습니다. DataSet 우선 데이터를 load 해보겠습니다. wisc
간단하게 텐서플로우와 파이썬 문법 비교 해보겠습니다. Python ? Tensorflow 우선 간단하게 1에서 5까지의 숫자를 출력해보도록 하겠습니다. x = 0 for i in range(5): x = x+1 print(x) 파이썬으로 하면 위와 같으며, Tensorflow로 하면 아래와 같습니다. x = tf.Variable(0, name='x') model = tf.global_variables_initializer() with tf.Session() as sess: for i in range(5): sess.run(model) x = x + 1 print(sess.run(x)) 아무래도 간단하게 출력하고 확인할 수 있는건 Python만한게 없네요. 이번에는 Numpy문법을 Tensor로 구현해보도..
언어를 새로 배우거나 무언가를 새로 배울 때, 우리는 가장 먼저 Hello, world! 를 가장 먼저 찍어냅니다. Tensorflow 을 포스팅 하는 기념으로 Hello, Tensorflow!를 찍어보겠습니다. Tensorflow 기본 구조 우선 텐서플로우가 설치가 안되어 있다면 아래와 같이 설치 해주세요. pip install tensorflow 설치가 되었다면 모듈을 가져와서 tf를 호출합니다. import tensorflow as tf 그리고 그래프를 실행할 세션을 구성합니다. (참고로 포스팅에서 사용하는 tf는 1.x 버전입니다.) sess=tf.Session() # 그래프를 실행할 세션을 구성한다. hello=tf.constant('Hello, Tensorflow') # # # # # # # ..
머신러닝 개발자들이 많이 사용하는 Tensorflow에 대해서 간단하게 알아보겠습니다. 요즘에는 텐서플로우외에도 케라스나 파이토치등 다양하지만 저는 아직 텐서플로우가 편해서 텐서플로우를 쓰고 있습니다. 맨 처음 머신러닝을 접할 때, 텐서플로우로 접했기 때문인거 같습니다. 같이 공부했던 사람들 중 케라스나 파이토치로 시작한 사람들이 꽤 있었는데 케라스나 파이토치로 시작한 사람들은 텐서플로우가 조금 더 어렵다고 하더라구요. 그래서 커뮤니티 사이에서 가끔 텐서플로우로 먼저 시작하라는 글이 보이기도 하더라구요. 이 글 쓴 시점에서는 현재 텐서플로우는 2.0이 나와 있는 상황입니다. 2.0버전이랑 1.x 버전이랑은 문법 차이가 꽤 나기도 하고, 성능 차이도 있다고 합니다. 지금은 1.x 버전에 관하여 포스팅 하고..
오버피팅을 억제하기 위한 방법으로 Dropout에 대해 알아보도록 하겠습니다. 오버피팅은 학습을 시키면서 흔히 접할 수 있는 문제이며, 풀어야 할 문제 중 하나 입니다. 오늘은 이러한 오버피팅에 대한 문제를 바로 잡을 수 있는 방법 중 가장 간단한 방법에 대해 알아보겠습니다. Dropout Dropout은 오버피팅을 억제하기 위해 뉴런을 임의로 삭제하면서 학습하는 방법입니다. 신경망 전체를 학습시키지 않고 일부 노드만 무작위로 골라 학습 시키는 방법입니다. 학습하는 중간중간 일정 비율로 노드들을 무작위로 골라 출력을 0으로 만들어 신경망의 출력을 계산하는 방법입니다. Dropout을 적용하면 학습되는 노드와 가중치들이 매번 달라지기 때문에 신경망이 과적합에 빠지는 것을 예방할 수 있습니다. Dropout..
머신러닝에서 Batch Nomalization을 이용하여 학습을 실제로 할때, 주의 할 점과 가중치 초기화의 중요성에 대해 같이 보도록 하겠습니다. 가중치 초기화의 중요성 가중치 초기값을 적절하게 설정하면 각 층의 활성화 값의 분포가 적당히 퍼지는 효과가 발생합니다. 그리고 활성화 값이 적절하게 분포하게 되면 학습이 잘되고 정확도가 높아집니다. 위 그림을 보면 한 눈에 봐도 고르게 잘 된것을 알 수 있습니다. 가중치 초기값 선정하는 5가지 방법 가중치 초기값을 선정하는 방법에는 대략 5가지 정도가 있습니다. 1. 가중치 초기값을 0으로 선정 이 방법은 추천하지 않습니다. 왜냐하면 학습이 잘되지 않기 때문이죠. 하지만 이런 방법도 예전에 있는 있었다. 로 넘어가시면 될 것 같습니다. 2. 표준편차가 1인 ..
저번 포스팅에서는 forward와 backward 그리고 활성화 함수인 Relu함수를 클래스로 구현해보았습니다. 이번에는 cross entropy와 softmax도 함께 구현해보도록 하겠습니다. cross entropy와 softmax 신경망에서 분류할 때, 자주 사용하는 활성화 함수는 softmax 함수입니다. softmax 함수는 신경망 마지막 층에서 사용합니다. softmax에 관한 자세한 설명은 저번 포스팅인 여기를 확인해주세요. softmax와 함께 오차 함수로 cross entropy 함수를 사용하는데, cross entropy error는 줄여서 CEE라고 쓸 수 있습니다. $$ E\quad =- \sum_{ k }{ { t }_{ k } }{ log\, y }_{ k }$$ $y_k$는 신..
저번 포스팅 때, 순전파와 역전파 원리를 간단하게 보고, class를 만들어봤습니다. 이번에는 활성화 함수를 넣어 조금 그럴듯한 신경망을 만들어보도록 하겠습니다. 활성화 함수를 사용하지 않고 열심히 신경망만 깊게 쌓기만 하면 깊게 쌓는 의미도 없을 뿐더라 그냥 단층 신경망이라도 봐도 무방합니다. 그렇기 때문에 꼭 넣어주어야 깊게 쌓는 의미가 있습니다. Relu Class 저번 포스팅에서 만들었던 Affine class는 냅두고 Relu(렐루) 클래스를 한번 만들어 보겠습니다. Relu 함수는 예전 포스팅에서 한번 다루었는데 혹시나 약간 개념이 헷갈리거나 다른 활성화 함수에 대해 알고 싶다면 여기를 눌러 참고해주세요. Relu의 특징은 0이하면 0을 출력하고 0을 넘으면 그냥 그대로 출력하는 비교적 간단하..
여태까지 작은 데이터로 분류했으니 이번엔 약간 조금 더 큰 데이터를 이용해보도록 하겠습니다. 데이터는 여기에서 zoo.csv를 다운 받아주세요. 제가 사용한 데이터의 원문은 여기를 클릭하면 보실 수 있습니다. DataSet 데이터는 동물 종류에 따른 특징들이 있고, 라벨은 포유류, 조류, 파충류, 어류, 양서류, 곤충류, 갑각류 총 7가지가 있습니다. 우선 데이터를 불러와서 동물의 비율이 어떻게 되는지 확인해보겠습니다. zoo