close_btn
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print Files
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print Files
##################### 1.Gradient Descent 구현 과제입니다. ##########################
# 시각화용 코드입니다.
smoothing <- function(vec)
{
vec1 <- c(vec[-1], vec[length(vec)])
vec2 <- c(vec[1], vec[-length(vec)])
return((vec1 + vec2 + vec) / 3)
}
visualize_loss <- function(loss_log)
{
for(i in 1:100)
{
loss_log <- smoothing(loss_log)
plot(loss_log)
Sys.sleep(0.01)
}
}


# 단순회귀 구현
x <- rnorm(1000, 0)
y <- 2 * x + 1
w <- 0.001
b <- 0.001
lr <- 0.01
loss_log <- c()
for(i in 1:1000){
w = w - lr*sum((w*x+b-y)*x)/1000
b = b - lr*sum(w*x+b-y)/1000
loss = (sum(w*x+b-y)^2)/1000
loss_log = c(loss_log,loss)
}
visualize_loss(loss_log)
if(max(abs(w-2), abs(b-1)) < 0.1)
{
print("정답입니다!")
}else{
print("모델을 수정하거나, 초기값, 파라미터를 수정해보세요!")
}
# > w
# [1] 1.99991
# > b
# [1] 0.9999584
#다중회귀 구현(변수 11개)
x <- as.data.frame(matrix(rnorm(5000,0), nrow = 500, ncol = 10))
y <- x$V1 * 1 + x$V2 * 2 + x$V3 * 3 + x$V4 * 4 + x$V5 * 5 + x$V6 * 6 + x$V7 * 7 + x$V8 * 8 + x$V9 * 9 + x$V10 * 10 + 11
w <- rnorm(10,0)
b <- rnorm(1,0)
lr <- 0.01
loss_log <- c()
x_mat = data.matrix(x)
for(i in 1:499)
{
w = w - lr*t(x_mat) %*% (x_mat %*% w + b - y)/500
b = b - lr*sum(x_mat %*% w + b - y)/500
loss = (sum(x_mat %*% w + b - y)^2)/500
loss_log = c(loss_log, loss)
}
visualize_loss(loss_log)
if(max(abs(w-1:10), abs(b-11)) < 0.5)
{
print("정답입니다!")
}else{
print("모델을 수정하거나, 초기값, 파라미터를 수정해보세요!")
}
# > w
# [,1]
# V1 1.001942
# V2 2.015418
# V3 2.903667
# V4 3.923738
# V5 4.937373
# V6 6.012185
# V7 6.830373
# V8 7.894939
# V9 8.827266
# V10 9.891744
# > b
# [1] 10.96345
#다중회귀 구현(변수 n개)
linear_regression <- function(n)
{
x <- as.data.frame(matrix(rnorm(50*n*n,0), nrow = 50*n, ncol = n))
y <- rep(0, 50*n)
for(i in 1:(50*n))
{
y[i] <- sum(x[i,]*(1:n)) + (n+1)
}
w <- rnorm(n,0)
b <- rnorm(1,0)
lr <- 0.01
loss_log <- c()
x_mat = data.matrix(x)
for(i in 1:nrow(x))
{
w = w - lr*t(x_mat) %*% (x_mat %*% w + b - y)/(50*n)
b = b - lr*sum(x_mat %*% w + b - y)/(50*n)
loss = (sum(x_mat %*% w + b - y)^2)/(50*n)
loss_log = c(loss_log, loss)
}
visualize_loss(loss_log)
if(max(abs(w-1:n), abs(b-n-1)) < 0.5)
{
print("정답입니다!")
}else{
print("모델을 수정하거나, 초기값, 파라미터를 수정해보세요!")
}
return(list(w = w, b = b))
}
linear_regression(10)
# > linear_regression(10)
# [1] "정답입니다!"
# $w
# [,1]
# V1 0.9953306
# V2 1.9808849
# V3 3.0331089
# V4 3.9299494
# V5 4.9905930
# V6 5.9685874
# V7 6.9742626
# V8 7.9749172
# V9 8.9602435
# V10 10.0045625
#
# $b
# [1] 10.9353
linear_regression(15)
# > linear_regression(15)
# [1] "정답입니다!"
# $w
# [,1]
# V1 1.000882
# V2 2.001569
# V3 3.011602
# V4 3.992253
# V5 4.997172
# V6 6.014246
# V7 6.966988
# V8 8.010798
# V9 8.979385
# V10 10.000806
# V11 10.993106
# V12 11.977982
# V13 12.979697
# V14 13.970464
# V15 14.983657
#
# $b
# [1] 15.97311
linear_regression(20)
# > linear_regression(20)
# [1] "정답입니다!"
# $w
# [,1]
# V1 0.9990956
# V2 2.0000945
# V3 3.0007125
# V4 4.0003216
# V5 4.9974911
# V6 5.9982369
# V7 6.9977754
# V8 8.0003634
# V9 9.0012612
# V10 9.9987929
# V11 10.9995157
# V12 12.0000694
# V13 12.9996222
# V14 13.9980336
# V15 14.9984284
# V16 15.9981385
# V17 16.9990511
# V18 17.9997220
# V19 18.9980097
# V20 20.0006212
#
# $b
# [1] 20.99902
############# 2.Multinomial logistic에서 배운 softmax 와 cross_entropy 를 함수로 구현하세요 ###############
### 결과는 list(table, beta 계수) 반환하도록 해주세요 (GD 사용하실 경우, learning_rate 유의하세요)
## iris data에 한정적인 함수도 괜찮고, 일반화함수도 좋습니다.
# cross_entropy 함수로 beta를 구하고, softmax 함수에서 cross_entropy 함수를 받아들이면 됩니다.
rm(list=ls())
data("iris")
str(iris)
x<-iris[,-5]
y<-iris[,5]
set.seed(1234)
index <- sort(sample(1:length(x[,1]),length(x[,1])*0.8,replace = F))
train_x <- x[index,]
train_y <- y[index]
test_x <- x[-index,]
test_y <- y[-index]
#x matrix 생성
x_mat_tmp = as.matrix(train_x)
x_mat = cbind(1,x_mat_tmp)
#y matrix 생성
y_mat = matrix(0,120,3)
for (i in 1:length(train_y)){
if (train_y[i] == "setosa"){
y_mat[i,] = c(1,0,0)
}else if (train_y[i] == "versicolor"){
y_mat[i,] = c(0,1,0)
} else
y_mat[i,] = c(0,0,1)
}
#함수
softmax = function(x_mat,beta){
return (apply(exp(x_mat %*% beta),2,'/',apply(exp(x_mat %*% beta),1,sum)))
}
cross_entropy = function(softmaxed_y, y_mat){
return (-sum(y_mat * log(softmaxed_y)))
}
#초기값
lr = 0.001
visual_loss = c()
beta = matrix(runif(15,0),5,3)
for (i in 1:1000)
{
softmaxed_y = softmax(x_mat,beta)
cross_entropy_cost = cross_entropy(softmaxed_y,y_mat)
# beta = beta + lr * t(x_mat) %*% (y_mat - apply(exp(x_mat %*% beta),2,'/',apply(exp(x_mat %*% beta),1,sum)))
beta = beta + lr * t(x_mat) %*% (y_mat - softmaxed_y)
visual_loss = c(visual_loss, sum(cross_entropy_cost))
}
beta
# > beta
# [,1] [,2] [,3]
# 1.1118761 1.1119990 -0.2339156
# Sepal.Length 1.4638013 1.4275885 -1.0897705
# Sepal.Width 2.8408599 0.3473273 -1.5629004
# Petal.Length -2.2563008 0.5657668 3.5529078
# Petal.Width -0.9583385 -1.0544467 3.7316833
visualize_loss(visual_loss)
#테스트
x_mat_tmp = as.matrix(test_x)
x_test_mat = cbind(1,x_mat_tmp)
y_test_mat = matrix(0,30,3)
for (i in 1:length(test_y)){
if (test_y[i] == "setosa"){
y_test_mat[i,] = c(1,0,0)
}else if (test_y[i] == "versicolor"){
y_test_mat[i,] = c(0,1,0)
} else
y_test_mat[i,] = c(0,0,1)
}
#1000회 학습했을 때 30개중 28개 분류 성공
round(softmax(x_test_mat,beta))
# > round(softmax(x_test_mat,beta))
# [,1] [,2] [,3]
# 1 1 0 0
# 3 1 0 0
# 9 1 0 0
# 11 1 0 0
# 12 1 0 0
# 16 1 0 0
# 27 1 0 0
# 41 1 0 0
# 44 1 0 0
# 45 1 0 0
# 51 0 1 0
# 52 0 1 0
# 63 0 1 0
# 72 0 1 0
# 79 0 1 0
# 83 0 1 0
# 84 0 0 1
# 86 0 1 0
# 97 0 1 0
# 99 0 1 0
# 106 0 0 1
# 108 0 0 1
# 116 0 0 1
# 118 0 0 1
# 123 0 0 1
# 124 0 0 1
# 129 0 0 1
# 130 0 1 0
# 135 0 0 1
# 150 0 0 1

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 R 소스 공유 게시판 이용 관련 공지사항 1 DataMarket 2014.05.21 27077
110 투빅스 8&9기 8주차 LDA - 9기 전민규 file 전민규 2018.03.25 3144
109 투빅스 8&9기 8주차 SVM - 9기 최영제 file :) 2018.03.25 2863
108 투빅스 8&9기 8주차 과제 PCA -9기 신용재 file 신용재 2018.03.23 2831
107 투빅스 8&9기 7주차 과제 논문 요약 - 9기 배현주 file 배현주 2018.03.16 2811
106 투빅스 8&9기 7주차 과제 논문 요약 - 8기 김강열 file 김강열 2018.03.15 2977
105 투빅스 8&9기 7주차 과제 - 9기 김수지 file 김수지 2018.03.15 2865
104 투빅스 8&9기 6주차 과제 - 9기 서석현 file 스르륵 2018.03.08 2802
103 투빅스 8&9기 설 알고리즘 과제 - 9기 백광제 file 백광제 2018.02.25 3295
102 투빅스 8&9기 설 분석 과제 16' 뉴욕 택시 운행시간 예측 - 9기 최영제 :) 2018.02.24 3603
101 투빅스 8&9기 4주차 과제 Random Forest -9기 이잉걸 잉걸 2018.02.15 3223
100 투빅스 8&9기 4주차 과제 Naive Bayes Classification -9기 서석현 file 스르륵 2018.02.14 3121
99 투빅스 8&9기 3주차 과제 K-Nearest Neighbor, K-means 구현 -9기 신용재 1 신용재 2018.02.08 3664
98 투빅스 8&9기 3주차 과제 연관성 분석 - 9기 최영제 :) 2018.02.08 3426
97 투빅스 8&9기 2주차 과제 Gradient Descent, Softmax, Cross Entropy - 9기 서석현 file 스르륵 2018.02.02 3182
96 투빅스 8&9기 2주차 과제 회귀분석/로지스틱 - 9기 최영제 file :) 2018.02.02 3690
» 투빅스 8&9기 2주차 과제 Gradient Descent, Softmax, Cross Entropy - 9기 김명진 file kimji 2018.02.02 3075
94 투빅스 8&9기 1주차 과제 R 9기-신용재 file 신용재 2018.01.25 3448
93 투빅스 8&9기 1주차 과제 R 알고리즘 - 9기 서석현 file 스르륵 2018.01.25 3507
92 투빅스 7&8기 9주차 과제 Neural Network를 이용한 MNIST 분류 - 8기 김민정 민정e 2017.09.23 4869
91 투빅스 7&8기 9주차 과제 Neural Network를 이용한 MNIST 분류 - 8기 최서현 최서현 2017.09.22 4728
Board Pagination ‹ Prev 1 2 3 4 5 6 ... 7 Next ›
/ 7

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5