标签归档:模型

美国统计协会开始正式吐槽(错用)P值啦

(图片来源:https://xkcd.com/1478,一幅讽刺滥用P值的漫画)

今天美国统计协会(ASA)正式发布了一条关于P值的声(吐)明(槽),算起来可以说是近期统计学界的一件大事了。为什么这么说呢?首先,P值的应用太广,所以对P值进行一些解释和声明非常有必要。其次,对P值的吐槽历来有之,但今天是第一次被一个大型的专业协会以非常正式的形式进行澄清,多少带有一些官方的意思。声明的全文可以在这个页面中下载。

那么这则声明里面都说了什么呢?小编整体读了一遍,把我认为重要的信息概括在这篇文章之中。

首先,ASA介绍了一下这则声明诞生的背景。2014年,ASA论坛上出现了一段如下的讨论:

问:为什么那么多学校都在教 p = 0.05?

答:因为那是科学团体和期刊编辑仍然在用的标准。

问:为什么那么多人还在用 p = 0.05?

答:因为学校里还在这么教。

看上去多少有点讽刺的味道,但事实却也摆在眼前。从舆论上看,许许多多的文章都在讨论P值的弊端,小编摘录了几条言辞比较激烈的:

这是科学中最肮脏的秘密:使用统计假设检验的“科学方法”建立在一个脆弱的基础之上。——ScienceNews(Siegfried, 2010)

假设检验中用到的统计方法……比Facebook隐私条款的缺陷还多。——ScienceNews(Siegfried, 2014)

针对这些对P值的批评,ASA于是决定起草一份声明,一方面是对这些批评和讨论作一个回应,另一方面是唤起大家对科学结论可重复性问题的重视,力图改变长久以来一些已经过时的关于统计推断的科学实践。经过长时间众多统计学家的研讨和整理,这篇声明今天终于出现在了我们面前。

P值是什么

这份声明首先给出了P值一般的解释:P值指的是在一个特定的统计模型下,数据的某个汇总指标(例如两样本的均值之差)等于观测值或比观测值更为极端的概率。

这段描述是我们通常能从教科书中找到的P值定义,但在实际问题中,它却经常要么被神话,要么被妖魔化。鉴于此,声明中提出了六条关于P值的准则,作为ASA对P值的“官方”态度。这六条准则算是这条声明中最重要的部分了。

继续阅读美国统计协会开始正式吐槽(错用)P值啦

一行R代码来实现繁琐的可视化

本文作者: 唐源,目前就职于芝加哥一家创业公司,曾参与和创作过多个被广泛使用的 R 和 Python 开源项目,是 ggfortify,lfda,metric-learn 等包的作者,也是 xgboost,caret,pandas 等包的贡献者。(喜欢爬山和烧烤

ggfortify 是一个简单易用的R软件包,它可以仅仅使用一行代码来对许多受欢迎的R软件包结果进行二维可视化,这让统计学家以及数据科学家省去了许多繁琐和重复的过程,不用对结果进行任何处理就能以 ggplot 的风格画出好看的图,大大地提高了工作的效率。

ggfortify 已经可以在 CRAN 上下载得到,但是由于最近很多的功能都还在快速增加,因此还是推荐大家从 Github 上下载和安装。

library(devtools)
install_github('sinhrks/ggfortify')
library(ggfortify)

接下来我将简单介绍一下怎么用 ggplot2ggfortify 来很快地对PCA、聚类以及LFDA的结果进行可视化,然后将简单介绍用 ggfortify 来对时间序列进行快速可视化的方法。

PCA (主成分分析)

ggfortify 使 ggplot2 知道怎么诠释PCA对象。加载好 ggfortify 包之后, 你可以对stats::prcompstats::princomp 对象使用 ggplot2::autoplot

library(ggfortify)
df <- iris[c(1, 2, 3, 4)]
autoplot(prcomp(df))

ggfortify-unnamed-chunk-1-1你还可以选择数据中的一列来给画出的点按类别自动分颜色。输入help(autoplot.prcomp) 可以了解到更多的其他选择。

autoplot(prcomp(df), data = iris, colour = 'Species')

ggfortify-unnamed-chunk-2-1比如说给定label = TRUE 可以给每个点加上标识(以rownames为标准),也可以调整标识的大小。

autoplot(prcomp(df), data = iris, colour = 'Species', label = TRUE,
         label.size = 3)

ggfortify-unnamed-chunk-3-1给定 shape = FALSE 可以让所有的点消失,只留下标识,这样可以让图更清晰,辨识度更大。

autoplot(prcomp(df), data = iris, colour = 'Species', shape = FALSE,
         label.size = 3)

ggfortify-unnamed-chunk-4-1

继续阅读一行R代码来实现繁琐的可视化

极简 Spark 入门笔记——安装和第一个回归程序

现在的各种数据处理技术更新换代太快,新的名词和工具层出不穷,像是 Hadoop 和 Spark 这些,最近几年着实火了一把。事实上听说 Spark 也有一段时间了,但一直是只闻其名不见其实,今天就来简单记录一下初学 Spark 的若干点滴。

Spark 是什么

按照 Spark 官方的说法,Spark 是一个快速的集群运算平台,以及一系列处理大型数据集的工具包。用通俗的话说,Spark 与 R 一样是一套用于数据处理的软件和平台,但它最显著的特点就是处理大型数据(我就是不说大数据 ( ̄^ ̄))的能力。

极简安装

Spark 本身面向的是大规模的分布式计算,但对学习和测试来说,利用单机的多核 CPU 就已经足够了,所以作为入门,我并没有打算去涉及多台计算机相连的情形。在这个基础上,第一件出乎我意料的事情就是,Spark 的安装和配置其实可以是异常简单的。

在网上出现的各种资料中,Spark 经常与 Hadoop 和 Scala 这两个名词一起出现。前者也是一个大型分布式计算的框架,诞生得比 Spark 更早;后者是 Spark 主要使用的一种编程语言。这就给不明真相的群众造成了一种印象,好像要使用 Spark 的话就得先安装配置好 Hadoop 和 Scala,而要安装它们又得有更多的软件依赖。但实际上,要在单机上使用 Spark,真正需要的只有下面几样:

  1. 一台金光闪闪的电脑
  2. 在上面这台电脑里面装一个金光闪闪的 Linux 操作系统
  3. 在上面这个系统里面装一个金光闪闪的 Java 开发环境(JDK)

这三样可以说是大部分计算环境的标配,如果系统还没有安装 JDK,那么一般都可以用系统的包管理工具,比如 Fedora 下是

sudo yum install java-1.8.0-openjdk

Ubuntu 下是

sudo apt-get install openjdk-7-jdk

有了上面的开发环境,安装 Spark 就非常容易了,基本上只要下载预编译包,解压缩,然后添加系统路径即可。首先,到 https://spark.apache.org/downloads.html 选择最新的 Spark 版本和 Hadoop 版本(实际上我们暂时用不上 Hadoop,所以任何版本都行),然后下载压缩包。 继续阅读极简 Spark 入门笔记——安装和第一个回归程序

recommenderlab 包实现电影评分预测

recommenderlab 是R语言非常强大的包,能帮助使用者针对评分数据或者0-1(不喜欢/喜欢)二分数据开发和测试推荐算法,本文就是利用该包对于 movielens 的电影评分数据进行预测和推荐,会对比基于用户的协同过滤和基于项的协同过滤在推荐效果上的差别。

1 获取电影数据

电影数据来源于http://grouplens.org/datasets/movielens/网站,本文分析的数据是MovieLens 100k,总共有100,000个评分,来自1000位用户对1700部电影的评价。

2 数据准备和清理

设置好工程路径后,可用读入数据,注意数据的格式,第一列是 user id,第二列是 item id,第三列是 rating,第四列是时间戳,时间戳这里用不到,可去掉。

> ml100k <- read.table("u.data", header = F, stringsAsFactors = T)

> head(ml100k)

   V1  V2 V3        V4

1 196 242  3 881250949

2 186 302  3 891717742

3  22 377  1 878887116

> ml100k <- ml100k[, -4]

可以简单看下 rating 的分布情况

> prop.table(table(ml100k[, 3]))

         1          2          3          4          5

0.06106870 0.12977099 0.41984733 0.32061069 0.06870229

> summary(ml100k[, 3])

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's

  1.000   3.000   3.000   3.206   4.000   5.000     812

可以看出,3 星和 4 星的数量最多,接近总数的75%,1 星和 5 星的数量最少,和预期的一致。数据格式和我们想要的行为用户,列为项目的 ratingMatrix 还有很大的差距,对此可以使用 reshape 包的 cast() 进行转换,注意转换后的缺失值默认为NA。

> library(reshape)

> ml100k <- cast(ml100k, V1 ~ V2, value = "V3")

> ml.useritem[1:3, 1:6]

   1  2  3  4  5  6

1  5  3  4  3  3  5

2  4 NA NA NA NA NA

3 NA NA NA NA NA NA

到此,把数据整理成 ratingMatrix,接下来利用 recommenderlab 处理数据。
继续阅读recommenderlab 包实现电影评分预测