사용자 삽입 이미지

BeautifulSoup, scikit-learn, TensorFlow를 사용하여 실무에 머신러닝/딥러닝을 적용해 보자!
인공지능, 머신러닝, 딥러닝은 바둑, 의료, 자동차 등 이미 다양한 분야에서 성공적인 성과를 보여주고 있습니다. 이러한 머신러닝, 딥러닝과 관련된 성공 사례를 듣고 나면 실제 업무에서도 활용해보고 싶을 것입니다. 사실 머신러닝이라고 하면 어려운 수학과 관련된 지식이 필요하다고 생각하는 경우가 많지만, 그렇게까지 어려운 수학을 사용하는 경우는 거의 없습니다. 활용할 데이터만 가지고 있다면 자신이 원하는 것을 만들어낼 수 있습니다.

[파이썬을 이용한 머신러닝, 딥러닝 실전 개발 입문]에서는 머신러닝의 바탕이 되는 데이터를 수집하고, 수집된 데이터를 기반으로 머신러닝을 수행하는 방법을 설명합니다. 인터넷에서 데이터를 어떻게 효율적으로 수집하는지 알아보고, 머신러닝을 원활하게 할 수 있게끔 데이터를 가공하는 방법을 살펴봅니다. 나아가 가공된 데이터를 이용해 챗봇 제작, 규동 메뉴 이미지 판정, 얼굴 인식 등 머신러닝에 활용하는 과정까지 실질적인 파이썬 예제 코드로 소개합니다.


00장: 머신러닝을 위한 데이터 처리
0-1. 크롤링, 스크레이핑, 머신러닝
인터넷의 빅데이터
스크레이핑, 크롤링, 데이터 가공
머신러닝에 사용할 수 있는 데이터의 구조
01장: 크롤링과 스크레이핑
1-1. 데이터 다운로드하기
웹상의 정보를 추출하는 방법
urllib.request를 이용한 다운로드
웹에서 데이터 추출하기
BeautifulSoup로 스크레이핑하기
1-2. BeautifulSoup로 스크레이핑하기
네이버 금융에서 환율 정보 추출하기
웹 브라우저로 HTML 구조 확인하기
1-3. CSS 선택자
위키 문헌에 공개돼 있는 윤동주 작가의 작품 목록 가져오기
CSS 선택자 자세히 알아보기
CSS 선택자로 추출 연습하기
정규 표현식과 함께 조합하기
1-4. 링크에 있는 것을 한꺼번에 내려받기
한꺼번에 다운받는 데 필요한 처리 내용
상대 경로를 전개하는 방법
재귀적으로 HTML 페이지를 처리하는 방법
02장: 고급 스크레이핑
2-1. 로그인이 필요한 사이트에서 다운받기
HTTP 통신
requests 사용해보기
2-2. 웹 브라우저를 이용한 스크레이핑
웹 브라우저 원격 조작에 사용하는 Selenium
웹 사이트를 이미지로 캡처해보기
네이버에 로그인해서 구매한 물건 목록 가져오기
Selenium으로 스크레이핑하는 방법
자바스크립트 실행해보기
2-3. 웹 API로 데이터 추출하기
웹 API
웹 API를 제공하는 이유
웹 API 사용해보기 - OpenWeatherMap의 날씨 정보
국내에서 사용할 수 있는 웹 API
2-4. cron을 이용한 정기적인 크롤링
정기적인 크롤링
매일 환율 정보 저장하기
cron으로 매일 한 번 실행하기
crontab 설정 방법
03장: 데이터 소스의 서식과 가공
3-1. 웹의 다양한 데이터 형식
텍스트 데이터와 바이너리 데이터
XML 분석
JSON 분석
YAML 분석
CSV/TSV 분석
엑셀 파일 분석
3-2. 데이터베이스
데이터베이스
데이터 저장에는 어떤 데이터베이스를 사용해야 할까?
SQLite - 가볍게 파일 하나로 사용할 수 있는 데이터베이스
MySQL 사용하기
TinyDB 사용하기
04장: 머신러닝
4-1. 머신러닝이란?
머신러닝 개요
머신러닝의 종류
머신러닝의 흐름
머신러닝의 응용 분야
초과 학습(초과 적합)
4-2. 머신러닝 첫걸음
머신러닝 프레임워크 scikit-learn
XOR 연산 학습해보기
붓꽃의 품종 분류하기
4-3. 이미지 내부의 문자 인식
손글씨 숫자 인식하기
이미지 데이터 학습시키기
4-4. 외국어 문장 판별하기
외국어 판정
판정 방법
샘플 데이터 수집
언어 판별 프로그램
웹 인터페이스 추가하기
4-5. 서포트 벡터 머신(SVM)
SVM이란?
SVM을 실제로 사용해보기
SVM의 종류
4-6. 랜덤 포레스트
랜덤 포레스트란?
랜덤 포레스트 사용하기
4-7. 데이터를 검증하는 방법
크로스 밸리데이션
그리드 서치
05장: 딥러닝
5-1. 딥러닝 개요
딥러닝
5-2. TensorFlow 설치하기
TensorFlow
설치 방법
설치가 제대로 됐는지 확인하기
TensorFlow로 간단한 계산해보기
5-3. Jupyter Notebook
Jupyter Notebook 설치하고 실행하기
새 노트 만들기
데이터 시각화
TensorFlow와 함께 사용하기
5-4. TensorFlow 기본
TensorFlow 기본
머신러닝 해보기
5-5. TensorBoard로 시각화하기
TensorBoard의 사용법
5-6. TensorBoard로 딥러닝하기
딥러닝의 구조
딥러닝 해보기 - MNIST 손글씨 데이터
5-7. Keras로 다양한 딥러닝 해보기
Keras
Keras 설치
Keras로 MNIST 테스트해보기
Keras로 비만도 판정해보기
5-8. Pandas/NumPy 다루기
Pandas/NumPy
데이터 조작
Pandas/Numpy 정리
06장: 텍스트 분석과 챗봇 만들기
6-1. 한국어 분석(형태소 분석)
형태소 분석
한국어 형태소 분석 라이브러리
출현 빈도 분석
6-2. Word2Vec으로 문장을 벡터로 변환하기
Word2Vec
Gensim 설치
Gensim의 Word2Vec으로 "토지"를 읽어보기
위키피디아 한국어 버전을 사전으로 사용해보기
위키피디아 데이터로 놀아보기
6-3. 베이즈 정리로 텍스트 분류하기
텍스트 분류
베이즈 정리
나이브 베이즈 분류
베이지안 필터 사용해보기
6-4. MLP로 텍스트 분류하기
MLP로 텍스트 분류하기
6-5. 문장의 유사도를 N-gram으로 분석하기
문장의 유사도 분석
레벤슈타인 거리
파이썬으로 레벤슈타인 거리를 계산하는 프로그램
N-gram으로 유사도 구하기
6-6. 마르코프 체인과 LSTM으로 문장 생성하기
마르코프 체인과 LSTM/RNN
마르코프 체인이란?
마르코프 체인 구현하기
LSTM/RNN
6-7. 챗봇 만들기
챗봇(회화 봇)
챗봇의 구조
07장: 이미지와 딥러닝
7-1. 유사 이미지 검출하기
간단한 형태 인식 - Average Hash
7-2. CNN으로 Caltech 101의 이미지 분류하기
CNN으로 색상 있는 이미지 분류해보기
7-3. 규동 메뉴 이미지 판정하기
규동을 판정할 수 있는 PC가 좋은 PC
스크레이핑부터 시작하기
7-4. OpenCV로 얼굴 인식하기
OpenCV
얼굴을 인식하는 프로그램 만들어보기
얼굴에 모자이크 걸기
7-5. 이미지 OCR - 연속된 문자 인식하기
OpenCV로 텍스트 영역 확인하기
문자 인식 데이터 만들기
다양한 숫자 폰트 학습 시키기
부록: 개발 환경 구축
부록-1. Docker로 개발 환경 구축하기
Docker란?
Docker 설치
윈도우 10 이하에서 Docker Toolbox 설치하기
macOS에서 Docker for Mac 설치하기
부록-2. 파이썬 + Anaconda 환경 준비
파이썬 + Anaconda 이미지 다운

사용자 삽입 이미지
쿠지라 히코우즈쿠에 [저]
중학교 시절부터 취미로 하던 프로그래밍이 재미있어 다양한 것들을 만들다가 프로그래머가 되었다. 현재는 소프트웨어 기획 획사 '쿠지라한도'에서 '재미있고 도움되는 도구'를 주제로 윈도우, 안드로이드 등에서 동작하는 앱을 공개하고 있다. 대표작은 도레미로 작곡할 수 있는 음악 소프트웨어 '텍스트 음악 사쿠라'와 '일본어 기반 프로그래밍 언어 나데시코' 등이다. 2001년에는 온라인 소프트웨어 대상을 받았으며, 2004년 IPA 청소년부에서 슈퍼크리에이터로 인정을 받았고, 2010년에 OSS 공헌자 상을 수상했다. 프로그래밍의 즐거움을 전달하기 위해 매일 분투하고 있다.

윤인성 [역]
어쩌다가 책을 집필/번역하기 시작해서, 지금까지 계속해서 집필/번역하고 있다. 현재 직업 특성상 집에서 나갈 이유가 별로 없다는 것에 굉장히 만족하고 있다. 오전에는 커피, 오후에는 홍차를 마신다. 요리, 피아노, 기타, 작곡, 그림, 스컬핑 등의 취미를 갖고 있다. 그림 취미로 ≪인공지능을 위한 수학(프리렉, 2018)≫의 표지를 그리기도 했다. 소개말을 쓰는 시점을 기준으로 이 책은 49번째 작업 및 참여 도서이다.


=================================================================
좋은책을 발견했다.
요즘 관심이 생긴 [마르코프 체인] 에 대한 지식이 필요했는데 파이썬에 여러 기능을 한번에 공부 할수 있는 귀한책이다.
요즘 분위기상 일본책 보고 있으면 매국놈 소리 들을수 있지만.  뭔가 잘쓴 책이다 싶으면 일본인이 저자다.
다음주에 구입 예정이다.

네이버 가격비교 : [링크]

=================================================================

출처 : 위키북스


2019/10/30 16:41 2019/10/30 16:41
1. 파이썬 1위는 파이썬이다.
파이썬 말고 다른 어떤 언어가 1위가 될 수 있겠는가? 파이썬에는 개발자를 미치도록 화나게 하는 면이 있지만(공백, 파이썬 2.x와 파이썬 3.x 사이의 극심한 분열, 각기 다른 면에서 부실한 5가지 패키징 시스템 등) AI 관련 작업을 한다면 어느 시점에는 분명 파이썬을 사용하게 된다.
파이썬의 라이브러리는 다른 언어에서 따라올 수 없는 부분이다.
넘파이(NumPy)는 워낙 보편적으로 사용되는 터라 텐서 연산에서 사실상 표준 API 역할을 한다.
판다스(Pandas)는 R의 강력하고 유연한 데이터프레임을 파이썬으로 가져온다.
자연어 처리(NLP)에서는 이름도 유명한 NLTK와 빠른 속도가 장점인 스페이시(SpaCy)가 있다.
머신러닝 쪽에는 역전의 사이킷-런(Scikit-learn)이 있다.
딥 러닝이라면 현재의 모든 라이브러리(텐서플로우(TensorFlow), 파이토치(PyTorch), 체이너(Chainer), 아파치 MXNet(Apache MXNet), 테아노(Theano) 등)가 사실상 파이썬을 가장 우선시하는 프로젝트다.
arXiv에서 첨단 딥 러닝 연구를 살펴보면 십중팔구는 파이썬으로 된 소스 코드를 찾을 수 있다.
파이썬 생태계에는 그 외의 다른 부분도 있다.
아이파이썬(IPython)은 주피터 노트북(Jupyter Notebook)이 되면서 파이썬 중심에서 다소 벗어났지만 주피터 노트북 사용자와 온라인에서 공유되는 노트북의 대부분은 파이썬을 사용한다.
부정할 수 없다.
파이선은 AI 연구의 최전방에 선 언어다.
대부분의 머신러닝과 딥 러닝 프레임워크는 파이썬용으로 만들어지며, AI 분야에서 일하는 거의 모든 사람들이 파이썬을 이야기한다.
하루에 적어도 한 번은 공백 문제 때문에 욕이 나오게 하는 언어임에도 바로 이러한 이유로 AI 프로그래밍 언어 중 1위로 꼽힌다.
2 자바와 그 친구들 JVM 언어군(자바, 스칼라, 코틀린, 클로저 등) 역시 AI 애플리케이션 개발을 위한 좋은 선택이다.
자연어 처리(CoreNLP), 텐서 연산(ND4J) 또는 GPU 가속 딥 러닝 스택(DL4J) 등, 파이프라인의 모든 부분에서 풍부한 라이브러리를 사용할 수 있다.
또한 아파치 스파크, 아파치 하둡과 같은 빅 데이터 플랫폼에 대한 접근성도 우수하다.
자바는 대부분의 기업에서 국제 공통어로 사용되며, 자바 8과 자바 9에 새로운 언어 구성자가 도입되면서 대부분의 개발자가 기억하는 짜증스러운 코딩 경험에서도 어느정도 벗어났다.
자바를 사용해서 AI 애플리케이션을 코딩하는 과정은 다소 지루하기도 하지만, 어쨌든 소기의 목적은 달성할 수 있다.
또한 개발, 배포, 모니터링을 위한 기존의 모든 자바 인프라를 그대로 사용 가능하다는 것도 장점이다.
3. C/C++ C/C++는 보통 AI 애플리케이션을 개발할 때 가장 먼저 떠오르는 언어는 아니지만, 임베디드 환경을 다루고 자바 가상 머신이나 파이썬 인터프리터의 오버헤드를 감당할 수 없다면 C/C++가 해답이 된다.
시스템에서 마지막 한 방울까지 성능을 짜내야 하는 상황에서는 내키지 않더라도 포인터의 세계로 다시 돌아갈 수밖에 없다.
다행히 현대의 C/C++ 코딩은 즐거운 경험이 될 수도 있다.
여러 가지 접근 방법 중에서 선택이 가능하다.
바닥까지 뛰어들어 CUDA와 같은 라이브러리를 사용해서 GPU에서 바로 실행되는 자체 코드를 작성할 수 있고, 텐서플로우 또는 카페(Caffe)를 사용해서 유연한 고수준 API에 접근하는 방법을 사용할 수도 있다.
후자의 경우 데이터 과학자가 파이썬으로 만든 모델을 가져온 다음 C/C++의 장점인 속도를 십분 발휘해 프로덕션에서 실행하는 것도 가능하다.
이 분야에서 올해 러스트(Rust)가 행보를 주목하라. C/C++의 속도와 형식 및 데이터 안전성을 결합한 러스트는 보안 문제를 유발하지 않으면서 프로덕션 성능을 확보하기 위한 좋은 선택이다.
또한 텐서플로우 바인딩이 이미 제공된다.
4. 자바스크립트 자바스크립트? 요즘 분위기가 심상치 않다.
구글은 최근 웹 브라우저에서 머신러닝 모델의 학습 및 실행이 가능한 WebGL 가속 라이브러리인 TensorFlow.js를 출시했다.
여기에는 케라스(Keras) API, 그리고 정규 텐서플로우에서 학습된 모델을 로드하고 사용할 수 있는 기능도 포함된다.
이는 AI 영역으로 개발자들을 대대적으로 끌어들일 가능성이 높다.
현재 자바스크립트에서 이용할 수 있는 머신러닝 라이브러리는 다른 언어만큼 풍족하지는 않지만, 개발자들이 리액트(React) 구성 요소 또는 CSS 속성을 추가하는 것만큼 아무렇지도 않게 웹 페이지에 신경망을 추가하게 되는 날이 곧 온다.
생각만 해도 기대와 두려움이 동시에 느껴진다.
TensorFlow.js는 초기 단계다.
현재 브라우저에서 작동하지만 Node.js에서는 안 된다.
전체 텐서플로우 API 구현도 아직 되지 않는다.
그러나 필자는 2018년 말까지 이 두 가지 문제가 모두 해결되고, 그 직후 자바스크립트의 AI 침공이 뒤따를 것으로 예상한다.
5.R R은 상위 5개 언어 가운데 최하위이며 지금도 계속 하락세다.
R은 데이터 과학자들이 선호하는 언어다.
그러나 다른 프로그래머들은 R을 처음 접할 때 그 데이터프레임 중심의 접근 방식에 다소 혼란을 느낀다.
R만 다루는 개발자 그룹이 있다면 연구, 프로토타이핑, 실험을 위해 텐서플로우, 케라스 또는 H2O와의 통합을 사용하는 것도 좋지만 프로덕션 용도로 R을 추천하기는 망설여진다.
원문보기: http://www.ciokorea.com/news/38151#csidx11c5e93d37811a68712ccd7d8ff21f7
2019/10/30 15:25 2019/10/30 15:25
<script>
// 연산자의 연산 우선순위
function getOpPrec(op) 
    switch (op)
    {
        case '*':
        case '/':
            return 5;
        case '+':
        case '-':
            return 3;    
        case '(': 
            return 1;    
    }
    return -1;
}
// 연산자의 우선순위 비교
function whoPrecOp(op1, op2) 
{
    return getOpPrec(op1) >= getOpPrec(op2);    // op1의 연산순위가 높거나 같다면 참
}
function postfixNotation(exp) 
{  
    var stack = [], convExp = [], tok, popOp; 
    exp = exp.replace(/\s/g, '').match(/[\d\.]+|[^\d\.]/g).reverse();  // 공백제거 및  배열로 분리
    while (tok = exp.pop()) {    
        // 숫자가 아니라면(연산자라면) 
        if (isNaN(tok)) {    
            switch (tok)
            {
                case '(':
                    stack.push(tok);
                    break;
                case ')':
                    while (1) {
                        popOp = stack.pop();
                        if ( popOp == '(' )
                            break;
                        convExp.push(popOp);
                    }
                    break;
                case '+': case '-':
                case '*': case '/':
                    while (stack.length && whoPrecOp(stack[stack.length-1], tok))
                        convExp.push(stack.pop());
                    stack.push(tok);
                    break;
            }
        } else     // 숫자라면(피연산자라면)
            convExp.push(tok); 
    }          
    while (stack.length)  
        convExp.push(stack.pop());    
    return convExp;  
}
function evalPostfixNotation(exp) 
{
    var i, tok, n1, n2, stack = [];
    for (i in exp) {   
        tok = exp[i];
        // 연산자라면 
        if (isNaN(tok)) {
            n2 = Number(stack.pop());
            n1 = Number(stack.pop());
            switch (tok)
            {
                case '*':
                    stack.push(n1 * n2);
                    break;
                case '/':
                    stack.push(n1 / n2);
                    break;
                case '+':
                    stack.push(n1 + n2);
                    break;
                case '-':
                    stack.push(n1 - n2);
                    break;
            }
        } else     // 숫자라면            
            stack.push(tok);
    } 
    return stack.pop();
}
document.write( evalPostfixNotation(postfixNotation( '((3.5 - 2) + 3.4) * (14 - 10)' )));
</script>
2019/10/30 15:16 2019/10/30 15:16
https://spam.kisa.or.kr/white/sub1.do

이메일서버 등록하면 끝 !
2019/10/30 15:14 2019/10/30 15:14