브레트 란츠의 Machine Learning with R을 정리한 내용
학습과정
- 데이터 저장소
- 관찰, 기억, 회상을 활용해 향후 추론을 위한 사실적 기반을 제공
- 추상화
- 저장된 데이터를 넓은 표현과 개념으로 변환
- 일반화
- 추상화된 데이터를 이용해 지식과 추론을 생성함으로써 새로운 상황에서 실행을 하게 만듦
- 평가
- 학습된 지식의 효율성을 측정하고 잠재적인 개선 사항을 알려주는 피드백 메커니즘을 제공
노이즈
- 데이터에서 설명되지 않거나 설명할 수 없는 변형을 지칭하는 용어
- 노이즈를 모델링하려는 시도는 과적합 문제의 원인이 됨
단계
- 데이터 수집
- 알고리즘이 실행 가능한 지식을 생성하고자 사용할 학습 자료를 수집
- 데이터 탐색과 준비
- 데이터 전처리
- 모델 훈련
- 모델 평가
- 모델 개선
머신러닝에는 가용한 학습 알고리즘의 편향에 입력 데이터의 특성을 맞추는 작업이 포함
관측 단위
- 연구를 위해 관심 있는 측정 속성을 가진 가장 작은 개체
예시
- 속성이 기록돼 있는 관측 단위의 인스턴스
특징
- 학습에 유용할 수 있는 예시의 기록된 특성이나 속성
사례
- 스팸 이메일을 식별하는 학습 알고리즘
- 관측 단위는 이메일 메시지
- 예시는 특정 메시지
- 특징은 메시지에 사용된 단어
데이터셋의 특징
- 수치(numeric)
- 숫자로 측정됨
- 범주(categorical) or 명목(nominal)
- 범주의 집합으로 이루어짐
- 서열(ordinal)
- 범주 변수의 특별한 경우
- 서열 목록에 속하는 범주를 갖는 명목 변수
- 옷의 크기(대, 중, 소), 고객 만족도(전혀 만족하지 않음 ~ 매우 만족)
예측 모델
- 데이터셋의 값을 이요해서 새로운 값을 예측할 때 사용
학습 알고리즘
- 목표 특징과 다른 특징 간의 관계를 찾고 모델링
지도학습
- 학습 대상과 학습 방법에 대한 명확한 지침을 주는 예측 모델 훈련 과정
지도학습 알고리즘
- 데이터셋이 주어지면 모델을 최적화해 목표 출력을 만드는 특징 값의 조합을 찾음
분류
- 예제가 속하는 범주를 예측하는 지도 머신러닝 작업
서술 모델
- 새롭고 흥미로운 방식으로 데이터를 요약해서 얻은 통찰로 이들을 얻는 작업에 사용
- 훈련하는 과정을 비지도학습이라고 함
군집화
- 데이터셋을 동질 그룹으로 분리하는 서술 모델링 작업
메타학습자
- 특정 학습 작업에 국한되지 않고 더 효과적으로 '학습하는 방법'을 학습하는데 주력
- 추가 학습 정보를 위해 과거 학습의 결과를 이용
- 벡터
- 팩터
- 배열
- 행렬
- 데이터 프레임
- 항목이라고 하는 값의 순서 집합을 저장
- 항목의 개수 제한 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.)")
첨도
- 분포의 뾰족함 정도를 나타냄
균등 분포
- 모든 값이 동일하게 발생
- 히스토그램에서는 막대가 거의 같은 높이로 나타남
정규분포
- 종 모양
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 ($)")
교차표
- 하나의 변수 값이 다른 변수 값에 의해 어떻게 변하는지 관찰할 수 있음
- 형식: 표
- 행: 한 변수의 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 결과를 얻을 수 있음