Machine Learning for hackers读书笔记(二)数据分析

#均值:总和/长度

mean()

#中位数:将数列排序,若个数为奇数,取排好序数列中间的值.若个数为偶数,取排好序数列中间两个数的平均值

median()

#R语言中没有众数函数

#分位数

quantile(data):列出0%,25%,50%,75%,100%位置处的数据

#可自己设置百分比

quantile(data,probs=0.975)

#方差:衡量数据集里面任意数值与均值的平均偏离程度

var()

#标准差:

sd()

#直方图,binwidth表示区间宽度为1

ggplot(heights.weights, aes(x = Height)) +geom_histogram(binwidth = 1)

#发现上图是对称的,使用直方图时记住:区间宽度是强加给数据的一个外部结构,但是它却同时揭示了数据的内部结构

#把宽度改成5

ggplot(heights.weights, aes(x = Height)) +geom_histogram(binwidth = 5)

#从上图看,对称性不存在了,这叫过平滑,相反的情况叫欠平滑,如下图

ggplot(heights.weights, aes(x = Height)) +geom_histogram(binwidth = 0.01)

#因此合适的直方图需要调整宽度值.可以选择其他方式进行可视化,即密度曲线图

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() +facet_grid(Gender ~ .)

#以下代码指定分布的均值和方差,m和s可以调整,只是移动中心或伸缩宽度

m <- 0
s <- 1
ggplot(data.frame(X = rnorm(100000, m, s)), aes(x = X)) +geom_density()

#构建出了密度曲线,众数在钟形的峰值处

#正态分布的众数同时也是均值和中位数

#只有一个众数叫单峰,两个叫双峰,两个以上叫多峰

#从一个定性划分分布有对称(symmetric)分布和偏态(skewed)分布

#对称(symmetric)分布:众数左右两边形状一样,比如正态分布

#这说明观察到小于众数的数据和大于众数的数据可能性是一样的.

#偏态(skewed)分布:说明在众数右侧观察到极值的可能性要大于其左侧,称为伽玛分布

#从另一个定性区别划分两类数据:窄尾分布(thin-tailed)和重尾分布(heavy-tailed)

#窄尾分布(thin-tailed)所产生的值通常都在均值附近,可能性有99%

#柯西分布(Cauchy distribution)大约只有90%的值落在三个标准差内,距离均值越远,分布特点越不同

#正态分布几乎不可能产生出距离均值有6个标准差的值,柯西分布有5%的可能性

#产生正态分布及柯西分布随机数

set.seed(1)
normal.values <- rnorm(250, 0, 1)
cauchy.values <- rcauchy(250, 0, 1)
range(normal.values)
range(cauchy.values)

#画图

ggplot(data.frame(X = normal.values), aes(x = X)) +geom_density()


ggplot(data.frame(X = cauchy.values), aes(x = X)) +geom_density()

#正态分布:单峰,对称,钟形窄尾

#柯西分布:单峰,对称,钟形重尾

#产生gamma分布随机数

gamma.values <- rgamma(100000, 1, 0.001)

ggplot(data.frame(X = gamma.values), aes(x = X)) +geom_density()

#游戏数据很多都符合伽玛分布

#伽玛分布只有正值

#指数分布:数据集中频数最高是0,并且只有非负值出现

#例如,企业呼叫中心常发现两次收到呼叫请求的间隔时间看上去符合指数分布

#散点图

ggplot(heights.weights, aes(x = Height, y = Weight)) +geom_point()

#加平滑模式

ggplot(heights.weights, aes(x = Height, y = Weight)) +geom_point() +geom_smooth()

ggplot(heights.weights[1:20, ], aes(x = Height, y = Weight)) +geom_point() +geom_smooth()


ggplot(heights.weights[1:200, ], aes(x = Height, y = Weight)) +geom_point() +geom_smooth()


ggplot(heights.weights[1:2000, ], aes(x = Height, y = Weight)) +geom_point() +geom_smooth()

ggplot(heights.weights, aes(x = Height, y = Weight)) +
geom_point(aes(color = Gender, alpha = 0.25)) +
scale_alpha(guide = "none") +
scale_color_manual(values = c("Male" = "black", "Female" = "gray")) +
theme_bw()

# An alternative using bright colors.
ggplot(heights.weights, aes(x = Height, y = Weight, color = Gender)) +
geom_point()

#
# Snippet 35
#

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)) +
geom_point(aes(color = Gender, alpha = 0.25)) +
scale_alpha(guide = "none") +
scale_color_manual(values = c("Male" = "black", "Female" = "gray")) +
theme_bw() +
stat_abline(intercept = -coef(logit.model)[1] / coef(logit.model)[2],
slope = - coef(logit.model)[3] / coef(logit.model)[2],
geom = ‘abline‘,
color = ‘black‘)

时间: 2024-10-18 12:32:59

Machine Learning for hackers读书笔记(二)数据分析的相关文章

Machine Learning for hackers读书笔记(十二)模型比较

library('ggplot2')df <- read.csv('G:\\dataguru\\ML_for_Hackers\\ML_for_Hackers-master\\12-Model_Comparison\\data\\df.csv') #用glm logit.fit <- glm(Label ~ X + Y,family = binomial(link = 'logit'),data = df) logit.predictions <- ifelse(predict(logit

Machine Learning for hackers读书笔记(十)KNN:推荐系统

#一,自己写KNN df<-read.csv('G:\\dataguru\\ML_for_Hackers\\ML_for_Hackers-master\\10-Recommendations\\data\\example_data.csv')head(df) #得出距离矩阵distance.matrix <- function(df){ #生成一万个NA,并转成100*100的矩阵 distance <- matrix(rep(NA, nrow(df) ^ 2), nrow = nrow

Machine Learning for hackers读书笔记(六)正则化:文本回归

data<-'F:\\learning\\ML_for_Hackers\\ML_for_Hackers-master\\06-Regularization\\data\\' ranks <- read.csv(file.path(data, 'oreilly.csv'),stringsAsFactors = FALSE) library('tm') documents <- data.frame(Text = ranks$Long.Desc.)row.names(documents) &

Machine Learning for hackers读书笔记(三)分类:垃圾过滤(未完成)

#定义函数,打开每一个文件,找到空行,将空行后的文本返回为一个字符串向量,该向量只有一个元素,就是空行之后的所有文本拼接之后的字符串 #很多邮件都包含了非ASCII字符,因此设为latin1就可以读取非ASCII字符 #readLines,读取每一行作为一个元素 get.msg <- function(path){ con <- file(path, open = "rt") text <- readLines(con) # The message always be

Machine Learning for hackers读书笔记(一)使用R语言

#使用数据:UFO数据 #读入数据,该文件以制表符分隔,因此使用read.delim,参数sep设置分隔符为\t #所有的read函数都把string读成factor类型,这个类型用于表示分类变量,因此将stringsAsFactors设置为False #header=F表示文件中并没有表头 #na.string='',表示把空元素设置为R中的特殊值NA,即将所有空元素读成NA ufo<-read.delim('ufo_awesome.tsv',sep='\t',stringsAsFactors

Machine Learning for hackers读书笔记(七)优化:密码破译

#凯撒密码:将每一个字母替换为字母表中下一位字母,比如a变成b. english.letters <- c('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z') caesar.cipher <- list() inverse.caesar.cipher <- list() #加密LIS

Probabilistic Programming and Bayesian Methods for Hackers读书笔记

本文为<Probabilistic Programming and Bayesian Methods for Hackers>读书笔记,网页链接为https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers 由于csdn无法编辑公式,以及上传图片麻烦,所以直接上传word 目录 第1章  贝叶斯方法原则及概率编程初步...3 1.1 贝叶斯推断的哲学意义...3 1.

《R实战》读书笔记二

第一章 R简介 本章概要 1安装R 2理解R语言 3运行R程序 本章所介绍的内容概括如下. 一个典型的数据分析步骤如图1所示. 图1:典型数据分析步骤 简而言之,现今的数据分析要求我们从多种数据源中获取数据.数据合并.标注.清洗和分析,并且把分析的结果进行展示,形成报告或者系统,辅助决策.R能够满足现今数据分析的要求. 为什么用R? R是一个适合统计分析和绘图的环境与语言.它是开源.免费的,获得世界范围社区支持.统计分析和绘图工具已经很多了,例如:SPSS,SAS,Excel,Stata和Min

《卓有成效的程序员》----读书笔记二

六大方面对比Launchy和TypeAndRun(TAR) 对于快速启动工具,很多人都有自己的偏好,多次听到朋友介绍Launchy的好,虽然自己一直在使用着TAR,还是克制不住对于好软件的渴求,下载Launchy进行试用.很多软件都是有一个试用期的,也许新的软件确实不错,但是你习惯了以前使用的那个软件.今天就比较客观的将Launchy和TAR进行一下对比,从界面.上手速度到功能.自定义,以及软件的稳定性.占用资源进行详细的比较. [界面美观]Launchy:毫无疑问这是它的强项.1.0正式版自带