선형 회귀 분석
통계학의 기본 정리 먼저 보고오기 (내 블로그 글)
확률변수
예를 들면 주사위는 1,2,3,4,5,6 이라는 확률 변수를 가질수있으므로 이산확률 변수, 또한 각각 확률 변수의 확률이 1/6이므로 이를 확률 분포로 그리면 딱딱끊김
더미변수
0 또는 1만으로 표현되는 값!
카테고리 값을 그냥 정수로 쓰면 회귀 분석 모형은 이 값을 크기를 가진 숫자로 인식하므로 더미변수의 형태로 변환 필요
예를 들면 1~12 월이 있는데 이것을 spring,summer,fall,winder로 0 or 1을 가진 변수로 바꿔주던가 아니면 mon1~mon12로 0 or 1을 가진 변수를 바꿔줘야만한다.
한 종류 더미변수들 중에 기준이 되는 더미변수(mon1~mon12에서 mon1)하나는 반드시 제거후에 돌려줘야함(그래야 beta0값을 기준으로 beta들 차례대로 정해지니까)
선형 회귀 분석 해보기
데이터를 파일 또는 웹에서 가져오기
1 | rd<-read.csv(“/User/”, header=T) #파일 (csv 형태): |
산점도를 통한 두 변수간 관계 확인(관계성 유효한지 눈치보기)
1 | plot(x=a, y=b, xlim=c(0,10), ylim=c(0,10), main=“points“) #xlim, ylim은 값범위를 나타냄 |
필요한 변수 생성 및 모으기(질적변수>>양적변수처럼 만드는 더미변수)
일괄적 더미변수 생성
마지막에는 cbind로 dummy데이터 합쳐놔야함
A변수는 다 썻으면 없애기
1 | drd <- data.frame(fac=factor(rd$A));#rd$A변수를 범주형 변수로 바꾼다음, 데이터프레임으로 저장후, |
조건별 더미변수 생성
특정조건에 해당하면 1, 아니면 0
A변수는 끝났으면 삭제, 아래는 기존 데이터에 추가되므로 cbind필요없다
1 | newdata <- transform(rd, dum1 = ifelse(A >= 1 & A < 2, 1, 0), dum2 = ifelse(A >= 3 & Month <4, 1, 0)) #더미변수 생성 |
회귀분석 돌리기
1 | reg <- lm(y ~ x1+x2, data=rd) |
등분산성, 정규성, 독립성 체크하기
잔차의 등분산성 – 잔차와 독립변수의 산점도
1 | plot(newdata$A, residuals(reg1), xlab="residuals", ylab="이름 넣기") #residuals는 잔차가져오는 함수 |
잔차의 정규성 – 잔차의 정규확률그림(normal Q-Q plot)
1 | qqnorm(residuals(reg1), main="그래프이름") |
독립변수들 간의 독립성 – 분산확대인자
1 | vif(reg1) #vif의 10이하면 독립성이 성립! |
최종모형 선택 & 작성
최종모형의 타당성 검증 R^2, Adj.R^2 확인
1 | #회귀식 y_hat= beta0+beta1*x1+..........+beta(p+1)*d(p+1) +... #d는 더미변수들 |
1 | # 분산분석표 – SSE, SSR, MSE, MSR 등을 확인할 수 있음 |
실습해보기
step 함수를 적용한 회귀분석 결과가 최종 모형이므로 유의하지 않은 계수(p값이 의미없는것)들을 포함할 수 있습니다. 식에는 포함시키되, 식을 해석할 때와 예측할 때만 유의하지 않은 계수는 제외하고 계산하면 됩니다.
1 | install.packages("car") |
비선형데이터 다루기
데이터가 낫처럼 휘어져 있음
좋은 회귀식의 조건은 데이터의 중앙을 지나야 하지만 직선으로 굽어진 데이터의 중앙을 모두 지날 수 없음
x 값의 변화에 따른 y 값의 변화가 일정하지 않음
변하는 기울기를 설명하지 못하는 상황 발생
변수 간의 독립성이 무너짐
비선형 데이터를 다루는 방법:
1차가 아닌 r차의 변수 사용(2차 함수 예시)(독립변수가 연속형일때 사용가능)
교호작용(interaction) 변수 사용(기울기까지 바꿀수있음)
더미변수(질적변수)와 독립변수의 연속형(양적변수)데이터면 교호작용 변수 사용하면됨(구지 r차 변수 사용안해도됨)
교호작용
질적변수와 양적변수의 교호작용:
예시
𝑋: 연령, 𝑆: 성별(1 여성, 0 남성)일 때, 초봉(Y)를 설명하려고 한다. (당연히 성별이 질적변수)
더미 변수만 활용시
1 | 𝑌 = 𝛽 + 𝛽𝑋 + 𝛽𝑆 + 𝜖 |
남성일 때의 연령과 여성일 때의 연령을 고려하기 위해서 교호작용 변수(𝑋 𝑆)를 적용
1 | 𝑌= 𝛽+𝛽𝑋+𝛽𝑆+𝛽(𝑋𝑆)+𝜖 |
연령에 따른 회귀직선의 절편과 기울기가 바뀌어서 성별을 고려한 비교가 가능해짐
1 | 𝑌_hat= 8+1.1𝑋+1.2𝑆-0.4(𝑋𝑆)+𝜖 라고한다면 XS에 따라 기울기 변함 |
유용한 인수들
1 | lm(y~x*z, data = data) #x*z를 이렇게 쓰면 x, z각각은 기본적으로 들어가게됨 |
실습해보기
1 | setwd("/Users/lostcatbox/univ_lecture/data_mining/Lec10_실습자료/") |
교호작용에서 유용한 문법
1
2 >lm(len~.^2, data=update_data) #양적변수, 질적변수 하나씩만 있을때, 양적변수가 많을 때는 양적변수*양적변수가 일어나버림
>lm(len~.x*z, data=update_data) #하나 양적, 하나 질적으로 교호변수 사용하자 (x,z각자도 들어가니 걱정말자)
2차함수
선형회귀 말고
그래프에 커브가 보이면 r차 함수로 추정하자
더미변수가 양적변수면 교호작용못함>>r차함수사용
독립변수의 이차함수 사용하기:
1 | lm(y~x+I(x^2), data = data) #알파벳 I()함수쓰는것 |
실습해보기
1 | ## 예제 2번째 |
여기까지가 y변수 x변수 둘다 양적변수 하나이상있어야했음
로지스틱 회귀분석
로지스틱 회귀분석이란?
- 분석하고자 하는 대상들이 두 집단 혹은 그 이상의 집단으로 나누어진 경우에 개별 관측치들이 어느 집단에 분류될 수 있는가를 분석하고 이를 예측하는 모형을 개발하는데 사용되는 통계기법
y변수가 질적변수로 나타남 (암환자 아니다 맞다 구별에사용)
로지스틱 회귀변수는 더미변수임 0~1사이의 값을 가짐.
선형 회귀 분석에서는 x가 -무한대
+무한대 인데 y는 01범위라면 설명 불가능로지스틱 회귀분석 필요
로지스틱 회귀 분석에서는 x가 -무한대
+무한대 인데 y는 01범위라면(로지스틱함수사용)-무한대 ~+무한대로바꿔줌odds 라는 가정 필요
실패확률에 대한 성공에 비율
p=성공확률; 1-p=실패할 확률; odds=p/1-p; p는 0~1사이의 값을 가짐; odds는 0에서 무한대값을 가질수있음
ln(odds)= ln(p)-ln(1-p)
ln(odds)의 값의 범위는 -무한대 ~+무한대사이의 값을 가짐(e^x=0 과 e^x=무한대 각각 x는 )
ln(odds) = 베타*X
원하는 값은 즉 결과적으로 0 or 1만 가져야함,(더미변수로)
애를 연속변수로 생각한다면 0~1사이 값을 가짐 즉 0.5라는기준은 세워서 이하면 0.5보다 높으면 1(이게 확률값)
즉 확률 값이 0~1밖에 못구하므로 ln취함, -무한대 ~+무한대사이의 값을 가짐
ln(odds)=베타*X로 로지스틱 함수가 완성됨.
그외의 특징
- odds는 확률 이 아님. p/1-p
- odds = 1/6 =0.16666 ; odds=6/1=6 대칭안됨
- odds = ln(odds)= ln(1/6)= -1.7917;odds = ln(odds)= ln(6/1)= 1.7917 대칭
- p=0.5 >> odds=1 >>logit(p)=ln(odds)=0
- odds ratio
- 설명변수 x=1에서의 odds와 x=0에서의 odds의 비
- x가 한 단위 증가할 때 y=1일 위험과 y=0일 위험의 비의 증가율
- 설명변수 x=1에서의 odds와 x=0에서의 odds의 비
- x가 한 단위 증가할 때 y=1일 위험과 y=0일 위험의 비의 증가율
- 특정 위험에 노출될 경우, 그렇지 않은 경우에 대한 상대적 위험도- 특정 위험에 노출될 경우, 그렇지 않은 경우에 대한 상대적 위험도
로지스틱 회귀분석 과정
1단계: 각 집단에 속하는 확률의 추정치를 예측. 이진분류의 경우 집단 1에 속하는 확률 P(Y=1)의 추정치로 얻음.
2단계: 추정확률 → 분류기준값(cut-off) 적용 → 특정 범주로 분류
예) P(Y=1) ≥ 0.5 → 집단 1로 분류, P(Y=1) < 0.5 → 집단 0으로 분류
#로지스틱 회귀분석 과정
#1) “https://stats.idre.ucla.edu/stat/data/binary.csv" 링크에서 csv 파일 불러서 저장하기 2) head() 함수를 이용하여 데이터 확인
#3) Missing 데이터 유무 확인 및 제거
#4) str() 함수를 이용하여 변수 class 확인하기
#5) 범주형 변수 범주화하기
#6) 로지스틱 회귀분석 돌리기 – 유의한 변수로 구성된 모형 구하기: step(reg, trace=F) 7) 다중공선성 확인
#8) 회귀계수 유의미 및 모형 적합성 확인하기
#9) 결과 해석하기
#범주형 타입으로 바꾸기
x1 <- c(200, 100, 120, 130)
x2 <- c(1,0,1,1)
y <- c(1,0,0,1)data <- data.frame(cbind(y,x1,x2))
str(data)data$y <- as.factor((data$y))
str(data)
#또는 반복문으로 좀더 간편하게 변형가능
for (i in c(“y”,”x2”)) {
data[,i] <- as.factor(data[,i])
}
str(data)
로지스틱 회귀분석 실습
1 |
|
Train, Test Set 만들기
Train, Test set 만들기(왜? 현재 있는 데이터로 모델만들 데이터와, 만든 모형 테스트 해야하므로)
- Train set: 모형을 만들 데이터
- Test set: 만든 모형을 검증,검사할 데이터
- 보통 8:2 또는 7:3으로 설정
설정방법
1 | sep <- sample(2, nrow(x), prob = c(0.8, 0.2), replace = T) #sample함수는 1,2중 2를 뽑고 replace=T이므로 공을 뽑고 다시 그 데이터 집어넣음. |
Train set을 이용하여 만든 모형의 예측력
1 | #" ROCR " package install 후 suppressMessages(library(ROCR)) 실행 |
로지스틱 회귀분석 실습2
해야하는 것
- Lec12_Logistic1.csv 파일에 있는 데이터를 이용하여 Titanic 생존 여부를 설명하는 모형을 만드시오.
- 1) 데이터 불러오고 확인하기
- 2) 변수 별 NA 개수 확인하기
- 3) Name, Ticket, 그리고 NA가 500개 이상인 변수들 외에 나머지 변수들만 선택하여 저장하기
- 4) Age 변수 결측 값은 평균 값으로 대체
- 5) 남은 결측 값 행 제거 (filter 사용)
- 6) Train set과 Test set을 8:2로 나누기
- 7) Train set 이용하여 로지스틱 회귀분석 돌리기
- 8) 회귀분석 결과 summary 출력
- 9) step 함수로 최적화 결과 출력
- 10) 공선성 검사
- 11) 예측력 확인
- ROC 곡선 출력 - AUC 값 출력
1 | #survived가 생존 여부이며 1이 생존 , 0은 사망 |
신경망
인공지능 개요
입력 값으로부터 결과 값을 내는 함수를 만들어 내는 것
- input x >> function f>> output y (이떄 function에 선형, 비선형결합한 함수로 만들어냄)
하지만 고도화 하기 힘듬 - 따라서 신경망을 찾음
구성된것은 (weight,네모: 1,세모: -1)
input data
(3,2)
(1,4)
(5,5)
(8,3)
label
1,-3, 0,5weight값을 찾아내는것 >> 기게학습이 하는일
기계학습의 종류
지도학습(Supervised learning)
- input과 labels를 이용한 학습(y변수가 맞음 틀림 labels로 제공)
분류(classification), 회귀(regression)
비지도학습(Unsupervised learning) (맞고 틀림 변수없음)
- input만을 이용한 학습
군집화(clustering), 압축(compression)
강화학습(Reinforcement learning)
- label 대신 reward가 주어짐
action selection, policy learning
https://www.youtube.com/watch?v=Q70ulPJW3Gk&feature=youtu.be
신경망
기본단위: 신경세포(Neuron)
- 개별적으로는 단순한 작동원리
- cell-body 일정수준 이상일 때 반응>>축삭돌기, 가지돌기 는 연접>>다른신경세포가 알게함. 전기 화학적 신호)
- 신경망, 기본단위 신경세포>> 어느정도 역치가 지나야 전달 , 차단.
- 개별적으로는 단순한 형태, 전체적으로는 정교한 판단 - 반응
- Neuron 수 , 층(Layer) , 적절한 연결(connections) >>>모이면 창발(Emergence)
물고기의 왼쪽, 오른쪽 신경이 있다면 왼쪽에 햇빛이면 왼쪽에 있는 신경 더 쌔게 반응, 근육방향조절가능(신경망이 근육과 크로스면, 오른쪽근육움직임, 직선연결이면 왼쪽근육움직임) - 신경망에서는 신경 갯수도 중요하지만 연결이 매우중요함> 반응이 다르게 나옴
정교한 판단 - 반응: XOR 문제
신경세포로 표현하자면 사냥 성공확률P(S)와 보상의 크기 (Reward)가 축삭말단이 Hunt(사냥 실행여부)로 이어진 사냥 성공확률이 크면 1과 가까워짐, 보상의 크기 크면1과 가까워짐 , 사냥 실행여부 1과 가까워짐.
성공가능성이 낮은데 성공시 보상 높으면 함(실행여부 1), 완전 반대 경우도 (실행여부 1), 성공확률높고 보상확률도 높으면 (실행여부 0)>> 너무 이상적인 경우면 이건 fake로 알아차림, 조개가 페이크칠 확률이있으므
즉 둘중 하나만 1일때 사냥 실행해야되므로 Exclusive OR 문제라고 부름
2개의 신경망 세포에 사이에 하나더 추가하면 가능
적절한 연결이 매우 중요함
신경 숫자 layer까지 많아지면 정교한 판단가능, 새로운 경험을 하면서 신경망은서로의 연결을 추가, 제거, 강화, 약화 시킴
학습이란?
심리학에서 학습이란 과거 경험 때문에 일어나는 행동 상의 비교적 영속적인 변화
학습은 비교적 오래 지속되는 변화가 있음을 의미
학습은 경험에 의해 생겨나는 변화이며 따라서 육체적 성숙, 약물, 질병 등으로 인한 행동 변화와는 구분되어야 함
사람은 어떻게 학습할까?
연합(association): 주위 환경에서 일어나는 사건들 간의 연관성을 배우는 것고전적 조건형성(classical conditioning): 두 자극이나 사건 사이의 관련성을 배우는 것
번개치면 소리나중옴
도구적 조건형성(instrumental or operant conditioning): 반응과 그 결과 사이의 인과관계 학습
성적이 향상될려면 공부 열심히
layer!!, learning
기계학습(Machine learning)의 한 방법론
기계학습은 인공지능의 한 분야
컴퓨터를 인간처럼 학습시켜 스스로 규칙을 형성할 수 있도록 하는 알고리즘과 기술을 개발하는 분야
예) 분류문제: 수신한 e-메일의 스팸 여부, 입력된 고양이와 개의 사진 구분
회귀분석문제: 주식 가격 예측, 기온 예측, 강수량 예측
기계학습의 대표적인 방법론: 신경망, 의사결정나무, 베이지안 망, 서포트 벡터 기계, 강화학습
신경망 학습
데이터의 특성
랜덤, 조직화(어떤 패턴을 가짐)
신경망에서 테이터 특성을 추출하는 방법은 “함께 반응하는 신경세포들을 함께 연결시킨다”
개구리는 밝은 빛 배경에서 한부분만 어두우면 반응하는 Off-cell이 혀 근육에 반응을 줌.
off-cell이 여러 개에 알파벳을 노출시키면 (그림 10) 알파벳그림 E를 노출하면 맨위에 3개 세포는 반응함, F도 반응함, T에도 반응함, 따라서 함께 반응하는애들을 상위에 한 뉴런에 연결됨.
따라서 하위(점)가 모여서 상위인 선을 뜩하는 한차원 높은 상위 신경세포가 만들어짐
학습을 통해서만 하위 묶어서 상위를 만들어낼수있음
E가 중간에 구멍이 뚫여있어도 상위 신경세포가 조금 약한 반응을 함!,데이터가 완벽하지 않아도, 가능
- Fuzzy logic: 데이터가 완벽하지 않아도 비슷한 판단 가능
- Fault Tolerant: 데이터에 약간의 하자가 있어도 큰 지장 없이 움직임
- Generalization: 데이터의 모양이 완전하지 않더라도 판단을 내리는데 큰 지장 없음
점에서 한차원 높은 층 (layer)가 높아질수록 점점더 복잡한 패턴을 인식할수있음, 선>눈,귀>사람얼굴
사전적 지시 없었음.
함께 반응하는 신경세포들을함께 연결하므로 가능함.
신경망의 특성
- 단순 기본단위들이 자발적으로 복잡한 전체를 형성: “창발”
- 유연한 반응 시스템
- “최적해” 보다는 “적정해”를 추구하는 시스템(최적x 적정한 해답내놓음!)
인공 신경망(Artificial neural network)은 생물학적 신경망의 중추신경계인 인간의 뇌가 문제를 처리하는 방식을 모방한 모형으로 기계학습과 인지과학에서 많이 활용
- 신경망의 특성
- 신경망의 각 노드에 미분 가능한 비선형 활성함수를 적용
- 신경망은 하나 이상의 은닉층(Hidden layer)을 포함.
- 신경망은 높은 수준의 연결성을 나타내며 이때 연결강도는 신경망의 가중치에 의해 결정
심층 신경망(Deep neural network)의 종류
- 심층 신경망은 입력층(Input layer)과 출력층(Output layer) 사이에 여러 개의 은닉층(Hidden layer)으로 이루어진 신경망
- 심층 신경망은 1개의 은닉층을 가진 천층 신경망(Shallow neural network)과 마찬가지로, 복잡한 비선형 관계를 모형화할 수 있음
입력노드는 입력 변수의 수와 같고 출력층의 출력노드의 수는 분류모형에서는 양성, 음성 구분시 출력노드수 2개, 등 출력갯수에와같음
신경망과 역전파(backpropagation) >>분류와예측에 사용
신경망 훈련은 역전파 알고리즘을 가장 많이 사용, 훈련은 다음과 같이 두 단계로 진행. 전방향 단계에서는 신경망의 가중치가 고정, 입력신호는 출력에 도달할 때까지 층별로 전파. 역방향 단계에서는 신경망 출력을 목표출력과 비교하여 오차신호를 생성.
오차신호는 역방향으로 층별로 전파. 이 단계에서는 신경망의 가중치가 연속적으로 조정.
- 입력 * 계수 = 출력 (추정값)
- 정답 - 추정값 = 오차
- 오차 * 계수 별 오차 기여도 = 보정값 >>>(계수변경후 업데이트)
신경망의 여러계수들 합쳐서 >> 모델이라 부름
신경망 작동 원리
- 은닉층 2개와 출력층 1개를 가진 신경망의 구조. 일반적으로 신경망은 완전히 연결.
- 모든 층의 노드가 이전 층의 모든 노드에 연결되어 있음을 의미함.
- 신호의 흐름은 신경망을 통해 왼쪽에서 오른쪽으로 그리고 층별로 모든 방향으로 진행.
- 신경망은 다중입력 및 다중출력문제를 비교적 쉽게 해결할 수 있는 장점이 있음.
신경망의 두 가지 기본신호인 함수신호와 오차신호의 흐름을 보여줌.
함수신호: 신경망의 입력노드로 들어와 신경망을 통해 노드별로 전방향으로 전파되어 신경망의 출력노드에서 출력신호로
나오는 신호
오차신호: 신경망의 출력노드에서 시작하여 신경망을 통해 층별로 역방향으로 전파되어 신경망의 모든 노드에 의한
- 오차신호 계산에서 오차함수가 포함되는 신호
출력노드는 신경망의 출력층을 구성하며, 은닉노드는 신경망의 은닉층을 구성.
인공 신경망 구성 요소
weights = 가중치
각 층의 출력이 다음 층에 입력이됨
모든 계수는 학습과정에서 조금씩 변하고,
각 노드가 어떤 입력을 중요하게 여기는 지 반영하고
신경망의 학습은 이 계수를 업데이트하는 과정임
activation function(활성함수)의 종류는
- 계단함수,
- 시그모이드 함수,
- 쌍곡탄젠트 함수,
- ReLU 함수(x가 0보다작으면 0출력, 나머지는 x출력)
weight노드지나서 각각의 weight*input를 모두 합해서 b(편향벡터)와 더하고, 함수의 결과값이 특정값이상이면 1를 출력, 아니면 0을 출력
XOR 문제
그래프에 한 직선을 그어서 +,-의 영역을 나눌수없다.
신경망으로 해결
위 그림의 계산이 원리(행열계산은 ㄱ자 순서로 계산하기)
역전파 알고리즘
시그모이드 함수
과대적합
- 과대적합 문제: 모형이 훈련 데이터에 너무 잘 맞지만 일반성이 떨어짐, 신경망에서 빈번히 발생하는 문제
- train 데이터에 너무 맞추어져 있어서 test 데이터나 다른 데이터에는 높은 성능을 보여주지 못함
- 해결 방법:
- 훈련데이터를 더 많이 모음
- 모형을 적합하는 과정에서 검증오차가 증가하기 시작하면 반복 중지
- 가중치 감소 또는 제거(자잘한 계수들 제거)
신경망 실행(nnet 분류!)
1 | # nnet 패키지 설치 |
- summary(nn): 신경망 모형 결과
- 연결선의 방향과 가중치를 알려줌
- 초기값을 지정하지 않으면 nnet() 함수가 실행될 때마다 결과가 달라짐 - 적합결과 시각화 방법
1 | install.packages("clusterGeneration"); |
- 적합/예측
1 | p<- predict(nn, newdata=test, type = “class”) |
- 정오분류표:
1 | table(test$Y, p) |
은닉 노드 수에 따른 오분류율
은닉노드수를 정해놨지만, 늘리거나 줄이면 정확도 올라갈수있음. 확인방법
만약 모두 오류율이 비슷하면, 노드수 줄이는것이 과대적합피할수있다.
1 | test.error <- function(hiddensize){ #함수선언문, input데이터를 hiddensize명으로가져옴 |
신경망 실습
iris 데이터에는 아이리스 꽃에 대한 자료이며 다음과 같은 변수를 포함한다.
Sepal.Length: 꽃받침 너비
Petal.Length: 꽃잎 길이
Petal.Width: 꽃잎 너비
Species: 아이리스 꽃 종류
아이리스 꽃 종류를 분류하는 신경망 모형을 train 데이터로 구축하고 결과를 출력하시오.
- 자료를 5:5로 train과 test 데이터로 나누기 - 은닉노드가 2개
- 역전파 알고리즘의 반복 횟수는 200
- 가중치 감소는 5e-04
1 | install.packages("clusterGeneration") |
- train 데이터를 이용하여 만든 모형을 시각화 하시오.
- train 데이터를 이용하여 만든 모형을 test 데이터에 적합하고 정오분류표를 출력하시오.
- 은닉노드 수가 2~10개인 경우에 대하여 오분류율을 비교할 수 있도록 그래프를 출력하시오.
- X축: 은닉노드 수
- Y축: 오분류율
- 그래프 type: b (점선 그래프)
- 참고: plot()함수에서 type 인수는 그래프 형태를 바꿀 수 있는 인수이다.
- p: 점(points) – 기본 값
- l: 선(lines)
- b: 점과 선(both points and lines)
1 | #모형 시각화 |
신경망 회귀
expand.grid(A = c(a1, a2), B = c(b1, b2)) : 모든 레벨의 조합을 만듦
각 변수의 모든 레벨을 조합한 데이터 프레임 생성
예: expand.grid(A = c(1, 2), B = c(1, 2)) #A,B는 각각 1or2 가짐
A B
1 1
2 1
1 2
2 2
모형 생성
1 | fit <- train(Y~., data = data, method = “nnet”, maxit = 200, tuneGrid = exp, trace = F, linear.output=T) |
신경망 실습(nnet함수로 train함수이용)
Lec14_neuralnetwork.csv 파일에는 고객 1,319명에 대한 신용카드자료를 활용한다. 자료는 0~1 값으로 정규화 되어있다. 정규화된 신용카드자료 변수들에 대한 설명은 다음과 같다.
- share: 소득에 대한 신용카드 지출의 비율(y변수)
- reports: 주요 경멸적 보고서의 수
- age: 나이
- income: 연소득
- expenditure: 월 평균 신용카드 지출
- dependents: 부양가족 수
- months: 현 주소지에 살고 있는 개월수
- majorcards: 보유한 주요 신용카드 수
- active: 활성 신용계정 수
소득에 대한 신용카드 지출의 비율을 예측하는 신경망모형을 만드시오.
1) 데이터 불러오기
2) Train set(6)과 Test set(4)으로 나누기
3) 다음 조합 데이터 프레임 생성 가중치 감소가 0.3, 5e-4 -> decay 은닉노드 수가 1, 2, 3 -> size
- 조합을 grip하므로 사용할 함수에 변수명인수과 맞아야함
4) Train set으로 모형 만들기 -> maxit = 200
5) 최적 가중치 감소 값과 은닉노드의 수 구하고 그래프 확인
6) Train set으로 모형 예측 및 mse 확인
7) Test set으로 모형 예측 및 mse 확인
8) 실제 값과 예측 값 묶어서 첫 6줄 확인
9) Train set으로 회귀분석 돌려보기
10) 회귀분석 모형의 mse와 신경망 모형의 mse 비교
11) 신경망 모형 시각화 하기
1 | install.packages("caret") |
neural net 패키지 사용(layer 생성가능)(nnet은 단일층)
neuralnet 패키지 설치
install.packages(“neuralnet”)
library(neuralnet)
fit <- neuralnet(Y~., data = data, hidden = 4, threshold = 0.01, linear.output=F)
- hidden 인수: 각 은닉층의 노드 개수를 나타내는 벡터(nnet에서 size였음)
- threshold 인수: 정지 기준으로 오차함수의 편미분에 대한 임곗값을 설정하는 값 (한번더 돌려도 0.01오차가 안늘어날경우 정지)
print(fit) : 결과 출력하기
plot(fit) : 시각화
예측 (nnet에서 predict함수역할)
newfit <- compute(fit, testdata)
print(newfit)
예측 결과 테이블 형태로 변형
output <- cbind(testdata$X, testdata$Y, as.data.frame(newfit$net.result))
colnames(output) <- c(“Input”,”Actual Output”,”Neural Net Output”) #이름삽입
print(output)
neural net 실습
균등분포 U(0,100)으로부터 입력값 50개를 생성하여 neuralnet 패키지를 적용하여 신경망 모형을 구현하시오.
1 |
|
neural net 패키지 사용
검증: p <- compute(fit, testdata[,1:3]) #Y 변수를 제외한 열 사용
분류 정확도 확인 테이블
p1 <- p$net.result
p2 <- ifelse(p1 >= 0.5, 1, 0)
p3 <- max.col(p2) #최대 값을 갖는 열
table(testdata$Y, p3)
은닉노드 수에 따른 오분류 값 구하는 함수
1
2
3
4
5
6
7
8
9
10
11
12test.error <- function(hiddensize){ #함수
nn <- neuralnet(Y~., data=traindata, hidden=hiddensize, threshold=0.01, linear.output=F)
p<- compute(nn, test[,1:4]) #꼭 종속변수는 제외시켜줘
p1<-print(p$net.result)
p2<-ifelse(p1>=0.5,1,0)
p3<-max.col(p2) #해당 행에서 최대값을 가지는 열 반환
k<-table(testdata$Y,p3)
error <- sum(k[i,-i])/sum(k) #오분류 수 / 전체 수 #이것도 꼭 작업해줘
c(hiddensize,error)
}
out<-t(sapply(2:10,FUN=test.error)) #test.error라는 함수를 이용하여 은닉 노드수(2~10개)에 따른 오분류율 계산
plot(out, type="b", xlab="the number of hidden units", ylab="test error") #오분류율 그래프 출력
신경망 실습(분류모형)
- iris 데이터에는 출력변수 수준이 3개인 아이리스 꽃 자료이다. 크기가 150x5인 데이터 프레임 구조로 변수 설명은 다음과 같다.
- Species: 아이리스 꽃 종류
- Sepal.Length: 꽃받침 길이
- Sepal.Width: 꽃받침 너비
- Petal.Length: 꽃잎 길이
- Petal.Width: 꽃잎 너비
1 |
|
회귀분석일떄는 어떻게 구해야할지 짜보기
회귀모형은 x,y 둘다 연속형
선형 회귀모형
절편과 기울기를 다르게 설정하면 더미변수, 교호작용사용하면가능
비선형데이터
2차
로지스틱회귀분석
y변수가 0,1 을 가져야할때 (분류!!)
신경망(과대적합주의해야함, 새로운 데이터에 부적합)(일반화가 되는 모형만들어야함)
분류, 회귀 가능
전방향으로 계수 추정
후방향으로 계수 업데이트
신경망과 회귀모형비교 해보기