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 26876
110 투빅스 8&9기 8주차 LDA - 9기 전민규 file 전민규 2018.03.25 3104
109 투빅스 8&9기 8주차 SVM - 9기 최영제 file :) 2018.03.25 2800
108 투빅스 8&9기 8주차 과제 PCA -9기 신용재 file 신용재 2018.03.23 2767
107 투빅스 8&9기 7주차 과제 논문 요약 - 9기 배현주 file 배현주 2018.03.16 2774
106 투빅스 8&9기 7주차 과제 논문 요약 - 8기 김강열 file 김강열 2018.03.15 2898
105 투빅스 8&9기 7주차 과제 - 9기 김수지 file 김수지 2018.03.15 2811
104 투빅스 8&9기 6주차 과제 - 9기 서석현 file 스르륵 2018.03.08 2763
103 투빅스 8&9기 설 알고리즘 과제 - 9기 백광제 file 백광제 2018.02.25 3257
102 투빅스 8&9기 설 분석 과제 16' 뉴욕 택시 운행시간 예측 - 9기 최영제 :) 2018.02.24 3552
101 투빅스 8&9기 4주차 과제 Random Forest -9기 이잉걸 잉걸 2018.02.15 3167
100 투빅스 8&9기 4주차 과제 Naive Bayes Classification -9기 서석현 file 스르륵 2018.02.14 3083
99 투빅스 8&9기 3주차 과제 K-Nearest Neighbor, K-means 구현 -9기 신용재 1 신용재 2018.02.08 3601
98 투빅스 8&9기 3주차 과제 연관성 분석 - 9기 최영제 :) 2018.02.08 3372
» 투빅스 8&9기 2주차 과제 Gradient Descent, Softmax, Cross Entropy - 9기 서석현 file 스르륵 2018.02.02 3137
96 투빅스 8&9기 2주차 과제 회귀분석/로지스틱 - 9기 최영제 file :) 2018.02.02 3638
95 투빅스 8&9기 2주차 과제 Gradient Descent, Softmax, Cross Entropy - 9기 김명진 file kimji 2018.02.02 3024
94 투빅스 8&9기 1주차 과제 R 9기-신용재 file 신용재 2018.01.25 3406
93 투빅스 8&9기 1주차 과제 R 알고리즘 - 9기 서석현 file 스르륵 2018.01.25 3471
92 투빅스 7&8기 9주차 과제 Neural Network를 이용한 MNIST 분류 - 8기 김민정 민정e 2017.09.23 4823
91 투빅스 7&8기 9주차 과제 Neural Network를 이용한 MNIST 분류 - 8기 최서현 최서현 2017.09.22 4676
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