close_btn
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print Files
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print Files
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
##################### 1.Gradient Descent 구현 과제입니다. ##########################
# 시각화용 코드입니다.
rm(list = ls())
Sys.setlocale("LC_ALL""en_US.UTF-8")
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)
  }
}
# 여기까지 그냥 실행시켜 주세요!
 
##############################################################################################################
#                                                                                                            #
#   이번 과제는 gradient descent를 이용한, 선형 회귀 구현 입니다. 아래에 비어있는 식을 채워주시면 됩니다!    #
#                                                                                                            #
##############################################################################################################
# 단순회귀 구현
<- rnorm(10000)
<- 2 * x + 1
<- 0.001
<- 0.001
lr <- 0.01
loss_log <- c()
for(i in 1:length(x))
{
  h <- (w * x) + b
  w <- w - ( lr * (sum((h - y) * x)/length(x)) ) # 미분한 값
  b <- b - ( lr * ( sum(h - y)/length(x) ) )
  loss <- sum((h - y) ^ 2/ length(x)
  loss_log[i] <- loss
}
par(mfrow = c(1,1))
visualize_loss(loss_log)
if(max(abs(w-2), abs(b-1)) < 0.1)
{
  print("정답입니다!")
}else{
  print("모델을 수정하거나, 초기값, 파라미터를 수정해보세요!")
}
#다중회귀 구현(변수 11개)
rm(list = ls())
<- as.data.frame(matrix(rnorm(5000,0), nrow = 500, ncol = 10))
<- 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
<- rnorm(10,0)
<- rnorm(1,0)
lr <- 0.01
loss_log <- c()
ds <- c(b, w); x.1 <- as.matrix(cbind(rep(1, nrow(x)), x)) # 추가한 줄입니다..
for(i in 1:nrow(x))
{
  ds <- ds - (lr * apply(apply(x.12"*", ((x.1 %*% ds) - y)), 2, mean)) # for 문을 쓰면 컴퓨팅 타임이 늘어서 최대한 벡터 계산으로 해결했습니다
  loss <- sum(((x.1 %*% ds) - y) ^ 2/ nrow(x)
  loss_log[i] <- loss
}
visualize_loss(loss_log)
if(max(abs(ds[2:11]-1:10), abs(ds[1]-11)) < 0.5# w랑 b랑 나누기 귀찮아서 한 벡터에 넣어서 계산했습니다.
{
  print("정답입니다!")
}else{
  print("모델을 수정하거나, 초기값, 파라미터를 수정해보세요!")
}
<- matrix(c(1,2,3,4), ncol = 2)
<- c(1,2)
<- rep(b,2)
a*c
#다중회귀 구현(변수 n개)
linear_regression <- function(n)
{
  x <- as.data.frame(matrix(rnorm(50*n*n,0), nrow = 50*n, ncol = n))
  y <- rep(050*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()
  ds <- c(b, w); x.1 <- as.matrix(cbind(rep(1, nrow(x)), x)) # 추가한 줄
  for(i in 1:nrow(x))
  {
    ds <- ds - (lr * apply(apply(x.12"*", ((x.1 %*% ds) - y)), 2, mean))
    loss <- sum(((x.1 %*% ds) - y) ^ 2/ nrow(x)
    loss_log[i] <- loss
  }
  visualize_loss(loss_log)
  if(max(abs(ds[2:(n + 1)]-1:n), abs(ds[1]-n-1)) < 0.5# 이거 역시 한 벡터에 넣어서 이렇게 수정하였습니다.
  {
    print("정답입니다!")
  }else{
    print("모델을 수정하거나, 초기값, 파라미터를 수정해보세요!")
  }
  return(list(w = w, b = b))
}
 
linear_regression(10)
linear_regression(15)
linear_regression(20)
 
############# 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]
lr <- 0.005
loss_log <- c()
cross_entropy <- function(x, y) {
  x.1 <- as.matrix(cbind(rep(1, nrow(x)), as.matrix(x)))
  w <- matrix(rnorm(3 * (dim(x.1)[2]), 0), (dim(x.1)[2]) ,3)
  y <- as.numeric(y)
  z <- apply(x.1 %*% w, 2, exp)
  z.p <- z/(apply(z, 1, sum))
  for (j in 1:length(y)) {
    for (s in 1:ncol(w)) {
      if (y[j] %in% s) {
        w[, s] <- w[, s] - (lr * apply(apply(x.12"*", (-1 + z.p[, s])), 2, mean))
        z <- apply(x.1 %*% w, 2, exp)
        z.p <- z/(apply(z, 1, sum))
      }
    }
  loss <- "-"(sum(ifelse(y[j] %in% 1, log(z.p[, 1]), ifelse(y[j] %in% 2, log(z.p[, 2]), log(z.p[, 3])))))
  loss_log[j] <<- round(loss, 2
  }
  return(w)     
}
softmax <- function(x, y, z) {
ex <- apply(as.matrix(cbind(rep(1, nrow(x)), as.matrix(x))) %*% z, 2, exp)
ex.p <- ex/apply(ex, 1, sum)
temp <- NULL
temp.1 <- list()
for (i in 1:dim(ex)[1]){
  temp[i] <- which.max(ex.p[i, ])
}
temp.1[[1]] <- table(temp, y)
temp.1[[2]] <- z
print(temp)
return(temp.1)
}
softmax(train_x, train_y, cross_entropy(train_x, train_y))
cs

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 R 소스 공유 게시판 이용 관련 공지사항 1 DataMarket 2014.05.21 26117
102 투빅스 8&9기 설 분석 과제 16' 뉴욕 택시 운행시간 예측 - 9기 최영제 :) 2018.02.24 3148
101 투빅스 8&9기 4주차 과제 Random Forest -9기 이잉걸 잉걸 2018.02.15 2759
100 투빅스 8&9기 4주차 과제 Naive Bayes Classification -9기 서석현 file 스르륵 2018.02.14 2691
99 투빅스 8&9기 3주차 과제 K-Nearest Neighbor, K-means 구현 -9기 신용재 1 신용재 2018.02.08 3209
98 투빅스 8&9기 3주차 과제 연관성 분석 - 9기 최영제 :) 2018.02.08 2878
» 투빅스 8&9기 2주차 과제 Gradient Descent, Softmax, Cross Entropy - 9기 서석현 file 스르륵 2018.02.02 2735
96 투빅스 8&9기 2주차 과제 회귀분석/로지스틱 - 9기 최영제 file :) 2018.02.02 3233
95 투빅스 8&9기 2주차 과제 Gradient Descent, Softmax, Cross Entropy - 9기 김명진 file kimji 2018.02.02 2628
94 투빅스 8&9기 1주차 과제 R 9기-신용재 file 신용재 2018.01.25 3052
93 투빅스 8&9기 1주차 과제 R 알고리즘 - 9기 서석현 file 스르륵 2018.01.25 3101
92 투빅스 7&8기 9주차 과제 Neural Network를 이용한 MNIST 분류 - 8기 김민정 민정e 2017.09.23 4433
91 투빅스 7&8기 9주차 과제 Neural Network를 이용한 MNIST 분류 - 8기 최서현 최서현 2017.09.22 4253
90 투빅스 7&8기 7주차 과제 유기동물 과제 - 8기 조양규 dial123 2017.09.14 4444
89 투빅스 7&8기 7주차 과제 유기동물입양예측 - 8기 김강열 김강열 2017.09.14 4190
88 투빅스 7&8기 6주차 과제 word2vec - 8기 황다솔 다솔 2017.08.31 4824
87 투빅스 7&8기 6주차 과제 TF-IDF 문서유사도 측정 - 8기 최서현 최서현 2017.08.31 4604
86 투빅스 7&8기 5주차 과제 Selenium Crawling - 8기 김강열 김강열 2017.08.24 4606
85 투빅스 7&8기 5주차 과제 Image Augmentation - 8기 김민정 김소희 최수정 황다솔 file 민정e 2017.08.24 4461
84 투빅스 7&8기 5주차 과제 Beautiful Soup 이용한 Crawling - 8기 류호성 file 류호성 2017.08.24 4409
83 투빅스 7&8기 4주차 과제 tree, RF, bagging, boosting 이용 분석 - 8기 조양규 file dial123 2017.08.17 4321
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