머신 러닝 입문 #1-머신러닝 소개와 knn 소개
TRANSCRIPT
머신러닝#1
조대협
머신러닝 기본 개념 잡기
• 지도 학습 (Supervised Learning)
• 비지도 학습 (Un supervised learning)
지도 학습의 문제 유형별 분류
• Regression problem vs Classification problem
Regression problem Classification probelm
• 값에 대한 예측이 목적 • 값을 기반으로 선택
지도 학습과 비지도 학습의 차이
• 지도 학습 : 데이타가 라벨링 되어 있음.
• 비지도 학습 : 데이타가 라벨링 되어 있지 않음 (군집화등에 사용됨)
머신 러닝 주요 알고리즘
• 지도 학습– Classification
• kNN
• Naïve Bayes
• Support Vector machine
• Decision tree
– Regression• Linear regression
• Locally weighted linear regression
• Ridge
• Lasso
• 비지도 학습– Clustering
– K means
– Density estimation
– Expection maximization
– Pazen window
– DBSCAN
머신 러닝 프레임웍에서 지원되는 알고리즘
• Mahout http://mahout.apache.org/users/basics/algorithms.html– Classification
• Naïve Bayes, Hidden Markov Models, Logistic regression, Random Forest
– Clustering• k-Means,Canpoy,Fuzzy k-Means,Streaming Kmeans,Spectral clustering
• Spark https://spark.apache.org/docs/1.1.0/mllib-guide.html– Classification and regression
• Linear models (SVM, Logistic regression, linear regression), decision tree, Naïve Bayes
– Clustering• k-means
– Collaborative filtering• alternating least squares (ALS)
• Microsft Azure ML http://azure.microsoft.com/ko-kr/documentation/articles/machine-learning-algorithm-choice/– Clustering
• K means
– Classification• Decision Tree,SVM (Support Vector Machines),Naïve Bayes
– Regression• Bayesian linear regression, Boosted decision tree regression, decision forest regression,linear regression, neural
network regression, ordinal regression, poisson regression
머신 러닝의 기본 단계
1. 데이타 수집
2. 입력 데이타 준비 (데이타 크린징)
3. 데이타 분석 (데이타 관찰. 인사이트 찾아내기)
4. 알고리즘 선택/훈련
5. 알고리즘 테스트 (검증)
6. 사용하기 (운영 배포)
kNN 알고리즘
• k Nearest neighbors 알고리즘
– 학습 데이타 중 가장 유사한 k개의 데이타를 이용해서 값을 예측 하는 방법
– 유클리드 거리 측정법을 사용함
초록색 : 유클리디안 거리 출처: http://www.nicklib.com/algorithm/1662
kNN 예제
• 발차기와, 키스라는 항목으로, ? 대상의 유형을 유추
발차기
키스
로맨스
액션
?
?(예측하고자 하는) 항목과 가장 거리가 가까운 항목의 “유형(라벨)”로 유출 영화,쇼핑몰등 추천 시스템에 사용
kNN 코드
def classify0(inX, dataSet, labels, k):dataSetSize = dataSet.shape[0]diffMat = tile(inX, (dataSetSize,1)) - dataSetsqDiffMat = diffMat**2sqDistances = sqDiffMat.sum(axis=1)distances = sqDistances**0.5sortedDistIndicies = distances.argsort()classCount={}for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)return sortedClassCount[0][0]
• intX : 행렬, Label을 예측하고자 하는 값.• dataSet : 행렬, 학습에 사용되는 데이타• label : 행렬 (1열 행렬), 학습에 사용되는 데이타의 라벨• k : 결과로 몇개의 이웃을 추출할지 정의 (3개면, 최근접 라벨 3개만 출력됨)
dataSet labels
inX
kNN 코드에 사용되는 수학 함수
• import numpy : 수학함수 라이브러리
• 설치 : 방화벽 제약을 피하기 위해 패키지로 설치아나콘다 : http://continuum.io/downloads
kNN 코드 해석
inX = {1,1}
tile(intX, (4,1)) =
1,11,11,11,1
1,1.11,10,00,0.1
dataSet =
tile(intX, (4,1))-dataSet =
0.-0.10,01,11,0.9
(tile(intX, (4,1))-dataSet)**2 =
0.0.010,01,11,0.81각 항목을 제곱함
sum(tile(intX, (4,1))-dataSet)**2,axis=1) =
가로로 더함. (axis=0이면 세로로 더함)
{0.01, 0. , 2. , 1.81}
sum(tile(intX, (4,1))-dataSet)**2,axis=1) **0.5 =
값에 루트
{0.1 , 0. , 1.41421356, 1.3453624}
정규화
• 정규화란 Attribute 값을 을 0<x<N로 정규화 (사상) 하는 것
• 각 Attribute의 단위가 다르기 때문에, 유크리드 거리를 계산할때, 단위가 큰 값만 반영이 되는 문제를 해결하기 위함
Plot
• 그래프 라이브러리
• matplotlib
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(datingDataMat[:,1],datingDataMat[:,2])
plt.show()
http://matplotlib.org/1.4.1/users/pyplot_tutorial.html
검사 (검증)
• 90%의 데이타로 학습, 10% 데이타로 검증
• 10% 데이타는 무작위로 선택 (앞의 10% 또는 뒤의 10%)
• 오류율
– 0 : 오류 없음
– 1 : 100% 다 오류
토론
• 왜 행렬을 사용하는 것인가?
• 실제 운영 환경에서 데이타가 100만개라면, 일일이 값을 예측할때 마다 100만개와 비교 하는 계산을 해야 하는가?