School/데이터사이언스개론 11

알고리즘-2

kNN Classification (k-근접이웃 분류) 새로운 데이터 점이 주어지면, 주변에서 가장 가까운(유사한) k개의 점들의 클래스를 보고 판단하는 방법 kNN 분류 알고리즘 1. 주어진 모든 점들과 테스트 포인트 간의 유사도 or 거리 (𝑑(𝐱, 𝐱𝑖 )) 계산 2. 가장 가까운 점 k개를 찾고 레이블 읽기 3. k개 점들의 클래스 중 가장 빈도가 높은 클래스를 테스트 포인트의 클래스로 지정 k값의 선택 big k small k 의사결정 경계가 smooth 해짐 -> 잘 분류를 못함 -> 과소적합 상태와 유사함 -> bias 증가, variance 감소 계산시간 증가 의사결정 경계가 복잡 -> 과적합 상태와 유사함 -> bias 감소, variance 증가 이상치에 매우 민감 * bias : 편향..

알고리즘-1

알고리즘이란 ? 어떤 과제를 완수하기 위한 절차/단계/규칙 머신러닝 알고리즘? 예측, 분류, 군집화. 차원축소 등에 이용 분류문제 혹은 예측문제 선형 회귀 알고리즘 k-근접이웃 알고리즘 k-평균 알고리즘 지도학습, 예측 지도학습, 분류 비지도학습, 군집화 선형회귀 과적합과 미적합 용어 과적합 미적합 설명 모델이 학습 데이터에 대해서는 좋은 성능을 보이지만, 처음 보는 새로운 데이터에 대해서는 성능이 나빠지는 현상 (잘 일반화되지 않는 현상) 모델이 너무 단순해서 학습데이터조차 부적합 발생원인 학습 데이터 양과 노이즈 정도에 비해 모델의 복잡도가 너무 클 때 모델의 복잡도에 비해 데이터가 너무 적을 때 학습 데이터를 기억하기 시작함 - 해결책 데이터를 더 수집 더 단순한 모델 사용 데이터 특성 수 줄이기 ..

Scatterplot Matrix / heatmap

Scatterplot Matrix 여러 변수들 간의 관계를 한눈에 파악하기 매우 유용 seaborn 의 pairplot 이용해서 기능 사용 가능 내장 데이터셋인 "penguins" 사용해서 실습해보자 ! # seaborn 불러오기 import seaborn as sns # 데이터파일 읽어들이고(load_dataset) 상위 5개 데이터 확인(head) df_penguin = sns.load_dataset("penguins") df_penguin.head() # 단순 scatterplot : pairplot 이용 sns.pairplot(df_penguin) # species 별로 색을 다르게 : hue 이용 sns.pairplot(df_penguin, hue="species") # 대각선 셀에는 히스토그램..

Quantile-Quantile Plot(Q-Q plot)

Q-Q plot 한 데이터셋의 quantile 값들을 또 다른 데이터셋의 quantile 값들에 대해 도표화 한 것 한 쪽 축에 이론적 분포의 quantile 을 이용한다면 probability plot 과 유사 두 데이터셋이 동일한 분포의 모집단에서 표집된 것인지 확인하는 도구 + 두 데이터셋이 동일한 위치와 변동성을 갖는지, 유사한 형태의 분포를 갖는지, 꼬리부분의 특성이 유사한지 확인 가능 장점 데이터셋의 크기가 동일할 필요가 없음 분포의 여러 측면을 동시에 확인할 수 있음 - 위치의 이동 - 변동성의 이동 - 대칭성의 변화 - 이상치 존재 Quantile 계산방법 정렬된 x 값을 0.5/n, 1.5/n, ... , (n-0.5)/n quantile 에 할당 각 계산값이 x값에 대응하는 quanti..

Bihistogram

공학적 변경을 적용하기 이전과 이후에 위치, 변동성, 분포 변화를 평가하는 도구 분포의 모든 특징이 그림 하나에서 나타남 ex) 2개의 히스토그램을 병치 - 수평축 위 : 조건 1에 대한 반응변수의 히스토그램 - 수평축 아래 : 조건 2에 대한 반응변수의 히스토그램 조건을 바꿨을때의 변화를 보며 인자가 유의한지, 영향이 있는지 두 하부집단간 위치/변동성/분포 변화가 있는지 ## code import pandas as pd import seaborn as sns import matplotlib as plt ceramics = pd.read_csv('/content/ceramics.csv', delim_whitespace = True) ceramics.head() # 2개 겹쳐그리기 : histoplot 1..

Box Plot

Box Plot 여러 다른 데이터 그룹 간 위치 및 변동 변화를 감지할 수 있게 해주는 도구 중앙값, 대칭성, 분산, 왜도, 이상치 에 대한 정보를 제공 수평축 : 인자 / 수직축 : 반응변수 위치/변동에 대해 인자가 유의한 영향을 주는지 판단 가능 분포별 boxplot 의 형태 변화 Code seaborn 의 boxplot 이용해서 그림 import seaborn as sns tips = sns.load_dataset("tips") tips.head() # x값에 할당하면 세로형, y값에 할당하면 가로형 sns.boxplot(x=tips["total_bill"]) sns.boxplot(y=tips["total_bill"]) # orient : boxplot 이 그려지는 방향 / 가로형 boxplot 은..

Scatter Plot

Scatter Plot 두 변수의 상관관계 또는 연관성을 보여줌 code ex) # 데이터: 1,599 samples from Wine Quality Dataset (winequality-red.csv) ● Code Snippet: sns.scatterplot(data=df_red, x="fixed acidity", y="density") sns.regplot(data=df_red, x="fixed acidity", y="density") Q : 변수간 상관관계, (비)선형관계, y의 변동이 x에 종속적인지, 이상치가 존재하는지 산점도의 여러 패턴 * 이분산성 문제의 처리 노이즈가 많은 데이터에 대한 가중치를 낮게 처리하거나 등분산성을 갖도록 y변수 변환 ** 이분산성을 무시할 경우 이분산성을 무시하고 ..

Histogram

Histogram 단일변수 데이터 분포에 대한 요약적 정보를 그래픽하게 보여줌 데이터 중앙(위치), 데이터 퍼짐(범위), 데이터 왜도, 이상치 존재여부, 최빈값 존재여부 등 적절한 분포 모델에 대한 강력한 힌트 Histogram 그리는 법 데이터 값 범위를 일정 크기의 구간(혹은 클래스)으로 나눔 각 구간에 포함되는 데이터 점들의 수를 집계 수직축 : 빈도 / 수평축 : 반응변수 히스토그램의 변형 - 누적히스토그램 - 정규히스토그램 정규화 방법 1) 각 클래스(bin)의 수/전체 데이터수 -> 전체 빈도(높이) 합 = 1 2) 각 클래스(bin)의 수/ 전체 데이터 수 * 구간 크기 -> 전체 면적 합 = 1 code ex) #데이터: 195 samples in zarr13.csv df_zarr = pd..

Run Sequence Plot / Lag Plot

Run Sequence Plot 데이터를 관측시간 순서대로 표시하는 그래프 Q : 위치의 이동이 있는지 / 척도(변동성)의 이동이 있는지 / 이상치가 존재하는지 code ex) #데이터: 50 samples in mavro.csv df_mavro = pd.read_csv(PATH+'mavro.csv') df_mavro['Index'] = df_mavro.index sns.lineplot(x='Index', y="Transmittance", data=df_mavro) sns.scatterplot(x='Index', y="Transmittance", data=df_mavro) Lag Plot 데이터셋 또는 시계열이 랜덤인지 아닌지 검사 랜덤인 데이터에서는 눈에 띄는 구조가 없어야 함 수직축: 𝑌𝑖 for a..

Probability Plot / Normal Probability Plot

Probability Plot 4가지 기본 가정 중 고정분포 가정 테스트에 이용 데이터셋이 근사적으로 주어진 분포를 따르는지에 대한 가정을 검사하기 위해 사용하는 Plot 이론상 분포에 대해 데이터를 그리고, 그림이 직선에 가까우면 데이터가 근사적으로 그 분포를 따름 직선 형태에서 멀어질수록 특정 분포의 모양과 데이터의 모양이 다르다는 뜻 ex) weibull 분포를 따르는 데이터셋 rv_weibull = stats.weibull_min.rvs(1.5, size=10000) sns.histplot(rv_weibull, bins=50, stat='density', kde=True) stats.probplot(rv_weibull, dist=stats.weibull_min, sparams=(1.5),plot=..