한국인 신체데이터로 다양한 분석하고 시각화 해보기
'R(알) ' 카테고리의 다른 글
R 8장. 연관규칙 (apriori 알고리즘) (0) | 2017.09.23 |
---|---|
R 7장 신경망과 서포트 벡터 머신(발표자료) (0) | 2017.09.23 |
R 9장. k-means 알고리즘 (0) | 2017.09.09 |
R 7장 신경망과 서포트 벡터 머신 (0) | 2017.09.09 |
R 5장. 결정트리 (0) | 2017.09.08 |
R 8장. 연관규칙 (apriori 알고리즘)
- apriori 알고리즘 이무엇인지?
- apriori 알고리즘 실습 1 ( 맥주와 기저귀)
- apriori 알고리즘 실습 2 (상가 건물 데이터)
- apriori 알고리즘 실습 3 ( 책 : 야채와 우유 데이터)
- apriori 알고리즘 공식(p312)
x <- data.frame(
beer=c(0,1,1,1,0),
bread=c(1,1,0,1,1),
cola=c(0,0,1,0,1),
diapers=c(0,1,1,1,1),
eggs=c(0,1,0,0,0),
- apriori 알고리즘 실습 3 (책: 야채와 우유 데이터 )
'R(알) ' 카테고리의 다른 글
한국인 신체데이터로 다양한 분석하고 시각화 해보기 (0) | 2017.09.23 |
---|---|
R 7장 신경망과 서포트 벡터 머신(발표자료) (0) | 2017.09.23 |
R 9장. k-means 알고리즘 (0) | 2017.09.09 |
R 7장 신경망과 서포트 벡터 머신 (0) | 2017.09.09 |
R 5장. 결정트리 (0) | 2017.09.08 |
R 7장 신경망과 서포트 벡터 머신(발표자료)
- 초평면 (hyperplane)?
'R(알) ' 카테고리의 다른 글
한국인 신체데이터로 다양한 분석하고 시각화 해보기 (0) | 2017.09.23 |
---|---|
R 8장. 연관규칙 (apriori 알고리즘) (0) | 2017.09.23 |
R 9장. k-means 알고리즘 (0) | 2017.09.09 |
R 7장 신경망과 서포트 벡터 머신 (0) | 2017.09.09 |
R 5장. 결정트리 (0) | 2017.09.08 |
R 9장. k-means 알고리즘
- 머신러닝 종류 3가지
- 1. 지도학습 {입력값, 정답}
- 분류 : knn, 나이브베이즈, 결정트리, svm
- 회귀 : 선형회귀, 신경망
- 2. 비지도학습 {입력값}
- 3. 강화학습 {입력값, 출력값, 출력에 대한 보상 }
- k-means 란?
- k-means 실습1 ( 국영수 점수를 가지고 학생 분류)
- k-means 실습2 ( 쇼셜 미디어에 같은 성향을 갖는 사람들을 분류)
- (처음 중심값 선택) 랜덤하게 중심값 (centroid)를 선태갛ㄴ다.
- (클러스터 할당) k 개의 중심값과 각 개별 데이터간의 거리를 측정한다. 가장 가까운 클러스터에 해당 데이터를 assign한다.
- (새 중심값 선택) 클러스터 마다 새로운 중심값을 계산한다.
- (범위 확인) 선택된 중심값이 변화가 어느정도 없다면 멈춘다.
- k 값 입력 파라미터를 직접 지정해줘야 한다.
- 이상치(outlier) 에 민감하다
'R(알) ' 카테고리의 다른 글
R 8장. 연관규칙 (apriori 알고리즘) (0) | 2017.09.23 |
---|---|
R 7장 신경망과 서포트 벡터 머신(발표자료) (0) | 2017.09.23 |
R 7장 신경망과 서포트 벡터 머신 (0) | 2017.09.09 |
R 5장. 결정트리 (0) | 2017.09.08 |
R 4장. 나이브 베이즈의 이해활용한 기계학습4 (0) | 2017.09.08 |
R 7장 신경망과 서포트 벡터 머신
- 머신러닝의 3가지 종류
- 1.지도학습 :
뇌 |
인공 신경망 |
신경세포(뉴런) |
노드 |
신경세포의 연결 |
연결 가중치 |
바이어스: -> 가중치와 함께 신경망의 정보를 저장하는데 관여하는 변수
v = w1 * x1 + w2 * x2 + w3 * x3 +b
v = wx + b
w = [w1 w2 w3]
x = [x1 x2 x3] ^T
y = f(v)
활성함수
1. 입력신호의 가중의 합을 구한다
2. 활성함수에 가중합을 입력해 얻은 값을 외부로 출력한다.
|
|
- 표준정규분포: scale()
- 최대최소변환: normalize() 함수를 만들었음 : ( 0 ~ 1 ) 사이의 값
##### 7장 : 신경망(Neural Network)과 서포트 벡터 머신(Support Vector Machines) -------------------
##### Part 1: 신경망 -------------------
## 예제 : 콘크리트의 강도 모델링 ----
## 2단계 : 데이터 준비와 살펴보기 ----
# 데이터 읽기와 구조 확인
concrete <- read.csv("concrete.csv")
str(concrete)
# 정규화 함수
normalize <- function(x) {
return((x - min(x)) / (max(x) - min(x)))
}
# 전체 데이터 프레임에 정규화 적용
concrete_norm <- as.data.frame(lapply(concrete, normalize))
# 0과1 사이에 범위 확인
summary(concrete_norm$strength)
# 본래 데이터의 최소값, 최대값 비교
summary(concrete$strength)
# 훈련과 테스트 데이터 생성
concrete_train <- concrete_norm[1:773, ]
concrete_test <- concrete_norm[774:1030, ]
## 3단계 : 데이터로 모델 훈련 ----
# neuralnet 모델 훈련
install.packages("neuralnet")
library(neuralnet)
# 하나의 은닉 뉴런에 대한 단순한 ANN
concrete_model <- neuralnet(formula = strength ~ cement + slag +
ash + water + superplastic +
coarseagg + fineagg + age,
data = concrete_train)
# 망(network) 시각화
plot(concrete_model)
## 4단계 : 모델 성능 평가 ----
# 모델 결과
model_results <- compute(concrete_model, concrete_test[1:8])
# 강도값 예측
predicted_strength <- model_results$net.result
# 예측값과 실제값간의 상관 관계 확인
cor(predicted_strength, concrete_test$strength)
## 5단계 : 모델 성능 향상 ----
# 5개 은닉 뉴런인 복잡한 뉴런망
concrete_model2 <- neuralnet(strength ~ cement + slag +
ash + water + superplastic +
coarseagg + fineagg + age,
data = concrete_train, hidden = 5)
# 망(network) 시각화
plot(concrete_model2)
# 결과 평가
model_results2 <- compute(concrete_model2, concrete_test[1:8])
predicted_strength2 <- model_results2$net.result
cor(predicted_strength2, concrete_test$strength)
- R 기본 수업
- R 을 활용한 기계학습
- svm 으로 보통사람들(중산층)을 분류
- 이모델이 얼마나 정확한지 기존 훈련 데이터로 평가를 해본다.
- 예측한 결과와 실제와의 차이
m1 <- svm(CAT..MEDV~ ., type ="C-classification", data= boston_norm )
library(caret)
confusionMatrix(table(boston_norm $CAT..MEDV , predict(m1,boston_norm )))
|
- 중산층 분류 실습
- 필기체 분류 숫자
- 필기체 분류 영어
install.packages("caret")
install.packages("doParallel")
install.packages("kernlab")
install.packages("ggplot2")
install.packages("lattice")
library(ggplot2)
library(lattice)
library(kernlab)
library(caret)
library(doParallel)
# Enable parallel processing.
cl <- makeCluster(detectCores())
registerDoParallel(cl)
# Load the MNIST digit recognition dataset into R
# http://yann.lecun.com/exdb/mnist/
# assume you have all 4 files and gunzip'd them
# creates train$n, train$x, train$y and test$n, test$x, test$y
# e.g. train$x is a 60000 x 784 matrix, each row is one digit (28x28)
# call: show_digit(train$x[5,]) to see a digit.
# brendan o'connor - gist.github.com/39760 - anyall.org
load_mnist <- function() {
load_image_file <- function(filename) {
ret = list()
f = file(filename,'rb')
readBin(f,'integer',n=1,size=4,endian='big')
ret$n = readBin(f,'integer',n=1,size=4,endian='big')
nrow = readBin(f,'integer',n=1,size=4,endian='big')
ncol = readBin(f,'integer',n=1,size=4,endian='big')
x = readBin(f,'integer',n=ret$n*nrow*ncol,size=1,signed=F)
ret$x = matrix(x, ncol=nrow*ncol, byrow=T)
close(f)
ret
}
load_label_file <- function(filename) {
f = file(filename,'rb')
readBin(f,'integer',n=1,size=4,endian='big')
n = readBin(f,'integer',n=1,size=4,endian='big')
y = readBin(f,'integer',n=n,size=1,signed=F)
close(f)
y
}
train <<- load_image_file('train-images.idx3-ubyte')
test <<- load_image_file('t10k-images.idx3-ubyte')
train$y <<- load_label_file('train-labels.idx1-ubyte')
test$y <<- load_label_file('t10k-labels.idx1-ubyte')
}
show_digit <- function(arr784, col=gray(12:1/12), ...) {
image(matrix(arr784, nrow=28)[,28:1], col=col, ...)
}
train <- data.frame()
test <- data.frame()
# Load data.
load_mnist()
train$x <- train$x / 255
# Setup training data with digit and pixel values with 60/40 split for train/cv.
inTrain = data.frame(y=train$y, train$x)
inTrain$y <- as.factor(inTrain$y)
trainIndex = createDataPartition(inTrain$y, p = 0.60,list=FALSE)
training = inTrain[trainIndex,]
# SVM. 95/94.
fit <- train(y ~ ., data = head(training, 1000), method = 'svmRadial', tuneGrid = data.frame(sigma=0.0107249, C=1))
results
confusionMatrix(results, head(cv$y, 1000))
show_digit(as.matrix(training[5,2:785]))
# Predict the digit.
predict(fit, newdata = training[5,])
# Check the actual answer for the digit.
training[5,1]
'R(알) ' 카테고리의 다른 글
R 7장 신경망과 서포트 벡터 머신(발표자료) (0) | 2017.09.23 |
---|---|
R 9장. k-means 알고리즘 (0) | 2017.09.09 |
R 5장. 결정트리 (0) | 2017.09.08 |
R 4장. 나이브 베이즈의 이해활용한 기계학습4 (0) | 2017.09.08 |
R 3장. knn (최근접 이웃을 사용한 분류의 이해) (0) | 2017.09.08 |
R 5장. 결정트리
- R기본수업
- R머신러닝
- 머신러닝의 종류 3가지
- 결정트리를 구하려면 ?
x <- data.frame(
cust_name=c('SCOTT','SMITH','ALLEN','JONES','WARD'), card_yn=c('Y','Y','N','Y','Y'), review_yn=c('Y','Y','N','N','Y'), before_buy_yn=c('Y','Y','Y','N','Y'), buy_yn=c('Y','Y','N','Y','Y') )
|
'R(알) ' 카테고리의 다른 글
R 9장. k-means 알고리즘 (0) | 2017.09.09 |
---|---|
R 7장 신경망과 서포트 벡터 머신 (0) | 2017.09.09 |
R 4장. 나이브 베이즈의 이해활용한 기계학습4 (0) | 2017.09.08 |
R 3장. knn (최근접 이웃을 사용한 분류의 이해) (0) | 2017.09.08 |
R 1장 R기본문법 (0) | 2017.09.08 |
R 4장. 나이브 베이즈의 이해활용한 기계학습4
- 나이브베이즈를 이해하기 위한 기본 통계개념 (p128)
- 스팸 메일 분류
- 컴퓨터 네트워크에 침힙한 이상징후를 분류
- 관찰된 증상을 고려한 질병 관찰
- 내일 시험문제지롱!!!
비아그라(w1) 돈(w2) 식료품(w3) 주소삭제(w4)
우도 Yes No Yes No Yes No Yes No
스팸 4/20 16/20 10/20 10/20 0/20 20/20 12/20 8/20 20
햄 1/80 79/80 14/80 66/80 8/80 71/80 23/80 57/80 80
총합 5/100 95/100 24/100 76/100 8/100 9/100 35/100 65/100 100 |
비아그라(w1) |
돈(w2) |
식료품(w3) |
주소삭제(w4) |
||||||
우도 |
Yes |
No |
Yes |
No |
Yes |
No |
Yes |
No |
|
스팸 |
4/20 |
16/20 |
10/20 |
10/20 |
0/20 |
20/20 |
12/20 |
8/20 |
20 |
햄 |
1/80 |
79/80 |
14/80 |
66/80 |
8/80 |
71/80 |
23/80 |
57/80 |
80 |
총합 |
5/100 |
95/100 |
24/100 |
76/100 |
8/100 |
9/100 |
35/100 |
65/100 |
100 |
비아그라(w1) 돈(w2) 식료품(w3) 주소삭제(w4)
우도 Yes No Yes No Yes No Yes No
스팸 4/20 16/20 10/20 10/20 0/20 20/20 12/20 8/20 20
햄 1/80 79/80 14/80 66/80 8/80 71/80 23/80 57/80 80
총합 5/100 95/100 24/100 76/100 8/100 9/100 35/100 65/100 100 |
나이브 베이즈 알고리즘 문제를 풀기 위해서 아래의 zoo2 를 전부 팩터화 하세요 ~ zoo2 <- read.csv("zoo2.csv", stringsAsFactors = FALSE) zoo2$X1 <- as.factor(zoo2$X1) str(zoo2) |
'R(알) ' 카테고리의 다른 글
R 7장 신경망과 서포트 벡터 머신 (0) | 2017.09.09 |
---|---|
R 5장. 결정트리 (0) | 2017.09.08 |
R 3장. knn (최근접 이웃을 사용한 분류의 이해) (0) | 2017.09.08 |
R 1장 R기본문법 (0) | 2017.09.08 |
R 3장. knn (최근접 이웃을 사용한 분류의 이해) (0) | 2017.07.14 |
R 3장. knn (최근접 이웃을 사용한 분류의 이해)
- R 기본 문법 수업 : 1주일
- R 기계 학습 :
- 머신러닝의 종류
- 1.지도학습
- -분류:knn
- -회귀:
- 2.비지도학습
- 3.강화학습
- knn(k-Nearest Neighbors) 란 무엇인가?
- knn(k-Nearest Neighbors)이 필요한 이유?
- knn(k-Nearest Neighbors)의 분류의 이해
- knn(k-Nearest Neighbors)의 분류 실습1( 소개팅 데이터 )
- knn(k-Nearest Neighbors)의 분류 실습2( 과일 데이터 )
- 적당한 k 값 선택
- knn(k-Nearest Neighbors)의 분류 실습3(유방암 데이터)
- knn(k-Nearest Neighbors)의 분류 실습4(붓꽃 데이터)
- knn(k-Nearest Neighbors)의 분류 실습5(폭력과 멜로 분류)
- knn(k-Nearest Neighbors)의 분류 실습6(폐암 데이터)
- 건강검진 -----> 2.초음파, 내시경 ----> 3.의심되는 종양
- 표준화 : R 에서는 scale()이라는 함수를 통해서
- 정규화 : 정규분포에 속하는 데이터로 정규화를 해줘야 한다.
- 훈련 데이터 like 데이터를 준비
- 테스트 데이터를 만든다 ( 앞으로 ㅅㄱㅁ만나게 될 남학생의 데이터)
- knn을 돌리기 위한 패키지 설치
- test (나이:44, 월급:400) 인 데이터를 KNN으로 돌려서 상품을 구매할지 안할지 출력하시오
buy <- read.csv("buy.csv" , stringsAsFactors = F , header = T)
buy
buy$age <- scale(buy$나이)
buy$pay <- scale(buy$월수입)
buy
test <- data.frame(age=44 , pay=400)
train <- buy[,c(4,5)]
labels <- buy[,3]
train
library(class)
knnpred2 <- knn(train , test , labels , k=6 , prob=TRUE)
strip.white=T)
buy2$월수입 <- as.integer(buy2$월수입)
buy2$월수입 <- scale(buy2$월수입)
train <- buy2[1:20,c("나이","월수입")]
train_label <- buy2[1:20,"상품구매여부"]
test <- buy2[21,c("나이","월수입")]
knnpred3 <- knn(train, test, train_label, k=5, prob=T)
■ 책 103쪽에 나온 그래프를 그릴려면 ?
#1. food 데이터 프레임을 만든다.
food <- data.frame(ingredient = c("apple", "bacon", "banana", "carrot",
"celery", "cheese", "cucumber", "fish",
"grape", "green bean", "lettuce",
"nuts", "orange", "pear","shrimp"
),
sweetness = c(10,1,10,7,3,1,2,3,8,3,1,3,7,10,2),
crunchiness = c(9,4,1,10,10,1,8,1,5,7,9,6,3,7,3),
class = c("Fruits","Proteins","Fruits","Vegetables",
"Vegetables","Proteins","Vegetables",
"Proteins","Fruits","Vegetables",
"Vegetables","Proteins","Fruits",
"Fruits","Proteins"))
food
#2. 토마토 데이터 만들기
tomato <- data.frame(ingredient = "tomato",
sweetness = 6,
crunchiness = 4)
tomato
#3. ggplot2 그래프로 plot 그래프를 그린다.
install.packages("ggplot2")
library(ggplot2)
# par : 파라미터 지정 / pty : plot모형을 "square" 정사각형
par(pty="s")
# 그래프 그리기(version : ggplot)
#par:파라미터/xpd:모형옮기기/mar:여백설정(아래,왼쪽,위,오른쪽)
par(xpd=T, mar=par()$mar+c(0,0,0,15))
plot(food$sweetness,food$crunchiness,
pch=as.integer(food$class),
#pch=food$class, # pch는 모형 지정
xlab = "sweetness", ylab = "crunchiness",
main = "What is tomato class?")
legend(10.5,10, # legend 위치 지정
c("Fruits", "Proteins", "Vegetables", "X"),
pch=as.integer(food$class))
text(food$sweetness, food$crunchiness,
labels=food$ingredient,
pos = 3, # 글자위치position(1:below/2:left/3:above/4:right)
offset = 0.3, # 좌표와 얼마나 띄어쓰기 할것인지
cex = 0.7 ) # 문자크기
# 그래프 그리기(version : ggplot2)
ggplot(data=food,aes(x=sweetness,y=crunchiness))+
labs(title="What is tomato class?")+ # 타이틀 명
geom_point(aes(color=class, shape=class),size=6)+
geom_text(aes(label=ingredient), # 라벨링 표시
vjust=-1, # 수직으로 움직일 거리 (위는 -, 아래는 +)
size = 5) # 문자크기
■ 구현 코드
install.packages("readr")
install.packages("ElemStatLearn")
install.packages("class")
library(readr)
#1.과적합에 대하여.
library(ElemStatLearn)
library(class)
x <- mixture.example$x
x
g <- mixture.example$y
g
xnew <- mixture.example$xnew
xnew
#k=1, 10 , 30 , 50 , 100, 1000
#k값이 지나치게 작을 때: 분류 경계선이 너무 디테일 하다. : 과적합
mod1
prob1 <- attr(mod1, "prob")
prob1
prob1 <- ifelse(mod1=="1", prob1, 1-prob1)
prob1
px1 <- mixture.example$px1
px2 <- mixture.example$px2
prob1 <- matrix(prob1, length(px1), length(px2))
par(mar=rep(2,4))
#윤곽선
contour(px1, px2, prob1, levels=0.5,
labels="", xlab="", ylab="", main= "k-nearest neighbour", axes=FALSE)
points(x, col=ifelse(g==1, "coral", "cornflowerblue"))
gd <- expand.grid(x=px1, y=px2)
#배경
points(gd, pch=".", cex=1.2, col=ifelse(prob1>0.5, "coral", "cornflowerblue"))
install.packages('class')
library(class)
install.packages('gmodels')
library(gmodels)
install.packages("scales")
library(scales)
######[KNN] using algorithm######################################################
####movie data load
colnames(movie)<-c("title","kick","kiss","genre")
movie$genre<-factor(movie$genre, levels= c('Romance','Action')) # covert genre column into a factor
summary(movie[c("kick",'kiss')]) # do not need to normalize
######data partition
movie_train<- movie[1:6,2:3]
movie_test<-movie[7,2:3]
movie_train_label <- movie[1:6,4]
######classification
movie_test_matrix <-rbind( movie_test, movie_test, movie_test,movie_test,movie_test,movie_test)
movie_test_matrix
distances <- sqrt(apply((movie_test_matrix-movie_train)**2,1,sum))
sortedDistIndicies <- order(distances) #rearrange disctances into ascending order ( index)
#distances[order(distances)] #sort by distances
#k <- readline(prompt('enter k value'))
classCount <- movie_train_label[sortedDistIndicies[c(1:3)]]
classCount
sortedClassCount <-table(classCount)
sortedClassCount
movie_test_pred<-names(sortedClassCount[sortedClassCount==max(sortedClassCount)])
movie_test_pred
########plot graph
plot(movie[1:6,]$kick~movie[1:6,]$kiss, data=movie[1:6,], col=alpha(c('red','blue'),0.7)[movie[1:6,]$genre], xlab='kiss count', ylab='kick count', main='movie data')
points(movie[7,]$kiss,movie[7,]$kick, data=movie[7,], pch=15, cex=1.2, col = 'orange')
legend('topright', c(levels(movie$genre), "test"), pch =c(1,1,15), col=c(alpha(c('red','blue'),0.7),'orange'), cex=0.9)
######using packages######################################################
### Data load
movie<-read.csv('/Users/misoni/Desktop/movie.csv',header=F, stringsAsFactors=F)
colnames(movie)<-c("title","kick","kiss","genre")
movie$genre<-factor(movie$genre, levels= c('Romance','Action'))
summary(movie[c("kick",'kiss')])
##normalization
#normalize <-function(x) {
# return ( (x-min(x)) / (max(x)-min(x)) )
#}
####split data
movie_train <- movie[1:6,2:3]
movie_test <- movie[7,2:3]
movie_train
movie_test
movie_train_label <- movie[1:6,4]
movie_test_label <- movie[7,4]
movie_test_label
####modeling
movie_test_pred <- knn(train=movie_train, test=movie_test, cl=movie_train_label, k=3,prob=T)
movie_test_pred
table(movie_test_pred)
library(gmodels)
#CrossTable(x=movie_test_label, y=movie_test_pred)
#####################################################################
###########iris data#######################################################
########normalize data
str(iris)
table(iris$Species)
normalize<-function(x){
return ((x-min(x))/ (max(x)-min(x)))
}
iris_n <- as.data.frame(lapply(iris[1:4], normalize ))
#########split data
set.seed(1)
train <- round(0.7*dim(iris)[1])
train_index = sample(1:dim(iris)[1], train, replace =F)
iris_train <- iris_n[train_index,]
iris_test <- iris_n[-train_index,]
iris_train_label <- iris[train_index,5]
iris_test_label <- iris[-train_index,5]
iris_train_label
prop.table(table(iris_train_label))
prop.table(table(iris_test_label))
###
###########modeling
iris_test_pred <- knn(train=iris_train, test=iris_test, cl=iris_train_label, k=3, prob=T)
'R(알) ' 카테고리의 다른 글
R 5장. 결정트리 (0) | 2017.09.08 |
---|---|
R 4장. 나이브 베이즈의 이해활용한 기계학습4 (0) | 2017.09.08 |
R 1장 R기본문법 (0) | 2017.09.08 |
R 3장. knn (최근접 이웃을 사용한 분류의 이해) (0) | 2017.07.14 |
R 1장 R기본문법 (0) | 2017.07.06 |
R 1장 R기본문법
- data frame에 order 옵션을 사용하는 방법
- doBy 패키지를 설치하고 orderBy 함수를 사용하는 방법
- 문자함수
- 숫자함수
- 날짜함수
- 변환함수
- 일반함수
- round round
- trunc trunc
- mod %%
- power 2^3
- max max
- min min
- sum sum
- avg mean
- count length (세로)
- union all rbind
- union rbind + unique
- intersect intersect
- minus setdiff
- 오라클의 서브쿼리의 종류
- 2009 서울 용산역 앞 용산 이-마트 가는길 6 고령자
q123 <-data.table('지역' = car_accident$자세히,'rnk'=car_accident$건수,'등수'=rank(-car_accident$건수.,ties.method = "first")) orderBy(~등수,q123) |
q123 <-data.table('장소' = car_accident$지점,'건수'=car_accident$발생건수.건.,'순위'=rank(-car_accident$발생건수.건.,ties.method = "first")) orderBy(~순위,q123) |
library(twitteR)
library(ROAuth)
library(plyr)
library(stringr)
library(ggplot2)
# 3. Sentiment Function #
require(stringr)
neg.matches = match(words, neg.words)
neg.matches = !is.na(neg.matches)
}, pos.words, neg.words, .progress=.progress )
scores.df = data.frame(score=scores, text=sentences)
return(scores.df)
}
#######################################
# 4. Scoring Tweets & Adding a column #
#######################################
# Add words to list
pos.words <- c(hu.liu.pos, 'upgrade')
neg.words <- c(hu.liu.neg, 'wtf', 'wait','waiting', 'epicfail', 'mechanical')
# Score all tweets
Dodgers.scores <- score.sentiment(DatasetDodgers$text, pos.words,neg.words, .progress='text')
Rangers.scores <- score.sentiment(DatasetRangers$text, pos.words,neg.words, .progress='text')
Dodgers.scores$Team <- 'LA Dodgers'
Rangers.scores$Team <- 'Texas Rangers'
Orioles.scores$Team <- 'Baltimore Orioles'
##################
# 5. Visualizing #
##################
hist(Dodgers.scores$score, col="bisque")
qplot(Dodgers.scores$score)
hist(Rangers.scores$score, col="bisque")
qplot(Rangers.scores$score)
hist(Orioles.scores$score, col="bisque")
qplot(Orioles.scores$score)
# Comparing 3 data sets
all.scores <- rbind(Rangers.scores, Dodgers.scores, Orioles.scores)
ggplot(data=all.scores) +
geom_bar(mapping=aes(x=score, fill=Team), binwidth=1) +
facet_grid(Team~.) +
theme_bw() +
scale_fill_brewer()
- 막대 그래프
- 원형 그래프
- 라인(plot) 그래프
- 특수 그래프 (지도 ,소리 시각화, 워드 클라우드)
- 사분위수 그래프 ( 평균, 중앙값, 이상치) <--- 머신러닝 2장
create_cnt <- read.csv("창업건수.csv", header=T)
drop_cnt <- read.csv("폐업건수.csv",header=T)
- 막대 그래프
- 원형 그래프
- 라인(plot) 그래프
- 특수 그래프 (지도 ,소리 시각화, 워드 클라우드)
- 사분위수 그래프 ( 평균, 중앙값, 이상치) <--- 머신러닝 2장
- 원형(pie) 그래프!!
create_cnt <- read.csv("창업건수.csv", header=T)
drop_cnt <- read.csv("폐업건수.csv",header=T)
- 태양(sun.jpg) 배경 사진을 다운 받는다.
- jpeg 패키지를 설치한다
- plot 그래프의 배경을 sun.jpg로 변경한다.
install.packages("KoNLP")
install.packages("wordcloud")
install.packages("plyr")
install.packages("data.table")
library("data.table")
library(KoNLP)
library(wordcloud)
library(plyr)
library(RColorBrewer)
data3 <- unlist(data2)
data3 <- Filter(function(x) {nchar(x) >= 2}, data3)
data3 <- gsub("\\d+", "", data3)
data3 <- gsub("\\(", "", data3)
data3 <- gsub("\\)", "", data3)
write(unlist(data3), "NIV2.txt")
data4 <- read.table("NIV2.txt")
wordcount <- table(data4)
wordcount
palete <- brewer.pal(9, "Set1")
wordcloud(names(wordcount), freq=wordcount, scale=c(5,1),rot.per = 0.1, min.freq=1,random.order=F, color=T, colors=palete)
'R(알) ' 카테고리의 다른 글
R 5장. 결정트리 (0) | 2017.09.08 |
---|---|
R 4장. 나이브 베이즈의 이해활용한 기계학습4 (0) | 2017.09.08 |
R 3장. knn (최근접 이웃을 사용한 분류의 이해) (0) | 2017.09.08 |
R 3장. knn (최근접 이웃을 사용한 분류의 이해) (0) | 2017.07.14 |
R 1장 R기본문법 (0) | 2017.07.06 |
R 3장. knn (최근접 이웃을 사용한 분류의 이해)
- R 기본 문법 수업 : 1주일
- R 기계 학습 :
- 머신러닝의 종류
- 1.지도학습
- -분류:knn
- -회귀:
- 2.비지도학습
- 3.강화학습
- knn(k-Nearest Neighbors) 란 무엇인가?
- knn(k-Nearest Neighbors)이 필요한 이유?
- knn(k-Nearest Neighbors)의 분류의 이해
- knn(k-Nearest Neighbors)의 분류 실습1( 소개팅 데이터 )
- knn(k-Nearest Neighbors)의 분류 실습2( 과일 데이터 )
- 적당한 k 값 선택
- knn(k-Nearest Neighbors)의 분류 실습3(유방암 데이터)
- knn(k-Nearest Neighbors)의 분류 실습4(붓꽃 데이터)
- knn(k-Nearest Neighbors)의 분류 실습5(폭력과 멜로 분류)
- knn(k-Nearest Neighbors)의 분류 실습6(폐암 데이터)
- 건강검진 -----> 2.초음파, 내시경 ----> 3.의심되는 종양
- 표준화 : R 에서는 scale()이라는 함수를 통해서
- 정규화 : 정규분포에 속하는 데이터로 정규화를 해줘야 한다.
- 훈련 데이터 like 데이터를 준비
- 테스트 데이터를 만든다 ( 앞으로 ㅅㄱㅁ만나게 될 남학생의 데이터)
- knn을 돌리기 위한 패키지 설치
- test (나이:44, 월급:400) 인 데이터를 KNN으로 돌려서 상품을 구매할지 안할지 출력하시오
buy <- read.csv("buy.csv" , stringsAsFactors = F , header = T)
buy
buy$age <- scale(buy$나이)
buy$pay <- scale(buy$월수입)
buy
test <- data.frame(age=44 , pay=400)
train <- buy[,c(4,5)]
labels <- buy[,3]
train
library(class)
knnpred2 <- knn(train , test , labels , k=6 , prob=TRUE)
strip.white=T)
buy2$월수입 <- as.integer(buy2$월수입)
buy2$월수입 <- scale(buy2$월수입)
train <- buy2[1:20,c("나이","월수입")]
train_label <- buy2[1:20,"상품구매여부"]
test <- buy2[21,c("나이","월수입")]
knnpred3 <- knn(train, test, train_label, k=5, prob=T)
■ 책 103쪽에 나온 그래프를 그릴려면 ?
#1. food 데이터 프레임을 만든다.
food <- data.frame(ingredient = c("apple", "bacon", "banana", "carrot",
"celery", "cheese", "cucumber", "fish",
"grape", "green bean", "lettuce",
"nuts", "orange", "pear","shrimp"
),
sweetness = c(10,1,10,7,3,1,2,3,8,3,1,3,7,10,2),
crunchiness = c(9,4,1,10,10,1,8,1,5,7,9,6,3,7,3),
class = c("Fruits","Proteins","Fruits","Vegetables",
"Vegetables","Proteins","Vegetables",
"Proteins","Fruits","Vegetables",
"Vegetables","Proteins","Fruits",
"Fruits","Proteins"))
food
#2. 토마토 데이터 만들기
tomato <- data.frame(ingredient = "tomato",
sweetness = 6,
crunchiness = 4)
tomato
#3. ggplot2 그래프로 plot 그래프를 그린다.
install.packages("ggplot2")
library(ggplot2)
# par : 파라미터 지정 / pty : plot모형을 "square" 정사각형
par(pty="s")
# 그래프 그리기(version : ggplot)
#par:파라미터/xpd:모형옮기기/mar:여백설정(아래,왼쪽,위,오른쪽)
par(xpd=T, mar=par()$mar+c(0,0,0,15))
plot(food$sweetness,food$crunchiness,
pch=as.integer(food$class),
#pch=food$class, # pch는 모형 지정
xlab = "sweetness", ylab = "crunchiness",
main = "What is tomato class?")
legend(10.5,10, # legend 위치 지정
c("Fruits", "Proteins", "Vegetables", "X"),
pch=as.integer(food$class))
text(food$sweetness, food$crunchiness,
labels=food$ingredient,
pos = 3, # 글자위치position(1:below/2:left/3:above/4:right)
offset = 0.3, # 좌표와 얼마나 띄어쓰기 할것인지
cex = 0.7 ) # 문자크기
# 그래프 그리기(version : ggplot2)
ggplot(data=food,aes(x=sweetness,y=crunchiness))+
labs(title="What is tomato class?")+ # 타이틀 명
geom_point(aes(color=class, shape=class),size=6)+
geom_text(aes(label=ingredient), # 라벨링 표시
vjust=-1, # 수직으로 움직일 거리 (위는 -, 아래는 +)
size = 5) # 문자크기
■ 구현 코드
install.packages("readr")
install.packages("ElemStatLearn")
install.packages("class")
library(readr)
#1.과적합에 대하여.
library(ElemStatLearn)
library(class)
x <- mixture.example$x
x
g <- mixture.example$y
g
xnew <- mixture.example$xnew
xnew
#k=1, 10 , 30 , 50 , 100, 1000
#k값이 지나치게 작을 때: 분류 경계선이 너무 디테일 하다. : 과적합
mod1
prob1 <- attr(mod1, "prob")
prob1
prob1 <- ifelse(mod1=="1", prob1, 1-prob1)
prob1
px1 <- mixture.example$px1
px2 <- mixture.example$px2
prob1 <- matrix(prob1, length(px1), length(px2))
par(mar=rep(2,4))
#윤곽선
contour(px1, px2, prob1, levels=0.5,
labels="", xlab="", ylab="", main= "k-nearest neighbour", axes=FALSE)
points(x, col=ifelse(g==1, "coral", "cornflowerblue"))
gd <- expand.grid(x=px1, y=px2)
#배경
points(gd, pch=".", cex=1.2, col=ifelse(prob1>0.5, "coral", "cornflowerblue"))
install.packages('class')
library(class)
install.packages('gmodels')
library(gmodels)
install.packages("scales")
library(scales)
######[KNN] using algorithm######################################################
####movie data load
colnames(movie)<-c("title","kick","kiss","genre")
movie$genre<-factor(movie$genre, levels= c('Romance','Action')) # covert genre column into a factor
summary(movie[c("kick",'kiss')]) # do not need to normalize
######data partition
movie_train<- movie[1:6,2:3]
movie_test<-movie[7,2:3]
movie_train_label <- movie[1:6,4]
######classification
movie_test_matrix <-rbind( movie_test, movie_test, movie_test,movie_test,movie_test,movie_test)
movie_test_matrix
distances <- sqrt(apply((movie_test_matrix-movie_train)**2,1,sum))
sortedDistIndicies <- order(distances) #rearrange disctances into ascending order ( index)
#distances[order(distances)] #sort by distances
#k <- readline(prompt('enter k value'))
classCount <- movie_train_label[sortedDistIndicies[c(1:3)]]
classCount
sortedClassCount <-table(classCount)
sortedClassCount
movie_test_pred<-names(sortedClassCount[sortedClassCount==max(sortedClassCount)])
movie_test_pred
########plot graph
plot(movie[1:6,]$kick~movie[1:6,]$kiss, data=movie[1:6,], col=alpha(c('red','blue'),0.7)[movie[1:6,]$genre], xlab='kiss count', ylab='kick count', main='movie data')
points(movie[7,]$kiss,movie[7,]$kick, data=movie[7,], pch=15, cex=1.2, col = 'orange')
legend('topright', c(levels(movie$genre), "test"), pch =c(1,1,15), col=c(alpha(c('red','blue'),0.7),'orange'), cex=0.9)
######using packages######################################################
### Data load
movie<-read.csv('/Users/misoni/Desktop/movie.csv',header=F, stringsAsFactors=F)
colnames(movie)<-c("title","kick","kiss","genre")
movie$genre<-factor(movie$genre, levels= c('Romance','Action'))
summary(movie[c("kick",'kiss')])
##normalization
#normalize <-function(x) {
# return ( (x-min(x)) / (max(x)-min(x)) )
#}
####split data
movie_train <- movie[1:6,2:3]
movie_test <- movie[7,2:3]
movie_train
movie_test
movie_train_label <- movie[1:6,4]
movie_test_label <- movie[7,4]
movie_test_label
####modeling
movie_test_pred <- knn(train=movie_train, test=movie_test, cl=movie_train_label, k=3,prob=T)
movie_test_pred
table(movie_test_pred)
library(gmodels)
#CrossTable(x=movie_test_label, y=movie_test_pred)
#####################################################################
###########iris data#######################################################
########normalize data
str(iris)
table(iris$Species)
normalize<-function(x){
return ((x-min(x))/ (max(x)-min(x)))
}
iris_n <- as.data.frame(lapply(iris[1:4], normalize ))
#########split data
set.seed(1)
train <- round(0.7*dim(iris)[1])
train_index = sample(1:dim(iris)[1], train, replace =F)
iris_train <- iris_n[train_index,]
iris_test <- iris_n[-train_index,]
iris_train_label <- iris[train_index,5]
iris_test_label <- iris[-train_index,5]
iris_train_label
prop.table(table(iris_train_label))
prop.table(table(iris_test_label))
###
###########modeling
iris_test_pred <- knn(train=iris_train, test=iris_test, cl=iris_train_label, k=3, prob=T)
'R(알) ' 카테고리의 다른 글
R 5장. 결정트리 (0) | 2017.09.08 |
---|---|
R 4장. 나이브 베이즈의 이해활용한 기계학습4 (0) | 2017.09.08 |
R 3장. knn (최근접 이웃을 사용한 분류의 이해) (0) | 2017.09.08 |
R 1장 R기본문법 (0) | 2017.09.08 |
R 1장 R기본문법 (0) | 2017.07.06 |