Created
July 28, 2017 05:54
-
-
Save enujo/3788d891dc49b0ede67656e863add884 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# getwd() | |
# setwd("D:/BigData/Source") | |
# getwd() | |
# 1~20까지의 값을 갖는 5행 4열의 행렬 mData생성 | |
mData <- matrix(c(1:20), nrow=5) | |
mData | |
# mData의 1열을 제외한 2~4열의 값을 갖는 행렬 mdData 생성 | |
mdData <- mData[,-1] # 행이라면 반대로 [-1,] | |
mdData | |
# mData의 각 행의 합을 출력 | |
sumData <- apply(mData,1,sum) # 행 | |
sumData | |
sumData <- apply(mData,2,sum) # 열 | |
sumData | |
# breastcancer.csv 파일 불러오기 | |
bcData <- read.csv("./BigData/breastcancer.csv") | |
# bcData를 편집기로 확인 | |
fix(bcData) | |
# bcData 기본적인 데이터 구성 확인 데이터가 어떤 속성으로 구성되어 있는지 | |
str(bcData) # b는 1 m은 2 Factor 두가지라는 소리 | |
# 환자를 식별하는 값이 id 열은 행으로 구분할 수 있기 때문에 제거하고 분석 | |
bcDelData <- bcData[-1] | |
bcDelData | |
# 예측하고자 하는 정보는 진단 | |
# 진단 열의 종류와 값의 정보 출력 | |
table(bcDelData$진단) | |
bcDelData$진단[3] | |
# 예측하고자 하는 정보가 가독성이 어려운 경우에는 가독성을 갖도록 정보를 변경 | |
str(bcData) | |
# 진단 열의 데이터 클래스 형식이 Factor 를 변경할때는 replace가 아닌 factor를 이용 | |
bcDelData$진단 <- factor(bcDelData$진단, levels =c("B","M"), c("양성","악성")) | |
bcDelData | |
# 진단 열의 값의 확률을 확인 : prop.table() | |
table(bcDelData$진단) | |
prop.table(table(bcDelData$진단)) | |
# 소수점 이하의 출력을 제어 | |
round(prop.table(table(bcDelData$진단))*100,1) | |
# 사용자 함수 생성 : normalize | |
# 값을 표준화 (0~1)하는 함수 | |
normalize <- function(x){ | |
result <- (max(x)-min(x) -(max(x)-x)) / (max(x)-min(x)) | |
#rangeN<- max(x) min(x) | |
#result <- (rangeN - (max(x)-x)) / rangeN | |
return(result) | |
} | |
normalize(c(1,2,3,4,5)) | |
normalize(c(0.01,0.02,0.03,0.04,0.05)) | |
# 진단 항목을 제외한 모든 항목을 normalize함수를 사용하여 값을 표준화 | |
fix(bcDelData) | |
# 데이터 프레임 형식의 항목들을 함수처리 하는 경우에는 lapply() 행렬의 합 곱 등 | |
bcData_normalize <- as.data.frame(lapply(bcDelData[2:31],normalize))#32개중에 id 빼서 31개 진단을 빼고 | |
fix(bcData_normalize) | |
# 데이터를 훈련(training)데이터와 평가(test)데이터로 구분 | |
bcData_train <- bcData_normalize[1:469,] # 행으로 자름 | |
bcData_train | |
bcData_test <- bcData_normalize[470:569,] | |
bcData_test | |
# 진단 항목에 대한 데이터도 훈련데이터와 평가 데이터로 구분 | |
bcData_train_label <- bcDelData[1:469, 1] # 1부터469까지 첫번째를 가져옴 470or 500 으로하면 1:1 매칭이 안된다 | |
bcData_train_label | |
bcData_test_label <- bcDelData[470:569, 1] | |
bcData_test_label | |
# knn 알고리즘을 실행하기 위해서 필요한 라이브러리 설치 | |
install.packages("class") | |
library(class) | |
# knn알고리즘 : knn(훈련데이터, 평가데이터, 분석할 값(범주), 이웃의 개수) | |
# train : 학습용 데이터/test : 평가용 데이터/ cl : 학습용 데이터의 결과(진단)요소/ k : 평가의 고려되는(계산되는) 이웃한 데이터(값)의 개수 | |
bcData_eval_pred<-knn(train=bcData_train, test=bcData_test,cl=bcData_train_label, k=5) #주로 k값은 홀수로 값을 변경하며 3개보단 5개를 했을때 좋은 결과를 도출 | |
bcData_eval_pred | |
# 예측한 결과를 테이블 형식으로 확인할때 사용 : crossTable() | |
install.packages("gmodels") | |
library(gmodels) | |
CrossTable(x=bcData_test_label, y=bcData_eval_pred, prop.chisq = FALSE) | |
# 출력 결과를 그래프로 그리기 | |
install.packages("ggplot2") | |
library(ggplot2) | |
qplot(bcData_train$반지름_평균, bcData_train$부드러움_평균, data=bcData_train, color=bcData_train_label) | |
qplot(bcData_train$대칭도_평균, bcData_train$오목점_평균, data=bcData_train, color=bcData_train_label) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment