2019년 6월 4일 화요일 21th
기계학습 분류
지도 학습
1 | 정답을 알려주며 학습시킨다. |
비지도 학습
1 | 정답을 알려주지 않고 비슷한 데이터들 끼리 군집화하여 학습한다. |
지도학습, 비지도학습 : tistory
차원 축소 (pca): tistory, wikidocs
기계학습 목적
Data로 부터
Specific문제 해결을 위한
최적의 모델 만들기
Data수집부터 예측까지 과정
1 | 0. Data 불러들이기 |
label이 유한일때, 무한일때
유한일때
1 | import seaborn as sns |
무한일때
mpg(연비)를 예측한다고 가정했을 때 연비는 정해져 있는 label이 아니기 때문에 무한 label임으로 regression 즉, 연속된 값을 예측해야 한다.
1 | import seaborn as sns |
masking 기법으로 missing data 보기
1 | import seaborn as sns |
missing data 그래프로 확인하기
1 | # pip install missingno |
data의 양이 충분하지 않을때 missing data가 있으면 적당한 값으로 채워 넣어 성능을 높여주고,
적당한 값을 채우기 애매할 때는 missing data가 있는 row를 지워야 한다.
데이터를 쪼개 성능 비교하기
1 | import seaborn as sns |
Model 학습이 끝난 알고리즘 + 데이터를 Model 이라고 한다
복습시간 18시 50분 ~ 19시 45분 / 총 55분
2019년 6월 5일 수요일 22th
One hot encoding & Label encoding
기계학습으로 예측분석을 하기 위해서는 문자를 숫자로 변환 해야하기 때문에 Encoding을 해야한다
그런데 문자를 숫자로 encoding할때 성능에 영향을 미치기 때문에 상황에 따라 encoding 방식을 달리 해야 한다
One hot encoding
하나의 값만 True이고 나머지는 모두 False인 인코딩 방식
Scikit
1 | from sklearn.preprocessing import OneHotEncoder |
Scikit’s onehotencoder의 장점은 인코딩 되기 전 문자를 알 수 있다는 것.
밑의 경우에는 어떻게 해야 할까..?
1 | pd.DataFrame(ohe.fit_transform(data[['species']]), columns=['target']) |
Pandas
1 | import seaborn as sns |
LabelEncoder
Scikit
1 | from sklearn.preprocessing import LabelEncoder |
pandas map
1 | import seaborn as sns |
Label encoding시 주의 거리기반 알고리즘을 사용할 때 라벨 인코딩된 값으로 학습을 하게되면 숫자간의 격차로 인해 오차가 생길 위험이 있다. 예를 들어 0, 1, 2로 라벨 인코딩 되었다고 했을 때 0과 1사이 1과 2사이는 둘다 1간격만 있어 상관 없지만 0과 2사이에는 2간격이 생겨 학습시 주의해야 한다. 따라서 label encoding 해야할 때와 하지 말아야 할때를 잘 구분해야 한다.
Bias , Variance
Bias가 높으면 값이 편향되어 있어서 값이 모여있고 Variance가 높으면 값이 퍼져있게된다.
현실에 적용할 수 있는 모델을 만들기 위해서는 Bias와 Variance가 만나는 지점을 목표로 삼고 모델을 만들어야 한다.
Trade off
다양한 데이터를 학습시키지 않게 되면 bias가 높아져 정확도가 떨어지는 대신 학습하지 않은 데이터중 일부는 어쩌다 맞추는 경우는 Underfit이다.
다양한 데이터를 학습시키긴 했지만 데이터 양이 많지 않아 bias는 낮지만 variance가 높아 학습한 데이터에 대해서만 정확도가 높고 전혀 보지 못한 데이터에 대해서는 정확도가 현저히 낮게 되는 경우는 Overfit이다.
Underfit의 경우 training시 정확성은 떨어지지만 test에서 오차범위가 크지 않게 예측을 할 수 있지만, Overfit의 경우 training시에 정확성은 높지만 test에서 오차범위가 크게 예측을 할 수 가 있다.
예를 들어 Underfit인 경우 사과를 맞추는 로봇이 있다고 가정했을 때 ‘사과는 동그랗고 빨갛다’ 라고만 학습시키고 테스트를 했을 때 석류나 자두같이 동그랗고 빨간 과일을 보게되어도 사과라고 예측할 것이다. Overfit의 경우는 ‘지름이 10cm이며 동그랗고 빨간색이다’ 라고 학습 시킨 경우에는 자두같이 작지만 빨간 과일에 대해서는 사과라고 예측하지는 않겠지만 10cm가 넘는 사과이거나 초록색 사과인 경우를 사과라고 판단하지 못하는 오류를 범할 수 있다
Model 성능 평가하는 2가지 방법
Hold out
Train-test-split
Data leakage training data에는 있지만 test data에는 없어 overfitting된경우 발생하는 문제
Cross Validation (교차 검증)
n등분 나누어 test, train을 n번 수행하여 평균을 내어 성능을 테스트한다.
보통 10등분으로 함.
모든 데이터가 최소 한번은 테스트 데이터로 쓰이도록 한다.
데이터가 적을때 대충의 성능평가를 할때 cross_val_score를 사용한다
data leakage현상을 방지할 수 있다.
데이터의 양이 많으면 매우 느리다는 단점이 있다.
Model의 성능이 좌우되는 요소 2가지
1 | 1. 알고리즘 |
복습시간 21시 10분 ~ 1시 / 2시간 50분
2019년 6월 10일 월요일 23th
map vs apply
1 | 1. map은 dictionary, 함수 방식 둘다 지원 |
count vs size
1 | count는 미싱데이터를 포함하지 않고 |
count
1 | a = [1,1,1,2,2,3,4] |
size
1 | import numpy as np |
cut & qcut
cut
최저값과 최대값의 간격을 n등분하여 나눔
1 | import pandas as pd |
qcut
전체 데이터 갯수에서 n%로 나눔
1 | import pandas as pd |
Discriminative vs Generative
분류하여 예측 하는 모델에는 두 가지 방식이 있다. Discriminative, Generative
Discriminative
입력 데이터들이 있을때 label data를 구별해내는 방식
어떤 입력값(input) x가 주어졌을 때 그 결과값(label) y일 확률을 알아내는 것
대표 알고리즘
1 | 1. Logistic Regression |
장점 데이터가 충분할 경우 성능이 좋음
단점 데이터가 실제 어떤 모습인지 본질을 이해하기 어려움
#### SVM(Support Vector Machine)
SVM은 수학적으로 증명 가능하고 초평면을 경계로 분류하는 알고리즘 이라고 볼 수 있다
선형, 비선형 둘다 성능 좋지만 최적화를 고려 안해 속도가 느리다는 단점이 있다
Generative
입력값과 결과값이 주어질때, 일정한 분포 규칙속에 존재한다는 가정을 한다.
관측 데이터 결합확률 분포를 통해 확률 모델을 만들어낸다. 즉 주어진 데이터를 보고 분포 규칙을 생성해 낸다.
대표 알고리즘
1 | 1. Naive Bayes |
장점 데이터 자체의 특성을 파악하기에 좋다, 데이터를 생성해 새로운 결과물을 얻어낼 수 있다.
단점 데이터가 많은 경우 Discriminative에 비해 성능이 떨어 질수 있다.
Generative & Discriminative: naver blog
선형, 비선형 모델 : blog
LogisticRegression을 제일처음에 하는 이유
1 | LogisticRegression은 데이터가 선형분류로 성능이 좋은지 안좋은지를 보고 |
복습시간 18시 30분 ~ 22시 10분 / 총 3시간 40분
2019년 6월 12일 수요일 24th
import를 하지 않고 외부 객체의 메소드를 사용 하는 방법
1 | import seaborn as sns |
DataFrame 객체는 Pandas 프레임워크에 정의된 클래스이다. 따라서 Pandas를 import하지 않고는 사용할 수 없다.
하지만 import seaborn만 했는데 iris 객체가 DataFrame 타입으로 나온다. 어떻게 된것일까?
1 | !pip install seaborn |
seaborn을 설치하게되면 numpy, scipy, pandas 등 같이 설치하게 된다. 왜냐하면 seaborn을 사용하기 위해서는 모두 필요하기 때문이다.
설치가 되었다고 해서 import하지 않고 쓸수 있다는 말은 아니다. seaborn 패키지 자체에서 numpy든 pandas든 import해서 seaborn으로 dataset을 생성하면 DataFrame 형태로 반환하도록 설계되어 있어 DataFrame 객체가 네임스페이스에 들어 있게 되면 DataFrame이 사용할 수 있는 메소드는 전부 사용할 수 있게 되는 것이다.
상황에 따른 알고리즘 사용법
데이터의 양이 충분한지 판단하는 방법
데이터 분석시 info정보만으로 데이터의 양이 충분한지 안한지 가늠이 가지 않을때 Learning curve를 확인하여 데이터 양이 충분한지 판단한다.
Learning curve란 학습시킬때마다 정확도가 어떻게 달라지는지 추세를 확인하여 training score와 cv score가 만나는 지점 즉, overfitting되기 전 적당한 trade-off 지점을 확인할 수 있는 데이터 양이라고 한다면 데이터가 충분하다는 말
1 | from sklearn.datasets import load_iris |
Learning curve & LogisticRegression
1 | from sklearn.datasets import make_classification |
하이퍼 파라미터 찾기 (GridSearchCV)
GridSearch를 활용하여 for문을 쓰지 않고 하이퍼 파라미터 찾기
1 | from sklearn.model_selection import GridSearchCV |
LogisticRegression LogisticRegression알고리즘은 target data가 2개 이상일때만 Learning curve가 가능하다.
Cross-validation & Learning curve Cross-validation으로 성능 체크할때 n개로 나누어 체크를 하는데 이때 자동으로 데이터를 섞고나서 평가를 하기 때문에 데이터가 정렬 되어 있어도 섞어서 평가를 한다. 그런데 Learning curve로 학습 추세를 확인 할때는 데이터를 순서대로 학습시키기 때문에 최소 클래스 2개가 필요한 LogisticRegression알고리즘을 사용할 때는 shuffle 옵션을 True로 줘야 한다.
복습시간 19시 ~ 22시/ 총 3시간
2019년 6월 13일 목요일 25th
Supervised Learning Process
Raw Data Collection
데이터 수집, 적합한 데이터 format으로 불러오기. 기초 통계분석하기 위해 보통 DataFrame 형태로 불러오거나 변환해준다.
Pre-Processing
Tidy Data인지 확인한다. Tidy Data가 아닐 경우 변수는 열로 관측치는 행으로 구성할 수 있도록 melt로 행, 열 변환해준다.
Sampling
Train-Test-Split 하거나 데이터 양이 많지 않아 대략적인 성능을 알고 싶을 때는 Cross Validation. 보통 Big Data를 다룬다는 가정이 있기 때문에 Train-Test-Split을 한다.
Pre-Processing
info를 통해 데이터 양이 충분한지, 열 이름에 공백이나 특수문자는 없는지, 데이터 타입이 모두 숫자인지, 불러드릴 수 있는 크기인지, label data를 포함하고 있는지 등을 체크한다. 이때 데이터 양이 충분한지 여부를 확인하고 싶을때는 Learning Curve를 확인한다. 데이터 양이 적다고 판단이 되어 데이터 수집을 해야하는데 데이터 수집할 형편이 되지 않는다면 차원 축소를 고려해본다. 차원 축소는 Scaling, 수작업 등으로 한다.
</p>
Learning Algorithm Training
Hyperparameter Optimization
Post-Processing
Final Model
Pandas-Profiling
설치
1 | !pip install pandas-profiling |
예제
1 | from sklearn.datasets import load_wine |
ProfileReport를 사용해서 자기만의 전처리 방식을 자동화 할 수도 있다.
차원 축소 3가지 방법
1 | 1. Feature Scaling |
Feature Scaling
13개 차원에서 5개 차원으로 축소
1 | from sklearn.decomposition import PCA |
차원 축소 전과 축소 후 성능 비교후 성능이 축소 전과 비슷하다면 상관성이 높다는 의미로 차원을 축소해도 괜찮다.
데이터의 양이 차원에 비해 작을때 차원 축소로 성능 향상을 하기도 한다.
밑에 부터는 복습 자세하게 다시하기
Pipeline
pipeline은 …
Pipeline만드는 두가지 방법
Pipeline
make_pipeline
Pipeline
1 | import numpy as np |
표준화
GridSearchCV + Pipeline 하는 방법
복습시간 19시 ~ 22시 / 총 3시간
2019년 6월 14일 금요일 26th
Unsupervised Learnling
k-means
근처 값의 평균을 내어 n개로 묶는 clustering 방법
1 | from sklearn.cluster import KMeans |
k-means : github blog
k-means로 cluster 성능 파악하기
1 | import numpy as np |
dbscan
묶음 갯수 파악하기
1 | from sklearn.cluster import DBSCAN, dbscan # 둘다 같은 기능 |
1 | min_samples는 영역 안의 최소 데이터 갯수 |
Agglomerative Clustering
Dendrograms
1 | from scipy.cluster.hierarchy import dendrogram, linkage |
mglearn으로 clustering 시각화 해서 보기
설치
1 | !pip install mglearn |
k-means방식으로 clustering 하는 과정
1 | import mglearn |
k-means boundaries
1 | import mglearn |
agglomerative
1 | import mglearn |
dbscan
1 | import mglearn |
dbscan + k-means
알고리즘 만들기는 다음시간에 계속
알고리즘 만들기
Duck typing 방식
1 | class MyEstimator: |
BaseEstimator 상속 방식
Dummy 알고리즘 Dummy 알고리즘과 내가 만든 알고리즘과 비교해서 성능이 좋지 못하다면 자신만의 알고리즘을 만들 필요가 딱히 없음…
복습시간 19시 45분 ~ 24시 / 총 4시간 15분
2019년 6월 17일 월요일 27th
영화 추천 모델 만들기
Collaborative filtering
나와 비슷한 사람을 찾아 내가본 영화를 제외한 비슷한 사람이 본 영화 추천
필요한 데이터 불러오기
1 | import pandas as pd |
DESCR, README 등 도메인 정보 확인하기
1 | u.data -- The full u data set, 100000 ratings by 943 users on 1682 items. |
불러온 정보 필요한 형태로 변형하기
1 | # 유저 아이디 + 영화 아이디 + 평점 + 영화 이름 + 개봉년도 DataFrame 만들기 |
회원간의 상관성 보기 (어떤 연관성 전략을 세울지 고민)
1 | # user_item에서 user가 index이기 때문에 corr하기 위해 Transform 해야함 |
연관성이 높은 3명 뽑기 (세부 전략 세우기)
회원 번호 2를 나라고 가정
1 | user_item_corr.loc[2].sort_values(ascending=False)[:4] |
나와 비슷한 사람 영화 목록 - 나의 영화 목록
1 | # 나의 영화 목록 |
최종 추천 영화 목록 출력하기
1 | reco_movie_to_me=user_movie_rate[user_movie_rate.movie_id.isin(reco_movie_to_me)].sort_values('ratings', ascending=False) |
Pandas format 대표값 설정 없이 그대로 변형하는 4가지 방법
1 | 1. stack |
pivot
1 | import pandas as pd |
Surprise
설치
1 | !pip install surprise |
Surprise를 활용하여 예상 별점 예측하기
1 | from surprise import Dataset, Reader, SVD, KNNBasic |
Scikit으로 예상 별점 예측하기
1 | from sklearn.neighbors import KNeighborsRegressor |
plot_knn_regression (mglearn)
1 | import mglearn |
recommendation.pdf 내용 추가
복습시간 19시 10분 ~ 21시 17분 / 총 2시간 7분
2019년 6월 18일 화요일 28th
Surprise vs Scikit
차이점 2가지
1 | 1. Train_test_split |
1 | Scikit에서는 Train_Test_Split으로 데이터를 나누었지만 Surprise에서는 Fold로 랜덤하게 쪼개준다. |
Surprise 예제
1 | import pandas as pd |
os vs sys
os는 파일관련 처리할 때 사용하고 운영체제 내 폴더파일을 다룰때도 사용한다.
참고로 os는 위험한애임..
sys는 파이썬 관점에서 경로를 확인할때 등에 사용되는 모듈 이다.
자세한건 더 공부하면서 추가해보자.
1 | import os |
Validation_curve
GridSearchCV로 하이퍼 파라미터를 찾을때 같이 사용함으로써 적절한 하이퍼 파라미터를 찾기 위해 참고하면 좋다.
1 | from sklearn.model_selection import validation_curve |
Statsmodel로 regression분석하기
Linear regression 분석은 머신러닝에서 해설분야를 담당하고 예측하는데 쓰지는 않는다.
R방식
설치
1 | !pip install statsmodels |
예제
1 | import numpy as np |
results summary
results2 summary
Python 방식
1 | import numpy as np |
복습시간 19시 ~ 22시 / 총 3시간
2019년 6월 19일 수요일 29th
버전관리 2가지 방법
1 | 1. version-information |
version-information
1 | # 설치 방법 |
watermark 방식보다 이쁘게 나온다
watermark
1 | %load_ext watermark |
version_information은 한글이 깨지지만 watermark는 한글도 지원한다
Feature-selection
pre-processing의 일종으로 column을 줄여야겠다는 판단이 들었을때 하는 전처리.
성능을 높이기 위한 전처리로, 연산 속도를 향상 시키는 방법으로 사용한다.
이때 정확도 성능을 낮추지 않는 선에서 feature-selection을 진행한다.
3가지 방식
1 | 1. Filter |
Filter
통계값을 보고 경험적으로 도메인 지식을 통해 column을 걸러낸다.
예시
1 | from sklearn.datasets import load_boston |
AGE column을 걸러냈을 때와 걸러내기 전의 정확도가 같기 때문에 age는 영향력이 없는 column!
따라서 빼도 되는 feature!
wrapper
통계값과 머신러닝 기법을 동시에 사용하여 기준을 두고 ranking을 구해 n개 column 뽑는 방법.
1 | from sklearn.feature_selection import RFE |
Embeded
알고리즘으로 자동으로 영향력이 어느 정도인가 분류 해주는 방법.
1 | from sklearn.tree import DecisionTreeClassifier |
Ensemble
여러가지 알고리즘을 동시에 사용하여 최적의 성능을 낼수 있는 알고리즘을 생성한다
RandomForest
랜덤포레스트는 분류, 회귀 분석 등에 사용되는 앙상블 학습 방법의 일종으로,
훈련 과정에서 구성한 다수의 결정 트리로부터 분류 또는 평균 예측치를 출력함으로써 동작한다.
성능이 좋고 overfitting이 잘 안일어난다.
1 | from sklearn.ensemble import RandomForestClassifier |
MLxtend
설치
1 | !pip install mlxtend |
Staking
Data부터 Model 학습까지
Cross-validate 3가지
1 | 1. Cross_val_score |
Fit_transform 하는 3가지
1 | 1. pre-processing |
Column 줄이는 3가지 방법
1 | 1. filter |
복습시간 18시 45분 ~ 22시 20분 / 총 3시간 35분