第2章 数据分析
#machine learing for heckers
#chapter 2
library(ggplot2) heights.weights <- read.csv("ML_for_Hackers/02-Exploration/data/01_heights_weights_genders.csv", header = TRUE, sep = ",")
#不同区间宽度的直方图
ggplot(heights.weights, aes(x = Height)) + geom_histogram(binwidth = 1) ggplot(heights.weights, aes(x = Height)) + geom_histogram(binwidth = 5) ggplot(heights.weights, aes(x = Height)) + geom_histogram(binwidth = 0.001)
#密度曲线图
ggplot(heights.weights, aes(x = Height)) + geom_density()
#峰值处平坦,考虑图像有结构缺失,根据性别分别绘制密度曲线图
ggplot(heights.weights, aes(x = Height, fill = Gender)) + geom_density() ggplot(heights.weights, aes(x = Weight, fill = Gender)) + geom_density() ggplot(heights.weights, aes(x = Weight, fill = Gender)) + geom_density() + facet_grid(Gender ~ .)
#正态分布:钟形的窄尾分布,单峰对称
#柯西分布:钟形的重尾分布,单峰对称
set.seed(1) normal.values <- rnorm(250, 0, 1) cauchy.values <- rcauchy(250, 0, 1) ggplot(data.frame(X = normal.values), aes(x = X)) + geom_density() ggplot(data.frame(X = cauchy.values), aes(x = X)) + geom_density()
#gamma分布
#gamma分布只有正值
gamma.values <- rgamma(100000, 1, 0.001) ggplot(data.frame(X = gamma.values), aes(x = X)) + geom_density()
#从身高体重预测性别(分类器)
#书中代码画图命令有"stat_abline"完成添加直线操作,而package: ggplot2(version 2.1.0)中"stat"族函数已经没有"abline",只能用"geom"族完成
heights.weights <- transform(heights.weights, Male = ifelse(Gender == 'Male', 1, 0)) logit.model <- glm(Male ~ Weight + Height, data = heights.weights, family = binomial(link = 'logit')) ggplot(heights.weights, aes(x = Height, y = Weight, color = Gender)) + geom_point() + geom_abline(intercept = -coef(logit.model)[1]/coef(logit.model)[2], slope = -coef(logit.model)[3]/coef(logit.model)[2], color = 'black')