본문 바로가기

ML with SckitLearn

(24)
심장질환 발병 예측하기 - SVM, K Nearset Neighbour, ANN Multilayer Perceptron 세 가지 다른 ML 알고리즘을 사용하여 관상 동맥 심장 질환을 예측하는 예시를 보겠습니다. SVM(서포트 벡터 머신), KNN(최근접-K), ANN(ANN Multilayer Perceptron)를 통해 어떤 모델이 최선의 접근인지에 대해 알아보겠습니다. ● Data Description 데이터 출처는 남아프리카 심장병 데이터 Set을 사용합니다. : https://www.openml.org/d/1498 OpenML OpenML: exploring machine learning better, together. An open science platform for machine learning. www.openml.org 데이타 속성은 다음의 10가지를 사용합니다. Systolic blood pressure..
Kmeans의 K값을 정하는 기준 : Elbow Method, Silhouette Score(실루엣 스코어) K-means 알고리즘의 적정의 K값을 선택하는 어려움이 있습니다. 다양한 방법으로 최적의 K를 구하는 방법이 있습니다. 이 중 가장 보편적으로 사용하는 Elbow Method, Silhouette Score에 대해 알아보겠습니다. Elbow Method 가장 보편적으로 이용되는 방법으로 클러스터 내의 총 변동을 설명하는 WCSS(Within Clusters Sum of Squares)를 이용합니다. WCSS= ∑Pi in Cluster1 distance (Pi C1)2 +∑Pi in Cluster2distance (Pi C2)2+∑Pi in CLuster3 distance (Pi C3)2 다음의 방법으로 이용합니다. 1. 사용하고자 하는 클러스터 범위를 지정한다. 2. 각 클러스터를 WCSS방법으로 계..
데이터 전처리하기 : 레이블 인코딩 (Label Encoding), 원-핫 인코딩(One-Hot Encoding), get_dummies()를 Pandas에서 사용하기 데이터 전처리(Data Processing)는 ML알고리즘만큼 중요합니다. ML 알고리즘을 데이터에 기반하고 있기 때문에 어떤 데이터를 입력으로 가지느냐에 따라 결과도 크게 달라질 수 있습니다. (Garbage In, Garbage Out) 기본적으로 결손값, 즉 NaN, Null 값은 허용되지 않습니다. 따라서 이러한 Null 값은 고정된 다른 값으로 변환해야 합니다. Null 값을 어떻게 처리해야 할지는 경우에 따라 다릅니다. 피처 값 중 Null 값이 얼마 되지 않는다면 피처의 평균값 등으로 간단히 대체할 수 있습니다. 하지만 Null 값이 대부분이라면 오히려 해당 피처는 Drop 하는 것이 좋습니다. 가장 결정이 힘든 부분이 Null값이 일정 수준 이상 되는 경우입니다. 정확히 몇 퍼센트까지를 일..
K-Means 알고리즘의 원리와 이해 한판에 배워보기 K-Means 클러스터링은 머신러닝에서는 가장 대중적인 비지도학습(Unsupervised) 클러스터링 방법 중 하나입니다. 각 데이타그룹의 중심점에 대표되는 K숫자를 정의하는 것으로 각 클러스터의 중심점을 대표하는 중심점을 찾는 방법입니다. 이 중심점이 바로 Centroid입니다. Python에서 K-Means가 작동하는 방법에 대해 알아보겠습니다. 실전에서도 바로 사용이 가능합니다. 1. K-Means 알고리즘 작동 방식 데이터를 처리하기 위해 K-Means 알고리즘은 모든 클러스터의 데이타를 무작위로 선택하여 중심점이 되는 데이타를 구한 후 반복 계산을 통해 중심 위치를 최적화하는 방식을 취합니다. 이 중심점이 안정화되었다고 하면 더이상 클러스터링을 할 수 없다고 판단하고 다른 중심점을 임의적으로 선..
머신러닝, 클러스터 가우시안 가상데이터 생성하는 make_blobs를 이용한 K-means 실습 (Elbow Method 사용) make_blobs 함수는 가우시안 정규분포를 이용해 가상 데이터를 생성합니다. make_blobs는 일반적으로 클러스링 가상데이터를 생성하는데 사용합니다. 클러스터 알고리즘인 K-Means의 실습을 편하게 하기 위해 사용하면 도움이 됩니다. make_blobs 함수의 인수와 반환값은 다음과 같다. Input Parameter n_samples : 표본 데이터의 수, 디폴트 100 n_features : 독립 변수의 수, 디폴트 20 centers : 생성할 클러스터의 수 혹은 중심, [n_centers, n_features] 크기의 배열. 디폴트 3 cluster_std: 클러스터의 표준 편차, 디폴트 1.0 center_box: 생성할 클러스터의 바운딩 박스(bounding box), 디폴트 (-10..
Light GBM(LGBM)의 개요와 파라미터 정의에 대해 LightGBM(LGBM) 개요? Light GBM은 Kaggle 데이터 분석 경진대회에서 우승한 많은 Tree기반 머신러닝 알고리즘에서 XGBoost와 함께 사용되어진것이 알려지며 더욱 유명해지게 되었습니다. GMB(Gradient Boosting Machine) 이란? 틀린부분에 가중치를 더하면서 진행하는 알고리즘 Gradient Boosting 프레임워크로 Tree기반 학습 알고리즘입니다. 기존의 다른 Tree기반 알고리즘과 다른점은 Tree구조가 수평적으로 확장하는 다른 Tree기반 알고리즘에 비해 수직적으로 확장을 하는것에 있습니다. 즉, Light GBM은 leaf-wise인 반면 다른 알고리즘은 level-wise입니다. leaf-wise의 장점은 속도가 빠르다는 것이 가장 큰 장점입니다. ..
Faiss를 이용한 K-means구현 [사이킷런에 비해 8X 빠르고, 27X 적은 에러 구현] 페이스북에서 대용량 벡터(Vectoer)의 유사도(Similarity)검색을 위한 오픈소스 Faiss를 공개하였는데요. SIFT데이터셋을 사용하여 데이터가 10만개일 때는 쿼리 속도가 20ug로 종전의 최고 성능과 유사하지만 데이터가 10억개일 때는 17.7us로 종전 최고 성능보다 8배 정보 빠르게 구현할 수 있다고 합니다. 아쉽게도 현재 Linux와 OSX(Mac)만을 지원하고 있습니다. Faiss을 통해 K-Means를 빠르게 단 몇줄의 코딩으로 구현을 할 수 있게 됩니다. faiss library를 설치합니다. faiss가 포함된 k-means는 일반적인 Scikit-Learn에 비해 매우 빠르게 실행이 됩니다. import numpy as np import faiss class FaissKMea..
로지스틱 회귀 : Logistic Regression, 시그모이드(sigmoid)를 이용한 분류 회귀 로지스틱 회귀는 선형 회귀 방식을 분류에 적용한 알고리즘입니다. 즉, 로지스틱 회귀는 분류에 사용됩니다. 로지스틱 회귀 역시 선형 회귀 계열입니다. 회귀가 선형인가 비선형인가는 독립변수가 아닌 가중치(weight) 변수가 선형인지 아닌지를 따릅니다. 로지스틱 회귀가 선형 회귀와 다른 점은 학습을 통해 선형 함수의 회귀 최적선을 찾는 것이 아니라 시그모이드(Sigmoid) 함수 최적선을 찾고 이 시그모이드 함수의 반환 값의 확률에 따라 분류를 결정한다는 것입니다. 많은 자연, 사회 현상에서 특정 변수의 확률 값은 선형이 아니라 위의 시그모이드 함수와 같이 S자 커브 형태를 가지게 됩니다. 만약 1이 Yes이고 0이 No를 나타내는 데이타값이 있다면 회귀를 적용하면 데이터가 모여 있는 곳으로 선형 회귀 선을..
라쏘 / 엘라스틱넷 회귀 : Lasso / ElasticNet Model 이란? Scikit Learn에서의 실습 라쏘 회귀 : Lasso Model W의 절댓값에 페널티를 부여하는 L1규제를 선형 회귀에 적용한 것이 라쏘(Lasso)회귀입니다. 즉 L1규제는 alpha*||W||를 의미합니다. Lasso 또한 비용 함수를 최소화하는 W를 찾는 것을 의미합니다. L2규제가 회귀 계수의 크기를 감소시키는 데 반해, L1규제는 불필요한 회귀 계수를 급격하게 감소시켜 0으로 만들고 제거합니다. 이러한 의미에서 L1규제는 적절한 Feature만 회귀에 포함시키는 Feature선택의 특성을 가지고 있습니다. 코드의 get_linear_reg_eval함수는 회귀값을 쉽게 구하기 위한 공통 함수이며 GitHub에서 찾을 수 있습니다. Lasso클래스의 주요 생성 파라미터는 alpha이며, 이는 라쏘 회귀의 alpha L1규제 계..
릿지 회귀 : Ridge Model 이란? Scikit Learn에서의 실습 릿지 회귀 : Ridge Model 사이킷런에서의 Ridge 클래스의 주요 생성 파라미터는 alpha이며, 릿지 회귀의 alpha L2규제 계수에 해당합니다. from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from sklearn.model_selection import cross_val_score from sklearn.datasets import load_boston from sklearn.linear_model import Ridge import matplotlib.pyplot as plt import seaborn as sns import pandas as pd import ..
Regulation(규제) 선형 모델에 대한 개요 - 릿지(Ridge), 라쏘(Lasso), 엘라스틱(Elastic Net) 규제 선형 모델의 개요 좋은 머신러닝 회귀 모델은 적절히 데이터에 적합하면서도 회귀 계수가 기하급수적으로 커지는 것을 제어할 수 있어야 합니다. 이전까지 선형 모델의 비용 함수는 RSS를 최소화하는, 즉 실제 값과 예측값의 차이를 최소화하는 것만 고려했습니다. 그러다 보니 학습 데이터에 지나치게 맞추게 되고, 회귀 계수가 쉽게 커지게 되는 경향이 있습니다. 이럴 경우 변동성이 오히려 심해져도 테스트 데이터 세트에서는 예측 성능이 저하되기 쉽습니다. 이를 반영해 비용 함수는 학습 데이터의 잔차 오류 값을 최소화하는 RSS최소화 방법과 과적합을 방지하기 위해 회귀 계수 값이 커지지 않도록 하는 방법이 서로 균형을 이뤄야 합니다. 결론적으로 회귀 계수의 크기를 제어해 과적합을 개선하려면 비용(Cost) 함수의..
train_test_split()의 사용과 교차 검증 cross_val_score 이용하기 train_test_split() train_test_split()은 데이터 세트를 학습 데이터와 테스트 데이터로 분리할 때 사용하는 함수입니다. from sklearn.model_selection import train_test_split from sklearn.datasets import load_iris from sklearn.model_selection import cross_val_score import pandas as pd import numpy as np iris = load_iris() iris_data = iris.data iris_label = iris.taget X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_..
선형 회귀 분석 - LinearRegression 및 보스턴 주택 가격 회귀 구현 LinearRegression 선형 회귀 분석 - LinearRegression LinearRegression 클래스는 예측값과 실제 값의 RSS(Residual Sum of Squares)를 최소화해 OLS(Ordinary Least Squares)추정 방식으로 구현한 클래스입니다. OLS기반의 회귀 계수 계산은 입력 피처의 독립성에 많은 영향을 받습니다. 피처간의 상관관계가 매우 높은 경우 분산이 매우 커져서 오류에 매우 민감해집니다. 이러한 현상을 다중공선정(Multi-Collinearity)문제라고 합니다. 일반적으로 상관관계가 높은 피처가 많은 경우 독립적인 중요한 피처만 제거하거나 규제를 적용합니다. 또한 매우 많은 피처가 다중 공전성 문제를 가지고 있다면 PCA를 통해 차원 축소를 수행하는 ..
머신러닝에서의 회귀 분석 : 소개, 단순선형회귀, 경사 하강법 회귀 소개 회귀 분석은 데이터 값이 평균과 같은 일정한 값으로 돌아가려는 경향을 이용한 통계학 기법입니다. 통계학 용어를 빌리자면 회귀는 여러 개의 독립변수와 한 개의 종속변수 간의 상관관계를 모델링하는 기법을 통칭합니다. 예를 들어 아파트의 방 개수, 방 크기, 주변 학군 등 여러 개의 독립변수에 따라 아파트 가격이라는 종속변수가 어떤 관계를 나타내는지를 모델링하고 예측하는 것입니다. 독립변수의 값에 영향을 미치는 것을 회귀 계수(Regression Coefficients)라고 합니다. 머신러닝 관점에서 보면 독립변수는 Feature에 해당되며 종속변수는 결정 값입니다. 머신러닝 회귀 예측의 핵심은 주어진 피처와 결정 값 데이터 기반에서 학습을 통해 최적의 회귀 계수를 찾아낸 것입니다. 회귀는 회귀 계..
StandardScaler : 피처스케일링 정규화 서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업을 피처 스케일링(Feature Scaling)이라고 합니다. 대표적인 방법으로 표준화(Standardization)와 정규화(Normaliaztion)가 있습니다. 사이킷런에서 제공하는 대표적인 피처 스케일링 클래스에는 StandardScaler와 MinMaxScler가 있습니다. StandarScaler는 개별 Feature를 평균이 0이고, 분산이 1인 값으로 변환해줍니다. 가우시안 정규 분포를 가질 수 있도록 데이터를 변환하는 것은 몇 알고리즘에서는 매우 중요합니다. 특히 서포트 벡터 머신(Support Vector Machine)이나 선형 회귀(Linear Regression), 로지스틱 회귀(Logistic Regression)는 데이터가..
온라인쇼핑몰을 위한 RFM Segmentation 실전 연습 온라인 판매 데이터를 기반으로 고객 세그멘테이션을 군집화 기반으로 수행해 보겠습니다. 하기 페이지에서 Data Folder를 클릭 후 엑셀 데이터 DataSet을 다운로드합니다. 이 데이터는 541만 Row의 데이터로 RFM Segmentation 실습을 하기에 좋습니다. archive.ics.uci.edu/ml/datasets/online+retail# UCI Machine Learning Repository: Online Retail Data Set Online Retail Data Set Download: Data Folder, Data Set Description Abstract: This is a transnational data set which contains all the transacti..