Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 순위출력
- count
- 불순도제거
- 팀스파르타
- sql
- 데이터분석
- 히스토그램 그리기
- merge
- max
- 막대그래프
- 회귀분석 알고리즘
- loop 문
- if문 작성법
- Sum
- Intersect
- Dense_Rank
- 그래프시각화
- 데이터분석가
- 여러 데이터 검색
- 상관관계
- %in%
- 정보획득량
- 단순회귀 분석
- 회귀분석
- 빅데이터
- 총과 카드만들기
- sqld
- 그래프 생성 문법
- difftime
- 빅데이터분석
Archives
- Today
- Total
ch0nny_log
[빅데이터분석] R _ 47. 데이터의 전반적인 관찰(평균,중앙,최빈,표준편차,분산, 정규화) 본문
■평균,중앙,최빈,표준편차,분산
평균값 --> 중앙값 --> 최빈값 --> 범위 --> 사분위수 범위 --> 분산 --> 표준 편차 | |
↓ | ↓ |
데이터 중심은 어디인지? | 데이터 분포를 파악 |
문법1. 중고차 데이터의 전반적인 관찰
설명: 데이터가 숫자로만 이루어졌으면 --> knn 알고리즘이용car<-read.csv('c:\\data\\usedcars.csv') str(car) summary(car)
데이터가 숫자로만 이루어짐 | knn 알고리즘 |
데이터가 문자로만 이루어짐 | 나이브베이즈 알고리즘 |
데이터가 숫자,문자 섞여있음 | 의사결정트리, 랜덤 포레스트, 신경망등 |
문제1. 유방암 데이터는 어떤 머신러닝 알고리즘이 적당한지 데이터를 관찰하시오.
wisc <- read.csv('c:\\data\\wisc_bc_data.csv') str(wisc)
-> 다 숫자이기 때문에 knn 알고리즘에 적합한 데이터임.
문법 2. 결측치가 얼마나 있는지 확인.
결측치가 너무 많으면 기계학습이 잘 안됨.
-> 결측치가 너무 많으면 삭제/ 삭제하기 애매하면 다른 값으로 치환
-> age에 177건이나 있어서 이 값을 처리해줘야됨.tat <- read.csv('c:\\data\\tatanic2.csv',header= T) colSums(is.na(tat))
nrow(tat) #전체 건수 확인
-> 절반이 넘는 데이터의 결측치가 아니기 때문에 다른값(보통 평균값) 으로 결측치를 채움
-> null 값이 없어진 것을 확인 할 수있음tat$age[is.na(tat$age)] <- mean(tat$age, na.rm = TRUE) # null 값을 평균으로 바꿈 colSums(is.na(tat))
※ 컬럼의 결측치가 50% 가 넘어가면 아예 컬럼을 삭제하는게 낫습니다.
만약에 tat 에 age 컬럼을 삭제하려면 ?
tat <- subset( tat, select = -age ) str(tat)
정리: 50% 이상 결측치면 컬럼 삭제가 바람직하고 그렇지 않으면 숫자 데이터이면 결측치를 평균값, 중앙값, 회귀예측값으로 치환 그렇지 않고 문자 데이터면 최빈값이나 결측치 위 아래 데이터로 치환합닌다.
문법 3. 이상치 제거.
특히 종속변수의 이상치를 확인해야 되고 그 다음 중요한 독립 변수들의 이상치를 확인 해야합니다.
-> 이상치의 데이터를 제거/ 다른값으로 치환
1. 박스 플롯으로 이상치 확인.
car <- read.csv('c:\\data\\usedcars.csv',header= T) a<- boxplot(car$price) a$out
-> 4개 밖에 없어서 삭제해도 되지만 평균 값으로 바꿔도 됨.
2. 중고차 가격의 이상치를 평균값으로 치환
# 이상치에 해당하는 데이터의행 번호를 추출추출함 out_indx <-which(car$price %in% outlier) out_indx # 이상치를 제외한 평균을 계산함 mean_price <-mean(car$price[!car$price %in% outlier], na.rm = TRUE) mean_price # 이상치를 평균값으로 치환 car$price[out_indx] <- mean_price
※ 정확도를 올리기 위한 전처리 작업 |
1. 적합한 머신러닝 모델을 잘 선택합니다. |
2. 결측치 처리 |
3. 이상치 처리 |
■ 정규화 고려
데이터 스케일링(Data Scaling) 이란 서로 다른 변수의 값 범위를 일정한 수준으로 맞춰주는 작업을 의미함
-> 아무리 좋은 데이터를 가지고 있어도 그 데이터로 기계학습을 시키기 위해서는 데이터 스케일링을 해야함
-> ex) 비만 여부를 기계에게 학습시키려고 체중과 키 컬럼 데이터를 학습(독립: 체중,키 / 종속: 비만여부)
-> 키 데이터가 체중보다 크다고 해서 기계가 체중은 중요하지 않고
키만 중요하다고 인식하면 안되므로 둘다 똑같은 수준으로 맞춰주는 작업을 해야함
* 데이터 스켈링 대표적 2가지 | |
1. 최대 최소 정규화 | 데이터를 0~1사이의 값으로 변환하는 것 |
2. 표준화 | 데이터를 0을 중심으로 양쪽으로 분포시키는것 |
예제1. 중고차 가격과 마일리지를 최대 최소 정규화 하시오 !
car <- read.csv("usedcars.csv", header=T) normalize <- function(x) { return ( ( x-min(x) ) / ( max(x) - min(x) ) ) } car_n <-as.data.frame(lapply(car[ ,c('price','mileage')],normalize)) car_n car2<- cbind(car[ ,c('year','color','transmission')],car_n) car2 summary(car2) summary(car)
예제2. 중고차의 가격과 마일리지를 표준화로 스케일링하시오.
car <- read.csv("usedcars.csv", header=T) normalize <- function(x) { return ( mean(x)/sd(x) ) } car_n <-as.data.frame(lapply(car[ ,c('price','mileage')],normalize)) car_n car2<- cbind(car[ ,c('year','color','transmission')],car_n) car2
문제1. 유방암 데이터를 최대 최소 정규화하시오
wisc <- read.csv("c:\\data\\wisc_bc_data.csv", stringsAsFactors=T) head(wisc) str(wisc) head( wisc[ , 3:32 ] ) # 3번째 컬럼부터 32번째 컬럼까지 head(wisc[ , 1:2 ] ) # id 와 diagnosis 답: normalize <- function(x) { return ( ( x-min(x) ) / ( max(x) - min(x) ) ) } wisc_n <- as.data.frame( lapply( wisc[ , 3:32 ] , normalize) ) wisc_n wisc2 <- cbind( wisc[ , 1:2 ] , wisc_n ) wisc2 summary(wisc2) summary(wisc)
문제.2. 최대 최소 정규화 하기전의 데이터와 한 후의 데이터를 시각적으로비교하시오.
# 현재 그래픽 디바이스 종료 graphics.off() # 필요한 패키지 설치 및 로드 install.packages("ggplot2") library(ggplot2) # 가상의 데이터셋 생성 set.seed(123) # 재현성을 위해 시드 설정 data <- data.frame(value = rnorm(1000, mean = 50, sd = 10)) # 최대 최소 정규화 함수 min_max_normalize <- function(x) { return((x - min(x)) / (max(x) - min(x))) } # 정규화된 데이터 추가 data$normalized_value <- min_max_normalize(data$value) # 다시 히스토그램 비교 hist_before <- ggplot(data, aes(x = value)) + geom_histogram(binwidth = 1, fill = 'blue', alpha = 0.7) + ggtitle("Before Min-Max Normalization") + theme_minimal() hist_after <- ggplot(data, aes(x = normalized_value)) + geom_histogram(binwidth = 0.05, fill = 'red', alpha = 0.7) + ggtitle("After Min-Max Normalization") + theme_minimal() # 그래프 출력 install.packages('gridExtra') library(gridExtra) grid.arrange(hist_before, hist_after, ncol = 2)
설명: 독립변수가 여러개가 있으면 기계 학습할 때 오해할 수 있음 따라서 독립변수를 0~1 사이의 값으로 처리해서 오해하지 않게함.
★ 마지막문제. iris2.csv를 불러와서 iris 데이터 프레임을 만든 후에 최대최소 정규화를 하시오. (컬럼중 하나를 선택해서 시각화 하시오)
# 데이터 업로드 iris <- read.csv('c:\\datafile\\iris2.csv',stringsAsFactors = T) iris # 최대 최소 정규화 normalize <- function(x){ return ((x - min(x))/(max(x) - min(x))) } iris_n <- as.data.frame( lapply( iris[ , 1:3 ], normalize)) iris_n iris2 <- cbind( iris[, c("Species") ], iris_n) iris2 # 데이터 요약약 summary(iris2) # 히스토그램 비교 hist_before <- ggplot(iris, aes(x = Sepal.Length )) + geom_histogram(binwidth = 1, fill = 'blue', alpha = 0.7) + ggtitle("Before Min-Max Normalization") + theme_minimal() hist_after <- ggplot(iris2, aes(x = Sepal.Length )) + geom_histogram(binwidth = 0.05, fill = 'red', alpha = 0.7) + ggtitle("After Min-Max Normalization") + theme_minimal() #그래프 도출 library(gridExtra) grid.arrange(hist_before, hist_after, ncol = 2)
'빅데이터 분석(with 아이티윌) > R' 카테고리의 다른 글
[빅데이터분석] R _ 49. 산포도그래프와 상관계수 (0) | 2024.07.09 |
---|---|
[빅데이터분석] R _ 48. 왜도와 첨도 (0) | 2024.07.09 |
[빅데이터분석] R _ 46. R 자료구조 팩터 /데이터를 로드 방법 (0) | 2024.07.08 |
[빅데이터분석] R _ 45. 데이터 시각화 10 (사회 연결망 그래프) (1) | 2024.07.08 |
[빅데이터분석] R _ 44. 데이터 시각화 9 (소리데이터) (0) | 2024.07.04 |