2장_05_LinearSVM 선형 서포트벡터 머신 (Linear SVM)¶ SVM 은 클래스를 구분하는 분류 문제에서, 각 클래스를 잘 구분하는 선을 그어주는 방식이다. 아래의 그림들을 보면 SVM 이 직관적이라는 것을 알 수 있다. 두 클래스의 가운데 선을 그어주게 된다. 가장 가까이 있는 점들과의 거리가 가장 큰 직선을 찾는다. 이때 가장 가까이 있는 점들을 Support Vector 라고 하고, 찾은 직선과 서포트벡터 사이의 거리를 최대 마진(margin) 이라 한다. 결국 마진을 최대로 하는 서포트벡터와 직선을 찾는 것이 목표이다. SVM 에 대한 상세한 설명은 뒤에서 다루겠다. 참고 자료 : https://en.wikipedia.org/wiki/Support_vector_machine https..
subway 분석 In [1]: import numpy as np import matplotlib.pyplot as plt In [33]: f = open('CARD_SUBWAY_MONTH_201901.csv', encoding='utf-8') head = f.readline() data=[] for line in f: l = line.strip().split(',') l2 = [i.strip('"') for i in l] l2[0]=int(l2[0]) l2[2]=int(l2[2]) l2[4]=int(l2[4]) l2[5]=int(l2[5]) l2[6]=int(l2[6]) l2.append(l2[0]//10000) l2.append((l2[0]//100)%100) # l2[0]%10000//100 l2...
2019.02.27 선형회귀 선형회귀 (Linear Regression)¶ 회귀는 데이터가 주어졌을 때, 실수값인 타겟값(또는 목표값)을 예측하는 방법이다. 나이 성별 키 몸무계 35 남 175 67 ... ... ... ... 27 여 163 52 위와 같은 데이터가 주어졌을 때, 키(데이터)에 따른 몸무계(타겟값)를 예측하는 것은 회귀 문제이다. 회귀 중에서도, 직선 또는 곧은 평면(굽은 평면이 아님)으로 타겟값을 예측하는 것을 선형회귀 라고 한다. 아래 그림에서 직선으로 예측한 경우에 해당한다. 속성이 하나 뿐일 때는 위와 같이 직선으로 표현할 수 있지만 속성이 2개일 때는 곧은 평면, 3개 이상에서는 초평면으로 표현한다. 선형회귀에서 굳이 타겟값을 별도로 구분했지만, 다르게 표현하면 타겟값을 포함..
와인 분석 와인 데이터 테스트¶ k-NN 적용¶ In [1]: import numpy as np import matplotlib.pyplot as plt In [2]: wine = np.loadtxt('winequality-red.csv', skiprows=1, delimiter=';') In [3]: wine.shape Out[3]: (1599, 12) In [4]: wine[:100,-1] Out[4]: array([5., 5., 5., 6., 5., 5., 5., 7., 7., 5., 5., 5., 5., 5., 5., 5., 7., 5., 4., 6., 6., 5., 5., 5., 6., 5., 5., 5., 5., 6., 5., 6., 5., 6., 5., 6., 6., 7., 4., 5., 5..
회귀는 근사 : 속성에 대해서 타겟값에 근사하는 직선을 그음 분류는 구분 : 속성에 대해서 타겟값을 분류하는 직선을 그음(클래스를 구분) sklearn 적용 기본틀¶ Iris 데이터 불러오기¶ In [2]: import numpy as np from sklearn.datasets import load_iris iris = load_iris() 학습용/테스트용 데이터 분리¶ In [46]: from sklearn.model_selection import train_test_split col1 = 3 col2 = 0 X = iris.data[:,[col1, col2]] y = iris.target X_train, X_test, y_train, y_test = train_test_split(X, y) 모델선정..
Numpy를 활용한 수치근사법 예제¶ 회귀와 분류를 구분해서 설명해보자. In [1]: %pylab inline import numpy as np import matplotlib.pyplot as plt Populating the interactive namespace from numpy and matplotlib sklearn 의 make_blobs 함수를 사용¶ In [2]: from sklearn.datasets import make_blobs In [3]: data, label = make_blobs(n_samples=500, centers=[[0,0]]) In [4]: plt.hlines([0],-10,10,linestyles='dotted') plt.vlines([0],-10,1..
2장_03_kNN k-NN 분류 (최근접 이웃)¶ k-NN 은 대표적인 분류 알고리즘 중의 하나이다. k-NN 에서 NN 은 Nearest Neighbors 즉, 가장 가까운 점들이라는 의미이며, k 는 가장 가까운 이웃의 갯수를 의미한다. 예측하려고 하는 점 주위에 가장 가까이 있는 점들의 타겟값(클래스) 를 비교하여 해당 클래스를 판정한다. 주의 : 가깝다 멀다를 평가하는 지표를 거리(distance) 라고 한다. 거리를 어떻게 측정하느냐에 따라 다양한 방식을 적용할 수 있다. 하지만 일반적으로는 좌표상의 거리로 생각하자. 참고 : scikit-learn 메뉴얼 http://scikit-learn.org/stable/modules/neighbors.html wekipedia https://en.wik..
지도학습 개요¶ 기본 개념¶ 지도학습(supervised learning)은 샘플 데이터가 있고, 각 샘플마다 레이블(타겟값 혹은 목표값)이 지정되어 있는 학습 방법이다. 기존에 가지고 있는 데이터와 레이블을 가지고 학습을 하고 나면, 새로운 샘플 데이터에 대해 레이블을 예측할 수 있다. 레이블이 연속적이거나 실수값인 경우는 회귀(regression) 문제가 되고, 레이블이 예/아니오, 고양이/개/원숭이 와 같이 여러 클래스 중에 하나인 경우를 분류(classification) 문제라고 한다. 분류의 경우에 예/아니오 와 같이 둘 중에 하나를 예측하는 것을 이진 분류 라고 하고, 고양이/개/원숭이 와 같이 셋 이상의 클래스를 구분하는 것을 다중 분류 라고 한다. 중요한 것은 새로운 데이터에 대해 잘 예측..