close_btn
조회 수 309 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
유기동물 입양 예측


## train.csv를 이용해 정확도가 높은 모형을 얻고자 합니다.

rm(list=ls())
library(doBy)
library(caret)
library(party)
library(randomForest)
set.seed(123)

puppy_train <- read.csv('train.csv', header = T)
summarizeColumns(puppy_train)

### 전처리

## color 처리
color = as.vector(puppy_train$color)
choice <- function(x){
        if (length(as.numeric(gregexpr("/",x)[[1]]))< 2){
                return(x)
        }else
                return(substr(x,1,as.numeric(gregexpr("/",x)[[1]])[2]-1))
}


newcolor <- unname(sapply(color,choice))
puppy_train$color = as.factor(newcolor)
names(puppy_train)
summary(puppy_train$color)
color = as.matrix(puppy_train$color)
color[which(puppy_train$color %in% c('balck/blue', 'balck/gold','balck/gray','balck/yellow','blue','brown/gold',
'brown/gray','brown/yellow','gold','gray','gray/blue','gray/gold','gray/yellow','white/balck','white/blue','white/gold',
'white/gray','white/yellow','yellow')),] = "etc"
puppy_train$color = color
puppy_train$color = as.factor(puppy_train$color)


## kind 처리 
summary(puppy_train$kind) > 2000
many = c('non', '말티즈', '시츄', '요크셔테리어', '시츄','웰시코기','잡종','진도견','푸들')
editgroup = setdiff(puppy_train$kind, many )
which(puppy_train$kind %in% editgroup)
kind = as.matrix(puppy_train$kind)
kind[which(puppy_train$kind %in% editgroup),] = "기타순종"
puppy_train$kind = kind
puppy_train$kind =as.factor(puppy_train$kind)


## shelter 처리
summary(puppy_train$shelter)
shelter = as.matrix(puppy_train$shelter)
shelter[which(puppy_train$shelter %in% c('경남', '경북','울산','대구')),] = "경상도"
shelter[which(puppy_train$shelter %in% c('충남', '충북','대전','세종')),] = "충청도"
shelter[which(puppy_train$shelter %in% c('전남', '전북','광주','제주도','제주')),] = "제주/전라"
puppy_train$shelter = shelter
puppy_train$shelter = as.factor(puppy_train$shelter)
puppy_train <- puppy_train[,-c(1,2,9,10,11,12,16,17)]


## split    train:test를 7:3으로 나눠 실시하겠습니다. 
index <- 1:nrow(puppy_train)
puppy_train <- cbind(puppy_train, index)
train <- sampleBy(target ~ .,  frac = 0.7, replace =F  , data = puppy_train)
test <- puppy_train[!puppy_train$index %in% train$index, ]
train <- train[,-ncol(train)]
test <- test[,-ncol(test)]
names(test)
names(train)

## 파라미터 튜닝 
#install.packages("mlr")
library(mlr)
getParamSet("classif.randomForest")
trainTask <- makeClassifTask(data = train2,target = "target")
testTask <- makeClassifTask(data = test2, target = "target")

# 정규화 
trainTask <- normalizeFeatures(trainTask,method = "standardize")
testTask <- normalizeFeatures(testTask,method = "standardize")

# RF
getParamSet("classif.randomForest")

# learner
rf <- makeLearner("classif.randomForest", predict.type = "response", par.vals = list(ntree = 200, mtry = 3))
rf$par.vals <- list(
        importance = TRUE
)

# set  parameters
# grid search
rf_param <- makeParamSet(
        makeIntegerParam("ntree",lower = 50, upper = 100),
        makeIntegerParam("mtry", lower = 3, upper = 10),
        makeIntegerParam("nodesize", lower = 10, upper = 30)
)
rf_param <- makeParamSet(
        makeIntegerParam("ntree",lower = 90, upper = 99),
        makeIntegerParam("mtry", lower = 4, upper = 7),
        makeIntegerParam("nodesize", lower = 14, upper = 18)
)


# 위 조건범위를 50 회 랜덤으로 택합니다
rancontrol <- makeTuneControlRandom(maxit = 50L)

# set 3 fold cross validation  같은 파라미터로 3회 시행합니다.
set_cv <- makeResampleDesc("CV",iters = 3L)

# 튜닝 실시
rf_tune <- tuneParams(learner = rf, resampling = set_cv, task = trainTask, par.set = rf_param, control = rancontrol, measures = acc)


# cv accuracy
rf_tune$y # 0.6867
rf_tune$x

# 찾은 최적파라미터를 적용합니다.
rf.tree <- setHyperPars(rf, par.vals = rf_tune$x)

# train
rforest <- train(rf.tree, trainTask)

# 정확도 확인 
rfmodel <- predict(rforest, testTask)
confusionMatrix(rfmodel$data$response, test$target) # 0.687 근방값을 가집니다.

# 같은방법으로 시행하였습니다.
## 로지스틱
logistic.learner <- makeLearner("classif.logreg",predict.type = "response")
cv.logistic <- crossval(learner = logistic.learner,task = trainTask,iters = 10,stratify = TRUE,measures = acc,show.info = F)
cv.logistic$aggr #0.6646739


## tree
getParamSet("classif.rpart")
makeatree <- makeLearner("classif.rpart", predict.type = "response")
set_cv <- makeResampleDesc("CV",iters = 3L)
gs <- makeParamSet(
        makeIntegerParam("minsplit",lower = 10, upper = 50),
        makeIntegerParam("minbucket", lower = 5, upper = 50),
        makeNumericParam("cp", lower = 0.001, upper = 0.2)
)

gscontrol <- makeTuneControlGrid()
stune <- tuneParams(learner = makeatree, resampling = set_cv, task = filtered.task, par.set = gs, control = gscontrol, measures = acc)
stune$y # 0.67

## GBM
getParamSet("classif.gbm")
g.gbm <- makeLearner("classif.gbm", predict.type = "response")
rancontrol <- makeTuneControlRandom(maxit = 50L)
set_cv <- makeResampleDesc("CV",iters = 3L)
gbm_par<- makeParamSet(
        makeDiscreteParam("distribution", values = "bernoulli"),
        makeIntegerParam("n.trees", lower = 100, upper = 1000), #number of trees
        makeIntegerParam("interaction.depth", lower = 2, upper = 10), #depth of tree
        makeIntegerParam("n.minobsinnode", lower = 10, upper = 80),
        makeNumericParam("shrinkage",lower = 0.01, upper = 1)
)
tune_gbm <- tuneParams(learner = g.gbm, task = trainTask,resampling = set_cv,measures = acc,par.set = gbm_par,control = rancontrol)
tune_gbm$y # 0.671
final_gbm <- setHyperPars(learner = g.gbm, par.vals = tune_gbm$x)

#train
to.gbm <- train(final_gbm, traintask)

#test 
pr.gbm <- predict(to.gbm, testTask)


## xgboost 
## 칼럼명의  '/' , 한글로 인한 오류를 없애고자 이름을 수정하고 다시 시행했습니다.

puppy_train <- read.csv('train.csv', header = T)

### 전처리
## color 처리 
color = as.vector(puppy_train$color)
choice <- function(x){
        if (length(as.numeric(gregexpr("/",x)[[1]]))< 2){
                return(x)
        }else
                return(substr(x,1,as.numeric(gregexpr("/",x)[[1]])[2]-1))
}


newcolor <- unname(sapply(color,choice))
puppy_train$color = as.factor(newcolor)
names(puppy_train)

summary(puppy_train$color)
color = as.matrix(puppy_train$color)
color[which(puppy_train$color %in% c('balck/blue', 'balck/gold','balck/gray','balck/yellow','blue','brown/gold',
'brown/gray','brown/yellow','gold','gray','gray/blue','gray/gold','gray/yellow','white/balck','white/blue',
'white/gold','white/gray','white/yellow','yellow')),] = "etc"
color[which(puppy_train$color %in% c('colorbalck/brown')),] = "colorbalckbrown"
color[which(puppy_train$color %in% c('colorwhite/brown')),] = "colorwhitebrown"
color[which(puppy_train$color %in% c('balck/brown')),] = "balckbrown"
color[which(puppy_train$color %in% c('white/brown')),] = "whitebrown"

puppy_train$color = color
puppy_train$color = as.factor(puppy_train$color)


## kind 처리
summary(puppy_train$kind) > 2000
many = c('non', '말티즈', '시츄', '요크셔테리어','웰시코기','잡종','진도견','푸들')
editgroup = setdiff(puppy_train$kind, many )
which(puppy_train$kind %in% editgroup)
kind = as.matrix(puppy_train$kind)
kind[which(puppy_train$kind %in% c('말티즈')),] = 'maltiz'
kind[which(puppy_train$kind %in% c('시츄')),] = 'sichu'
kind[which(puppy_train$kind %in% c('요크셔테리어')),] = 'yorkshuterior'
kind[which(puppy_train$kind %in% c('웰시코기')),] = 'welsikogi'
kind[which(puppy_train$kind %in% c('잡종')),] = 'japjong'
kind[which(puppy_train$kind %in% c('진도견')),] = 'jindodog'
kind[which(puppy_train$kind %in% c('푸들')),] = 'poodle'
kind[which(puppy_train$kind %in% editgroup),] = "etc"
puppy_train$kind = kind
puppy_train$kind =as.factor(puppy_train$kind)


## shelter 처리
summary(puppy_train$shelter)
shelter = as.matrix(puppy_train$shelter)
shelter[which(puppy_train$shelter %in% c('서울')),] = "Seoul"
shelter[which(puppy_train$shelter %in% c('인천')),] = "incheon"
shelter[which(puppy_train$shelter %in% c('부산')),] = "pusan"
shelter[which(puppy_train$shelter %in% c('강원')),] = "kangwon"
shelter[which(puppy_train$shelter %in% c('경기')),] = "kyunggi"

shelter[which(puppy_train$shelter %in% c('경남', '경북','울산','대구')),] = "kyungsangdo"
shelter[which(puppy_train$shelter %in% c('충남', '충북','대전','세종')),] = "chungchungdo"
shelter[which(puppy_train$shelter %in% c('전남', '전북','광주','제주도','제주')),] = "jejooANDjeonrado"
puppy_train$shelter = shelter
puppy_train$shelter = as.factor(puppy_train$shelter)


## 가변수화
shelter <- as.data.frame(model.matrix(~shelter,puppy_train))[,-1]
type <- as.data.frame(model.matrix(~type,puppy_train))[,-1]
color <- as.data.frame(model.matrix(~color,puppy_train))[,-1]
sex <- as.data.frame(model.matrix(~sex,puppy_train))[,-1]
kind <- as.data.frame(model.matrix(~kind,puppy_train))[,-1]
puppy_train <- puppy_train[,-c(1,2,3,4,5,6,9,10,11,12,13,16,17)]
puppy_train = cbind(puppy_train ,shelter, type, color, sex, kind)
puppy_train$target = factor(puppy_train$target)


## split
index <- 1:nrow(puppy_train)
puppy_train <- cbind(puppy_train, index)
train2 <- sampleBy(target ~ .,  frac = 0.7, replace =F  , data = puppy_train)
test2 <- puppy_train[!puppy_train$index %in% train2$index, ]
train2 <- train2[,-ncol(train2)]
test2 <- test2[,-ncol(test2)]


### Xgboost

trainTask <- makeClassifTask(data = train2,target = "target")
testTask <- makeClassifTask(data = test2, target = "target")

# 정규화 
trainTask <- normalizeFeatures(trainTask,method = "standardize")
testTask <- normalizeFeatures(testTask,method = "standardize")

# load xgboost
getParamSet("classif.xgboost")

# learner
xg_set <- makeLearner("classif.xgboost", predict.type = "response")
xg_set$par.vals <- list(
        objective = "binary:logistic",
        eval_metric = "error",
        nrounds = 250
)


# 튜닝 범위 지정

xg_ps <- makeParamSet(
        makeIntegerParam("nrounds",lower=100,upper=250),
        makeIntegerParam("max_depth",lower=4,upper=8),
        makeNumericParam("lambda",lower=0.54,upper=0.57),
        makeNumericParam("eta", lower = 0.05, upper = 0.06),
        makeNumericParam("subsample", lower = 0.58, upper = 0.6),
        makeNumericParam("min_child_weight",lower=2.9,upper=3),
        makeNumericParam("colsample_bytree",lower = 0.65,upper = 0.67)
)


# 100회 시행
rancontrol <- makeTuneControlRandom(maxit = 100L)

# 3 fold cross validation 
set_cv <- makeResampleDesc("CV",iters = 3L)

# 위 범위지정에따라 튜닝을 실시합니다.
xg_tune <- tuneParams(learner = xg_set, task = trainTask, resampling = set_cv,measures = acc,par.set = xg_ps, control = rancontrol)
xg_tune$x

# 최적 파라미터를 적용하겠습니다.
xg_new <- setHyperPars(learner = xg_set, par.vals = list(nrounds=186, max_depth=6, lambda=0.562, eta=0.0512, 
subsample=0.592, min_child_weight=2.95, colsample_bytree=0.668))

# train model
xgmodel <- train(xg_new, trainTask)

# 정확도 확인
predict.xg <- predict(xgmodel, testTask)

confusionMatrix(rfmodel$data$response, test$target) # 0.687
confusionMatrix(predict.xg$data$response, test$target) # 0.686

# xgboost가 랜덤포레스트모형에 비해 입양이 이루어질 것이라고 예상했으나 실제 입양이 이루어지지 않는 경우(1630 / 1537)가 더 적게 발생하는 것으로 보입니다. 
# 따라서 분석 목적엔 xgboost모형이 더 적합하다고 생각하지만 정확도를 높이기 위해 랜덤포레스트를 이용하겠습니다. 





#####################################################################################################
# 그럼위에서 얻은 결론으로 non_target데이터를 예측하겠습니다. 
# train.csv의 모든 자료를 이용해 test_nontarget에 적용하겠습니다. 

### 1. puppy_train 처리

puppy_train <- read.csv('train.csv', header = T)

### 전처리

## color 처리
color = as.vector(puppy_train$color)
choice <- function(x){
        if (length(as.numeric(gregexpr("/",x)[[1]]))< 2){
                return(x)
        }else
                return(substr(x,1,as.numeric(gregexpr("/",x)[[1]])[2]-1))
}


newcolor <- unname(sapply(color,choice))
puppy_train$color = as.factor(newcolor)

color = as.matrix(puppy_train$color)
color[which(puppy_train$color %in% c('balck/blue', 'balck/gold','balck/gray','balck/yellow','blue','brown/gold',
'brown/gray','brown/yellow','gold','gray','gray/blue','gray/gold','gray/yellow','white/balck','white/blue',
'white/gold','white/gray','white/yellow','yellow')),] = "etc"
color[which(puppy_train$color %in% c('colorbalck/brown')),] = "colorbalckbrown"
color[which(puppy_train$color %in% c('colorwhite/brown')),] = "colorwhitebrown"
color[which(puppy_train$color %in% c('balck/brown')),] = "balckbrown"
color[which(puppy_train$color %in% c('white/brown')),] = "whitebrown"

puppy_train$color = color
puppy_train$color = as.factor(puppy_train$color)



## kind 처리
summary(puppy_train$kind) > 2000
many = c('non', '말티즈', '시츄', '요크셔테리어','웰시코기','잡종','진도견','푸들')
editgroup = setdiff(puppy_train$kind, many )
which(puppy_train$kind %in% editgroup)
kind = as.matrix(puppy_train$kind)
kind[which(puppy_train$kind %in% c('말티즈')),] = 'maltiz'
kind[which(puppy_train$kind %in% c('시츄')),] = 'sichu'
kind[which(puppy_train$kind %in% c('요크셔테리어')),] = 'yorkshuterior'
kind[which(puppy_train$kind %in% c('웰시코기')),] = 'welsikogi'
kind[which(puppy_train$kind %in% c('잡종')),] = 'japjong'
kind[which(puppy_train$kind %in% c('진도견')),] = 'jindodog'
kind[which(puppy_train$kind %in% c('푸들')),] = 'poodle'
kind[which(puppy_train$kind %in% editgroup),] = "etc"
puppy_train$kind = kind
puppy_train$kind =as.factor(puppy_train$kind)


## shelter 처리
summary(puppy_train$shelter)
shelter = as.matrix(puppy_train$shelter)
shelter[which(puppy_train$shelter %in% c('서울')),] = "Seoul"
shelter[which(puppy_train$shelter %in% c('인천')),] = "incheon"
shelter[which(puppy_train$shelter %in% c('부산')),] = "pusan"
shelter[which(puppy_train$shelter %in% c('강원')),] = "kangwon"
shelter[which(puppy_train$shelter %in% c('경기')),] = "kyunggi"

shelter[which(puppy_train$shelter %in% c('경남', '경북','울산','대구')),] = "kyungsangdo"
shelter[which(puppy_train$shelter %in% c('충남', '충북','대전','세종')),] = "chungchungdo"
shelter[which(puppy_train$shelter %in% c('전남', '전북','광주','제주도','제주')),] = "jejooANDjeonrado"
puppy_train$shelter = shelter
puppy_train$shelter = as.factor(puppy_train$shelter)


## 가변수화
shelter <- as.data.frame(model.matrix(~shelter,puppy_train))[,-1]
type <- as.data.frame(model.matrix(~type,puppy_train))[,-1]
color <- as.data.frame(model.matrix(~color,puppy_train))[,-1]
sex <- as.data.frame(model.matrix(~sex,puppy_train))[,-1]
kind <- as.data.frame(model.matrix(~kind,puppy_train))[,-1]
puppy_train <- puppy_train[,-c(1,2,3,4,5,6,9,10,11,12,13,16,17)]
puppy_train = cbind(puppy_train ,shelter, type, color, sex, kind)
puppy_train$target = factor(puppy_train$target)




### 2. puppy_test 데이터 처리 puppy_train 과 같은 방식으로 진행하였습니다.
### 전처리


puppy_test <- read.csv('test_nontarget.csv', header = T)

### 전처리

## color 처리
color = as.vector(puppy_test$color)
choice <- function(x){
        if (length(as.numeric(gregexpr("/",x)[[1]]))< 2){
                return(x)
        }else
                return(substr(x,1,as.numeric(gregexpr("/",x)[[1]])[2]-1))
}


newcolor <- unname(sapply(color,choice))
puppy_test$color = as.factor(newcolor)
names(puppy_test)

summary(puppy_test$color)
color = as.matrix(puppy_test$color)
color[which(puppy_test$color %in% c('balck/blue', 'balck/gold','balck/gray','balck/yellow','blue','brown/gold',
'brown/gray','brown/yellow','gold','gray','gray/blue','gray/gold','gray/yellow','white/balck','white/blue',
'white/gold','white/gray','white/yellow','yellow')),] = "etc"
color[which(puppy_test$color %in% c('colorbalck/brown')),] = "colorbalckbrown"
color[which(puppy_test$color %in% c('colorwhite/brown')),] = "colorwhitebrown"
color[which(puppy_test$color %in% c('balck/brown')),] = "balckbrown"
color[which(puppy_test$color %in% c('white/brown')),] = "whitebrown"

puppy_test$color = color
puppy_test$color = as.factor(puppy_test$color)


## kind 처리
summary(puppy_test$kind) > 2000
many = c('non', '말티즈', '시츄', '요크셔테리어','웰시코기','잡종','진도견','푸들')
editgroup = setdiff(puppy_test$kind, many )
which(puppy_test$kind %in% editgroup)
kind = as.matrix(puppy_test$kind)
kind[which(puppy_test$kind %in% c('말티즈')),] = 'maltiz'
kind[which(puppy_test$kind %in% c('시츄')),] = 'sichu'
kind[which(puppy_test$kind %in% c('요크셔테리어')),] = 'yorkshuterior'
kind[which(puppy_test$kind %in% c('웰시코기')),] = 'welsikogi'
kind[which(puppy_test$kind %in% c('잡종')),] = 'japjong'
kind[which(puppy_test$kind %in% c('진도견')),] = 'jindodog'
kind[which(puppy_test$kind %in% c('푸들')),] = 'poodle'
kind[which(puppy_test$kind %in% editgroup),] = "etc"
puppy_test$kind = kind
puppy_test$kind =as.factor(puppy_test$kind)


## shelter 처리
summary(puppy_test$shelter)
shelter = as.matrix(puppy_test$shelter)
shelter[which(puppy_test$shelter %in% c('서울')),] = "Seoul"
shelter[which(puppy_test$shelter %in% c('인천')),] = "incheon"
shelter[which(puppy_test$shelter %in% c('부산')),] = "pusan"
shelter[which(puppy_test$shelter %in% c('강원')),] = "kangwon"
shelter[which(puppy_test$shelter %in% c('경기')),] = "kyunggi"

shelter[which(puppy_test$shelter %in% c('경남', '경북','울산','대구')),] = "kyungsangdo"
shelter[which(puppy_test$shelter %in% c('충남', '충북','대전','세종')),] = "chungchungdo"
shelter[which(puppy_test$shelter %in% c('전남', '전북','광주','제주도','제주')),] = "jejooANDjeonrado"
puppy_test$shelter = shelter
puppy_test$shelter = as.factor(puppy_test$shelter)


## 가변수화
shelter <- as.data.frame(model.matrix(~shelter,puppy_test))[,-1]
type <- as.data.frame(model.matrix(~type,puppy_test))[,-1]
color <- as.data.frame(model.matrix(~color,puppy_test))[,-1]
sex <- as.data.frame(model.matrix(~sex,puppy_test))[,-1]
kind <- as.data.frame(model.matrix(~kind,puppy_test))[,-1]
summarizeColumns(puppy_test)
puppy_test <- puppy_test[,-c(1:6,9,10,11,12,13,15,16)]
puppy_test = cbind(puppy_test ,shelter, type, color, sex, kind)

###############################################################################################


### 모델링

ranfo.model <- randomForest(factor(target) ~., data=puppy_train, ntree=93, mtry=7, nodesize = 17)
pred = predict(ranfo.model, puppy_test)
write.csv(pred , file = '조양규.csv')
pp = read.csv('조양규.csv')
nrow(pp) == nrow(puppy_test)

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 R 소스 공유 게시판 이용 관련 공지사항 1 DataMarket 2014.05.21 13222
92 투빅스 7&8기 9주차 과제 Neural Network를 이용한 MNIST 분류 - 8기 김민정 민정e 2017.09.23 235
91 투빅스 7&8기 9주차 과제 Neural Network를 이용한 MNIST 분류 - 8기 최서현 최서현 2017.09.22 203
» 투빅스 7&8기 7주차 과제 유기동물 과제 - 8기 조양규 dial123 2017.09.14 309
89 투빅스 7&8기 7주차 과제 유기동물입양예측 - 8기 김강열 김강열 2017.09.14 325
88 투빅스 7&8기 6주차 과제 word2vec - 8기 황다솔 다솔 2017.08.31 479
87 투빅스 7&8기 6주차 과제 TF-IDF 문서유사도 측정 - 8기 최서현 최서현 2017.08.31 367
86 투빅스 7&8기 5주차 과제 Selenium Crawling - 8기 김강열 김강열 2017.08.24 506
85 투빅스 7&8기 5주차 과제 Image Augmentation - 8기 김민정 김소희 최수정 황다솔 file 민정e 2017.08.24 458
84 투빅스 7&8기 5주차 과제 Beautiful Soup 이용한 Crawling - 8기 류호성 file 류호성 2017.08.24 456
83 투빅스 7&8기 4주차 과제 tree, RF, bagging, boosting 이용 분석 - 8기 조양규 file dial123 2017.08.17 510
82 투빅스 7&8기 4주차 과제 의사결정나무&랜덤포레스트 - 8기 김강열 김강열 2017.08.17 514
81 투빅스 7&8기 3주차 과제 클러스터링 구현 - 8기 권문정 김강열 이현경 조양규 1 이현경 2017.08.10 571
80 투빅스 7&8기 3주차 과제 PCA - 8기 이현경 file 이현경 2017.08.12 560
79 투빅스 7&8기 2주차 과제 연관성 분석 - 8기 조양규 file dial123 2017.08.03 571
78 투빅스 7&8기 2주차 과제 나이브베이즈 구현 - 8기 이현경 file 이현경 2017.08.03 531
77 투빅스 7&8기 2주차 과제 로지스틱/Ridge/Lasso&알고리즘 - 8기 김강열 file 김강열 2017.08.03 626
76 투빅스 7&8기 1주차 과제 알고리즘 - 8기 김강열 file 김강열 2017.07.27 672
75 투빅스 7&8기 1주차 과제 회귀분석 - 8기 황다솔 file 다솔 2017.07.27 820
74 투빅스 6&7기 8주차 과제 PCA(주성분 분석) - 7기 이동수 1 탱탱볼 2017.03.18 1679
73 투빅스 6&7기 8주차 과제 LBP 알고리즘 구현 - 7기 이광록 1 file 2017.03.16 1423
Board Pagination ‹ Prev 1 2 3 4 ... 5 Next ›
/ 5

나눔글꼴 설치 안내


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

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

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5