일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- VARCHAR (1)
- Spring Batch
- 코루틴 컨텍스트
- mp4fpsmod
- 개성국밥
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- pytest
- 티스토리챌린지
- 코루틴 빌더
- 깡돼후
- 자원부족
- vfr video
- preemption #
- JanusWebRTCServer
- JanusWebRTCGateway
- JanusGateway
- addhooks
- 오블완
- Value too long for column
- kotlin
- PersistenceContext
- terminal
- PytestPluginManager
- python
- taint
- 달인막창
- 겨울 부산
- table not found
- JanusWebRTC
- tolerated
너와 나의 스토리
머신러닝 기초 지식 - Hands On 본문
1.1 머신러닝이란?
머신러닝 정의
- 일반적인 정의: 명시적인 프로그래밍 없이 컴퓨터가 학습하는 능력을 갖추게 하는 연구 분야
- 공학적인 정의:
어떤 작업 T에 대한 컴퓨터 프로그램의 성능을 P로 측정했을 때 경험 E로 인해 성능이 향상됐다면, 이 컴퓨터 프로그램은 작업 T와 성능 측정 P에 대해 경험 E로 학습한 것이다.
정의
- 훈련 세트(training set): 시스템이 학습하는 데 사용하는 샘플
- 훈련 사례(training instance): 각 훈련 데이터
- 데이터 마이닝(data mining): 머신러닝 기술을 적용해서 대용량의 데이터를 분석하면 겉으로는 보이지 않던 패턴을 발견하는 것.
ex) 스팸 필터는 스팸 메일과 일반 메일의 샘플을 이용해 스팸 메일 구분법을 배울 수 있는 머신러닝 프로그램이다.
-> 여기서, 작업 T는 새로운 메일이 스팸인지 구분하는 것이고, 경험 E는 훈련 데이터이며, 성능 측정 P는 직접 정의해야 한다.( ex) 정확히 분류된 메일의 비율을 P로 사용할 수 있음 )
이 성능 측정을 정확도라고 부르며 분류 작업에 자주 사용된다.
1.2 머신러닝 사용 이유
1. 스팸 메일 필터
머신러닝 기반의 스팸 필터는 사용자가 스팸으로 지정한 메일에 유독 ‘For U’가 자주 나타나는 것을 자동으로 인식하고 별도의 작업을 하지 않아도 자동으로 이 단어를 스팸으로 분류한다.
-> 이를 통해 스팸 예측하기에 좋은 단어나 조합을 새롭게 알 수 있게됨.
2. 음성 인식
“one”, “two”를 피치사운드 강도를 측정하는 알고리즘을 토해 구분할 수 있다.
각 단어를 녹음한 샘플을 사용해 스스로 학습하는 알고리즘을 작성하는 것이 현재 가장 좋은 솔루션이다.
즉, 머신러닝을 통해 우리는 새로운 연관 관계를 배울 수 있다.
문제연구 -> 머신러닝 알고리즘 훈련 -> 솔루션 -> 솔루션 분석 ->문제에 대한 이해 증가
(-> 필요하다면 다시 문제연구)
머신러닝은 다음 분야에서 뛰어나다
1. 기존 솔루션으로는 많은 수동 조정과 규칙이 필요한 문제
- 하나의 머신러닝 모델이 코드를 간단하고 더 잘 수행되도록 할 수 있다.
2. 전통적인 방식으로는 전혀 해결 방법이 없는 복잡한 문제
- 가장 뛰어난 머신러닝 기법으로 해결 방법을 찾을 수 있다
3. 유동적인 환경
- 머신러닝 시스템은 새로운 데이터에 적응할 수 있다.
4. 복잡한 문제와 대량의 데이터에서 통찰 얻기
1.3 머신러닝 시스템의 종류
1. 사람의 감독 하에 훈련하는 것인지 그렇지 않은 것인지 -> 지도, 비지도, 준지도, 강화 학습
2. 실시가능로 점진적인 학습을 하는지 아닌지 -> 온라인 학습과 배치 학습
3. 단순하게 알고 있는 데이터 포인트와 새 데이터 포인트를 비교하는 것인지 아니면 훈련 데이터셋에서 과학자들처럼 패턴을 발견하여 예측 모델을 만드는지 -> 사례 기반 학습과 모델 기반 학습 |
-이 범주들은 서로 배타적이지 않으며 원하는 대로 연결 할 수 있다.
1. ‘학습하는 동안의 감독 형태나 정보량’에 따라 분류
● 지도 학습(supervised learning)
- 알고리즘에 주입하는 훈련 데이터에 레이블(label)이라는 원하는 답이 포함됨
- 분류(classification)가 전형적인 지도 학습 작업이다. ex) 스팸 필터
- 또 다른 전형적인 작업은 예측 변수(predictor variable)라 부르는 특성(feature)을 사용해 중고차 가격 같은
타겟 수치를 예측하는 것이다.
- 일부 회귀 알고리즘은 분류에 사용할 수도 있고
- 반대인 경우도 있다.
ex) 분류에 널리 쓰이는 로지스틱 회귀는 클래스에 속할 확률을 출력한다.
(예를 들어, 스팸일 가능성 20%)
- 중요한 지도 학습 알고리즘
k-Nearest Neighbors/ Linear Regression/ Logistic Regression/ Support Vector Machines(SVM)/
Decision Tree & Random Forests/ Neural networks
● 비지도 학습(unspervised learning)
- 훈련 데이터에 레이블이 없다. 아무런 도움 없이 시스템이 스스로 학습해야 한다.
- 가장 중요한 비지도 학습 알고리즘
clustering
º k-Means/Hierarchical Cluster Analysis(HCA)/Expectation Maximization
visualization dimensionality reduction
º Principal Component Analysis(PCA)/kernel PCA/ Locally-Linear Embedding(LLE)/ t-SNE
Association rule learning
º Apriori/Eclat
- 블로그 방문자에 대해서, 비슷한 방문자들을 그룹으로 묶기 위해
군집(clustering) 알고리즘을 적용한다고 하자
알고리즘은 스스로 방문자 사이의 연결고리를 찾는다.
-> 계층 군집(hierarchical clustering) 알고리즘을 사용하면 더 작은 그룹으로 세분화 할 수 있다.
- 시각화(visualization) 알고리즘
레이블이 없는 대규모의 고차원 데이터를 넣으면 도식화가 가능한 2D나 3D 표현을 만들어 준다.
- 차원 축소(dimensionality reduction) 알고리즘
너무 많은 정보를 잃지 않으면서 데이터를 간소화 함
이렇게 하는 한 가지 방법은 상관관계가 있는 여러 특성을 하나로 합치는 것
ex) 차의 주행거리는 연식과 관련되므로 차원 축소 알고리즘으로 두 특성을
차의 마모 정도를 나타내는 하나의 특성으로 합칠 수 있다. -> 특성 추출
- 이상치 탐지(anomaly detection)
예를 들어 제조 결함을 잡아내고, 학습 알고리즘에 주입하기 전에 데이터 셋에서 이상한 값을 자동으로 제가함
- 연관 규칙 학습(association rule learning)
대량의 데이터에서 특성 간의 흥미로운 관계를 찾음
● 준지도 학습(semisupervised learning)
- 레이블이 없는 데이터가 많고 레이블이 있는 데이터가 조금인 경우
- 예를 들어, 구글 포토 호스팅 서비스에 가족사진을 올리면 사람A는 사진1,5,11에 있고, 사람B는 사진2,5,7에
있다고 자동으로 인식한다.
이는 비지도 학습(군집)이다.
이 때, 사람마다 레이블이 하나씩만 주어지면 사진에 있는 모든 사람의 이름을 알 수 있게 된다.
● 강화 학습(Reinforcement Learning)
- 여기서는 학습하는 시스템을 에이전트라고 부르며 환경을 관찰해서 행동을 실행하고
그 결과로 보상(reward) 또는 벌점(penalty)을 받는다.
- 시간이 지나면서 가장 큰 보상을 얻기 위해 정책(policy)이라고 부르는 최상의 전략을 스스로 학습한다.
- 정책은 주어진 상황에서 에이전트가 어떤 행동을 선택해야 할지 정의한다.
- ex) 알파고
2. ‘입력 데이터의 스트림으로부터 점진적으로 학습할 수 있는가’에 따라 분류
● 배치 학습(batch learning)
- 시스템이 점진적으로 학습할 수 없다.
가용한 데이터를 모두 사용해 훈련시켜야 한다.
- 일반적으로 시간과 자원을 많이 소모하므로 보통 오프라인에서 수행된다.
- 일단 시스템을 훈련시키고 그런 다음 제품 시스템에 적용하면 더 이상의 학습없이 실행된다.
즉, 학습한 것을 단지 적용한 함 ( =offline learning )
- 배치 시스템이 새로운 데이터에 대해 학습하려면 전체 데이터를 사용하고 시스템의 새로운 버전을 처음부터
다시 훈련해야 한다. 그런 다음, 이전 시스템을 중지시키고 새 시스템으로 교체한다.
- 하지만, 머신러닝 시스템을 훈련, 평가, 론칭하는 전체 과정이 쉽게 자동화될 수 있어서 배치 학습 시스템도
변화에 적응할 수 있다. 데이터를 업데이트하고 시스템의 새 버전을 자주 훈련시키면 된다.
- 만약, 시스템이 빠르게 변하는 데이터에 적응해야 한다면 더 능동적인 방법이 필요하다. 또한, 전체 데이터셋을
사용해 훈련한다면 많은 컴퓨팅 자원이 필요하다(cpu, 메모리 공간, IO 등)
● 온라인 학습(online learning)
- 데이터를 순차적으로 한 개씩 또는 미니배치(mini-batch)라 부르는 작은 묶음 단위로 주입하여 시스템을
훈련시킵니다.
- 연속적으로 데이터를 받고 빠른 변화에 스스로 적응해야 하는 시스템에 적합
- 학습이 끝난 데이터는 필요 없음 -> 버림 (공간 절약)
- 보통 오프라인으로 실행됨 (이름 헷갈리면 incremental learning으로 생각해)
- 학습률(learning rate): 온라인 학습 시스템에서 중요한 파라미터 하나로 변화하는 데이터에 얼마나 빠르게
적응할 것인가이다.
학습률을 높게 하면 시스템이 데이터에 빠르게 적응하지만 예전 데이터를 금방 잊어버릴 것이다.
( ex) 최근 나타난 스팸 종류만 걸러짐 )
반대로 학습률이 낮으면 느리게 학습된다.
- 단점: 시스템에 나쁜 데이터가 주입되면 시스템 성능이 점진적으로 감소함.
3. ‘어떻게 일반화 되는가’에 따른 분류
● 사례 기반 학습(instance-based learning)
- 시스템이 사례를 기억함으로써 학습한다.
그리고 유사도 측정을 사용해 새로운 데이터에 일반화한다.
● 모델 기반 학습(model-based learning)
- 샘플들의 모델을 만들어 예측에 사용함
- ex) 국가별 1인당 GDP가 삶의 만족도에 영향을 미치는지 보자
1인당 GDP가 증가할수록 삶의 만족도는 거의 선형으로 같이 올라간다.
그러므로, 1인당 GDP의 선형 함수로 삶의 만족도를 모델링해보자
-> 모델 선택(model selection)
1인당 GDP라는 특성 하나를 가진 삶의 만족도에 대한 선형 모델이다.
-> 삶의 만족도 = X0+X1*(1인당 GDP)
이 모델은 두 개의 모델 파라미터 X0, X1을 가진다. 이 파라미터를 조정하여 어떤 선형 함수를 표현하는
모델을 얻을 수 있다.
모델을 사용하기 전에 X0, X1를 정의해야 한다.
모델이 얼마나 좋은지 측정하는 효용 함수(utility function)를 정의하거나 얼마나 나쁜지 측정하는
비용 함수(cost function)를 정의할 수 있다.
선형 회귀에서는 보통 선형 모델의 예측과 훈련 데이터 사이의 거리를 재는 비용 함수를 사용합니다.
이 거리를 최소화하는 것이 목표입니다.
머신러닝을 사용한 작업
1. 데이터 분석
2. 모델 선택
3. 훈련 데이터로 모델 훈련시킴
즉, 학습 알고리즘이 비용 함수를 최소화하는 모델 파라미터를 찾는다
4. 새로운 데이터에 모델을 적용해 예측을 하고, 이 모델이 잘 일반화되길 기대함.
1.3 머신러닝의 주요 도전 과제
나쁜 데이터
-
충분하지 않은 양의 훈련 데이터
복잡한 문제에서는 알고리즘보다 데이터가 더 중요하다고 하지만,
훈련 데이터를 추가로 모으는 것은 저렴한 일이 아니므로 아직은 알고리즘을 무시할 수 없다.
-
대표성 없는 훈련 데이터
현재 데이터들로 모델을 선택 했을 때, 몇 몇 자료들이 생략되었다면 대표성이 완벽하지 못합니다. 여기서 자료가 추가되면 모델이 크게 변경될 뿐 아니라 간단한 선형 모델은 잘 작동하지 않습니다.
일반화하려는 사례들을 대표하는 훈련 세트를 사용하는 것이 매우 중요하지만, 어려울 때가 많다. 샘플이 작으면 샘플링 잡음(Sampling noise: 우연에 의한 대표성 없는 데이터)이 생기고, 매우 큰 샘플도 표본 추출 방법이 잘못되면 대표성을 띠지 못할 수 있다. 이를 샘플링 편향(Sampling bias)이라고 한다.
-
낮은 품질의 데이터
-
관련 없는 특성
훈련 데이터에 관련 있는 특성이 충분해야 시스템이 학습할 수 있다.
성공적인 머신러닝 프로젝트의 핵심 요소는 훈련에 사용할 좋은 특성들을 찾는 것이다. 이 과정을 ‘특성 공학(feature engineering)’이라 하며 다음 작업을 포함한다.
-
특성 선택(feature selection):
가지고 있는 특성 중에서 훈련에 가장 유용한 특성을 선택함
-
특성 추출(feature extraction):
특성을 결합하여 더 유용한 특성을 만든다. (차원 축소 알고리즘 사용 가능)
-
새로운 데이터를 수집해 새 특성 만듦
나쁜 알고리즘
-
훈련 데이터 과대적합
과대적합(overfitting): 모델이 훈련 데이터에 너무 잘 맞지만 일반성이 떨어진다는 뜻
발생 이유: 훈련 데이터에 있는 잡음의 양에 비해 모델이 너무 복잡할 때 일어난다.
해결 방법:
-
파라미터 수가 적은 모델을 선택, 훈련 데이터에 있는 특성 수 줄이기, 모델에 제약을 가하여 단순화시키기
-
훈련 데이터를 더 많이 모으기
-
훈련 데이터의 잡음을 줄이기(오류 데이터 수정과 이상치 제거)
모델을 단순하게 하고 과대적함의 위험을 감소시키기 위해 모델에 제약을 가하는 것을
규제(regulation)이라고 한다.
-
훈련 데이터 과소적합
과소적합(underfitting): 모델이 너무 단순해서 데이터의 내재된 구조를 학습하지 못할 때 일어남
해결 방법:
-
모델 파라미터가 더 많은 강력한 모델 선택
-
학습 알고리즘에 더 좋은 특성 제공(특성 공학)
-
모델의 제약을 줄이기(ex) 규제 하이퍼파라미터 감소시키기)
테스트와 검증
-
훈련 데이터를 훈련 세트와 테스트 세트 두 개로 나눈다.
훈련 세트를 사용해 모델을 훈련시키고 테스트 세트를 사용해 모델을 테스트한다.
새로운 샘플에 대한 오류 비율을 일반화 오차(generalization error)라고 한다.
훈련 오차가 낮지만 일반화 오차가 높다 -> 훈련 데이터에 과대 적합 되었다
-
모델이 새로운 데이터에 잘 작동할지 확인
검증 세트(validation set)라 부르는 두 번째 홀드아웃(holdout) 세트를 만들기
검증 세트에서 최상의 성능을 내는 모델과 하이퍼파라미터를 선택함
훈련 데이터에서 검증 세트로 너무 많은 데이터를 뺏기지 않기 위해 일반적으로
교차 검증(cross-validation) 기법을 사용. 훈련 세트를 여러 서브셋으로 나누고 각
모델을 이 서브셋의 조합으로 훈련시키고 나머지 부분으로 검증함
'Data Analysis > Machine learning' 카테고리의 다른 글
모두를 위한 딥러닝 - RNN 실습(1) (0) | 2019.08.07 |
---|---|
RNN - 입력과 출력 시퀀스 (0) | 2019.08.07 |
cross-entropy cost function (0) | 2019.07.31 |
Approximate entropy(ApEn) (0) | 2019.07.31 |
Keras 함수 / Numpy 함수 정리 (0) | 2019.07.29 |