일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Dehaze
- 딥러닝 실험 깃 버전관리
- 디자인 패턴
- 백준
- 자바 영화 api
- 인공지능 깃 버전관리
- 정규화
- C# 프로젝트
- python
- 인공지능
- 대학원 월급
- 활성화 함수
- MLP
- 파이썬 경사하강법
- 의료 ai 대학원 월급
- 머신러닝
- 대학원 급여
- pandas
- 자바
- 코딩테스트
- 통계학
- 로스트아크
- 영화 api
- 파이썬
- API
- 자바 프로젝트
- DCP
- 경사하강법
- 디자인패턴
- 딥러닝
Archives
- Today
- Total
대학원 일기
13장: 인공신경망 본문
## 13.3 보스톤 집값 예측 - 회귀 문제
# 데이터 확인
install.packages("neuralnet")
install.packages("MASS")
library(neuralnet) # 다층 인공신경망의 학습 & 예측
library(MASS) # 보스턴 주택 가격 데이터셋
head(Boston)
# 분석 대상 데이터 할당
# dataset
# input data: crim, zn, indus, chas, nox, rm, age, dis, rad, tax, ptratio, black, lstat, mediv
# output data: mediv(주택 가격)
data <- Boston[, c(1,2,4,5,9,14)] # 위 input data 중 선택
head(data)
# 결측치 확인
na <- apply(data, 2, is.na) # isna는 결측치 확인을 해줌
na
apply(na, 2, sum) # 결측치 확인
# 데이터 정규화
maxs <- apply(data, 2, max) # 각 열별로 최댓값 할당
maxs
mins <- apply(data, 2, min) # 각 열별로 최솟값 할당
mins
data.scaled <- scale(data, center = mins, scale = maxs - mins) # 정규화
data.scaled
# 학습용과 테스트용 데이터 분리
n <- nrow(data.scaled) # 정규화된 데이터의 행의 수
set.seed(1234) # 난수 발생을 위한 초기값
index <- sample(1:n, round(0.8*n)) # 난수를 통해 1~n 사이의 행 중 80%에 해당하는 숫자를 무작위로 추출
index
train <- as.data.frame(data.scaled[index,]) # 훈련용 data
head(train)
test <- as.data.frame(data.scaled[-index,]) # 테스터용 data
head(test)
# 학습용 입출력 변수 할당
names.col <- colnames(train) # 훈련용 데이터의 항목명 추출
names.col
var.dependent <- names.col[6] # 마지막 열을 출력 변수로 지정
var.dependent
var.independent <- names.col[-6] # 마지막 열을 제외한 변수를 입력변수로 지정
var.independent
f.var.independent <- paste(var.independent, collapse = " + ") # 입력 변수 "+"로 연결
f.var.independent
f <- paste(var.dependent, "~", f.var.independent) # 출력변수와 입력 변수를 "~"로 연결
f
# 학습 및 모형 출력
# 모형 구성과 학습
model <- neuralnet(f,
data = train, # data는 학습 데이터로
hidden = c(3, 2), # 은닉층의 노드 수 (1층:3개, 2층: 2개)
linear.output = T)
plot(model)
# 테스트
predicted <- compute(model, test)
predicted$net.result
head(predicted$net.result)
predicted.real <- predicted$net.result * (maxs[6] - mins[6]) + mins[6]
predicted.real
head(predicted.real)
test.real <- test$medv * (maxs[6] - mins[6]) + mins[6]
test.real
# 실제값 대비 예측값 비교(분포)
plot(test.real, predicted.real,
xlim=c(0, 50), ylim=c(0, 50),
main="실제값 대비 예측값 분포",
xlab="실제값", ylab="예측값",
col="red",
pch=18, cex=0.7)
abline(0, 1, col="blue", lty=2)
MAPE.model <- sum(abs(test.real - predicted.real)/test.real * 100) / length(test.real)
MAPE.model # 오차
## 13.4 붓꽃 종의 분류(분류문제)
# 데이터 확인
# install.packages("neuralnet")
library(neuralnet)
iris
data <- iris
# 결측치 확인
na <- apply(data, 2, is.na)
na
apply(na, 2, sum)
# 데이터 정규화
maxs <- apply(data[,1:4], 2, max)
maxs
mins <- apply(data[,1:4], 2, min)
mins
data[,1:4] <- scale(data[,1:4], center = mins, scale = maxs - mins)
data[,1:4]
# 출력 데이터 생성
data$setosa <- ifelse(data$Species == "setosa", 1, 0)
data$virginica <- ifelse(data$Species == "virginica", 1, 0)
data$versicolor <- ifelse(data$Species == "versicolor", 1, 0)
head(data)
# 학습용과 테스트용 데이터 분리
n <- nrow(data)
set.seed(2000)
index <- sample(1:n, round(0.8*n))
index
train <- as.data.frame(data[index,])
head(train)
test <- as.data.frame(data[-index,])
head(test)
# 학습용 입출력 데이터
f.var.independent <- "Sepal.Length + Sepal.Width + Petal.Length + Petal.Width"
f.var.dependent <- "setosa + versicolor + virginica"
f <- paste(f.var.dependent, "~", f.var.independent)
f
# 학습 및 모형 출력
nn <- neuralnet(f, data=train, hidden=c(6, 6), linear.output=F)
plot(nn)
# 테스트
predicted <- compute(nn, test[,-5:-8])
predicted$net.result
idx <- max.col(predicted$net.result)
idx
species <- c('setosa', 'versicolor', 'virginica')
predicted <- species[idx]
predicted
# 실제 값 대비 예측 값 비교(분포)
table(test$Species, predicted)
t <- table(test$Species, predicted)
tot <- sum(t)
tot
same <- sum(diag(t))
same
same / tot
## The end of Chap.13 Neural Networks
'School > Data Mining and Statistics' 카테고리의 다른 글
12장: 시뮬레이션 (0) | 2023.10.16 |
---|---|
11장: 네트워크 분석(노드 연결) (0) | 2023.10.16 |
10장: Naver OPEN API (0) | 2023.10.16 |
9장: OPEN API (0) | 2023.10.16 |
8장: 웹 스크래핑 코드 (0) | 2023.10.16 |
Comments