Skip to content

Latest commit

 

History

History
357 lines (302 loc) · 10.4 KB

220523.md

File metadata and controls

357 lines (302 loc) · 10.4 KB

브레트 란츠의 Machine Learning with R을 정리한 내용

기계의 학습 과정

학습과정

  1. 데이터 저장소
    • 관찰, 기억, 회상을 활용해 향후 추론을 위한 사실적 기반을 제공
  2. 추상화
    • 저장된 데이터를 넓은 표현과 개념으로 변환
  3. 일반화
    • 추상화된 데이터를 이용해 지식과 추론을 생성함으로써 새로운 상황에서 실행을 하게 만듦
  4. 평가
    • 학습된 지식의 효율성을 측정하고 잠재적인 개선 사항을 알려주는 피드백 메커니즘을 제공

노이즈

  • 데이터에서 설명되지 않거나 설명할 수 없는 변형을 지칭하는 용어
  • 노이즈를 모델링하려는 시도는 과적합 문제의 원인이 됨

실전 머신러닝

단계

  1. 데이터 수집
    • 알고리즘이 실행 가능한 지식을 생성하고자 사용할 학습 자료를 수집
  2. 데이터 탐색과 준비
    • 데이터 전처리
  3. 모델 훈련
  4. 모델 평가
  5. 모델 개선

입력 데이터 형식

머신러닝에는 가용한 학습 알고리즘의 편향에 입력 데이터의 특성을 맞추는 작업이 포함

관측 단위

  • 연구를 위해 관심 있는 측정 속성을 가진 가장 작은 개체

예시

  • 속성이 기록돼 있는 관측 단위의 인스턴스

특징

  • 학습에 유용할 수 있는 예시의 기록된 특성이나 속성

사례

  • 스팸 이메일을 식별하는 학습 알고리즘
  • 관측 단위는 이메일 메시지
  • 예시는 특정 메시지
  • 특징은 메시지에 사용된 단어

데이터셋의 특징

  • 수치(numeric)
    • 숫자로 측정됨
  • 범주(categorical) or 명목(nominal)
    • 범주의 집합으로 이루어짐
  • 서열(ordinal)
    • 범주 변수의 특별한 경우
    • 서열 목록에 속하는 범주를 갖는 명목 변수
    • 옷의 크기(대, 중, 소), 고객 만족도(전혀 만족하지 않음 ~ 매우 만족)

머신러닝 알고리즘 형식

예측 모델

  • 데이터셋의 값을 이요해서 새로운 값을 예측할 때 사용

학습 알고리즘

  • 목표 특징과 다른 특징 간의 관계를 찾고 모델링

지도학습

  • 학습 대상과 학습 방법에 대한 명확한 지침을 주는 예측 모델 훈련 과정

지도학습 알고리즘

  • 데이터셋이 주어지면 모델을 최적화해 목표 출력을 만드는 특징 값의 조합을 찾음

분류

  • 예제가 속하는 범주를 예측하는 지도 머신러닝 작업

서술 모델

  • 새롭고 흥미로운 방식으로 데이터를 요약해서 얻은 통찰로 이들을 얻는 작업에 사용
  • 훈련하는 과정을 비지도학습이라고 함

군집화

  • 데이터셋을 동질 그룹으로 분리하는 서술 모델링 작업

메타학습자

  • 특정 학습 작업에 국한되지 않고 더 효과적으로 '학습하는 방법'을 학습하는데 주력
  • 추가 학습 정보를 위해 과거 학습의 결과를 이용

R 데이터 구조

  • 벡터
  • 팩터
  • 배열
  • 행렬
  • 데이터 프레임

벡터

  • 항목이라고 하는 값의 순서 집합을 저장
  • 항목의 개수 제한 X
  • 모두 같은 형식

팩터

  • 명목 변수의 범주 순서 정보를 가질 수 있어 서열 데이터를 저장하는 편리한 방법 제공
  • 순서 팩터의 경우 논리 테스트가 작동함
symptoms <- factor(c("SEVERE","MILD","MODERATE"),
                   levels=c("MILD","MODERATE","SEVERE"),
                   ordered=T)
symptoms

symptoms > "MODERATE"
> symptoms <- factor(c("SEVERE","MILD","MODERATE"),
+                    levels=c("MILD","MODERATE","SEVERE"),
+                    ordered=T)
> symptoms
[1] SEVERE   MILD     MODERATE
Levels: MILD < MODERATE < SEVERE
> symptoms > "MODERATE"
[1]  TRUE FALSE FALSE

데이터 구조 저장, 로드, 제거

# 저장할 데이터 객체 x, y, z
save(x, y, z, file="mydata.RData")

load("mydata.RData")

# 세션 저장
save.image()

# 현재 메모리에 있는 모든 데이터 구조의 목록 벡터를 반환
ls()

# 객체를 제거 (m과 subject1을 제거)
rm(m, subject1)
rm(list=ls()) # 전체 객체 제거

데이터 구조 탐색

str(usedcars)
> str(usedcars)
'data.frame':	150 obs. of  6 variables:
 $ year        : int  2011 2011 2011 2011 2012 2010 2011 2010 2011 2010 ...
 $ model       : chr  "SEL" "SEL" "SEL" "SEL" ...
 $ price       : int  21992 20995 19995 17809 17500 17495 17000 16995 16995 16995 ...
 $ mileage     : int  7413 10926 7351 11613 8367 25125 27393 21026 32655 36116 ...
 $ color       : chr  "Yellow" "Gray" "Silver" "Gray" ...
 $ transmission: chr  "AUTO" "AUTO" "AUTO" "AUTO" ...

수치 변수 탐색

summary(usedcars$year)
summary(usedcars[c("price","mileage")])
> summary(usedcars$year)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   2000    2008    2009    2009    2010    2012 
> summary(usedcars[c("price","mileage")])
     price          mileage      
 Min.   : 3800   Min.   :  4867  
 1st Qu.:10995   1st Qu.: 27200  
 Median :13592   Median : 36385  
 Mean   :12962   Mean   : 44261  
 3rd Qu.:14904   3rd Qu.: 55125  
 Max.   :21992   Max.   :151479  

사분위수

사분위 범위

  • Q1과 Q3의 차이
IQR(usedcars$price)
> IQR(usedcars$price)
[1] 3909.5

quantile()

quantile(usedcars$price)
quantile(usedcars$price, probs=c(0.01, 0.99))
quantile(usedcars$price, seq(from=0, to=1, by=0.20))
> quantile(usedcars$price)
     0%     25%     50%     75%    100% 
 3800.0 10995.0 13591.5 14904.5 21992.0 
> quantile(usedcars$price, probs=c(0.01, 0.99))
      1%      99% 
 5428.69 20505.00 
> quantile(usedcars$price, seq(from=0, to=1, by=0.20))
     0%     20%     40%     60%     80%    100% 
 3800.0 10759.4 12993.8 13992.0 14999.0 21992.0 

히스토그램

왜도

  • 분포의 비대칭성을 나타냄
  • 아래와 같이 오른쪽으로 꼬리가 길면 right skew라고 표현함
hist(usedcars$mileage, main="Histogram of Used Car Mileage",
     xlab="Odometer(mi.)")

Rplot

첨도

  • 분포의 뾰족함 정도를 나타냄

균등 분포와 정규 분포

균등 분포

  • 모든 값이 동일하게 발생
  • 히스토그램에서는 막대가 거의 같은 높이로 나타남

정규분포

  • 종 모양

범주 변수 탐색

table(usedcars$year)
table(usedcars$model)
table(usedcars$color)
> table(usedcars$year)

2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 
   3    1    1    1    3    2    6   11   14   42   49   16    1 
> table(usedcars$model)

 SE SEL SES 
 78  23  49 
> table(usedcars$color)

 Black   Blue   Gold   Gray  Green    Red Silver  White Yellow 
    35     17      1     16      5     25     32     16      3 

표 비율 계산

model_table <- table(usedcars$model)
prop.table(model_table)
> prop.table(model_table)

       SE       SEL       SES 
0.5200000 0.1533333 0.3266667 

백분율로 표현

color_table <- table(usedcars$color)
color_pct <- prop.table(color_table) * 100
round(color_pct, digits=1)
> round(color_pct, digits=1)

 Black   Blue   Gold   Gray  Green    Red Silver  White Yellow 
  23.3   11.3    0.7   10.7    3.3   16.7   21.3   10.7    2.0 

최빈값

단봉

  • 최빈값을 하나 갖는 변수

양봉

  • 최빈값이 두 개인 변수

다봉

  • 최빈값이 여러 개인 데이터

변수 간의 관계 탐색

일변량

  • 변수 1개

이변량

  • 변수 2개

다변량

  • 변수 여러 개

산점도

plot(x=usedcars$mileage, y=usedcars$price,
     main="Scatterplot of Price vs. Mileage",
     xlab="Used Car Odometer (mi.)",
     ylab="Used Car Price ($)")

Rplot01

이원교차표

교차표

  • 하나의 변수 값이 다른 변수 값에 의해 어떻게 변하는지 관찰할 수 있음
  • 형식: 표
  • 행: 한 변수의 level
  • 열: 다른 변수의 level
  • 셀: 특정 행과 열의 조합에 해당하는 값의 개수
library(gmodels)
usedcars$conservative <- usedcars$color %in% c("Black","Gray","Silver","White")
table(usedcars$conservative)
CrossTable(x=usedcars$model, y=usedcars$conservative)
> table(usedcars$conservative)

FALSE  TRUE 
   51    99 
> CrossTable(x=usedcars$model, y=usedcars$conservative)

 
   Cell Contents
|-------------------------|
|                       N |
| Chi-square contribution |
|           N / Row Total |
|           N / Col Total |
|         N / Table Total |
|-------------------------|

 
Total Observations in Table:  150 

 
               | usedcars$conservative 
usedcars$model |     FALSE |      TRUE | Row Total | 
---------------|-----------|-----------|-----------|
            SE |        27 |        51 |        78 | 
               |     0.009 |     0.004 |           | 
               |     0.346 |     0.654 |     0.520 | 
               |     0.529 |     0.515 |           | 
               |     0.180 |     0.340 |           | 
---------------|-----------|-----------|-----------|
           SEL |         7 |        16 |        23 | 
               |     0.086 |     0.044 |           | 
               |     0.304 |     0.696 |     0.153 | 
               |     0.137 |     0.162 |           | 
               |     0.047 |     0.107 |           | 
---------------|-----------|-----------|-----------|
           SES |        17 |        32 |        49 | 
               |     0.007 |     0.004 |           | 
               |     0.347 |     0.653 |     0.327 | 
               |     0.333 |     0.323 |           | 
               |     0.113 |     0.213 |           | 
---------------|-----------|-----------|-----------|
  Column Total |        51 |        99 |       150 | 
               |     0.340 |     0.660 |           | 
---------------|-----------|-----------|-----------|

 

설명

  • 각 셀의 첫 값은 각 모델별로 보수적인 차에 대한 행의 비율
  • 비율은 각 셀이 카이제곱 통계량, 행 합계, 열 합계, 표의 총합 값에 기여한 정도를 나타냄
  • 카이제곱 값은 두 변수 사이의 독립에 대한 피어슨 카이제곱 test에서 셀의 기여도를 나타냄
  • 이 test는 표의 셀 개수 차이가 단지 우연일 가능성을 측정
  • 낮을수록 연관되어 있다는 강한 증거 제공
  • CrossTable()chiq=TRUE로 지정한 추가 파라미터를 더해 카이제곱 test 결과를 얻을 수 있음