ISLR实验:分类 - 二次判别分析
目录
本文源自《统计学习导论:基于R语言应用》(ISLR) 中《4.6 R实验:逻辑斯谛回归、LDA、QDA和KNN》章节
library(ISLR)
library(MASS)
library(pROC)
数据
股票市场数据
data(Smarket)
head(Smarket)
Year Lag1 Lag2 Lag3 Lag4 Lag5 Volume Today Direction
1 2001 0.381 -0.192 -2.624 -1.055 5.010 1.1913 0.959 Up
2 2001 0.959 0.381 -0.192 -2.624 -1.055 1.2965 1.032 Up
3 2001 1.032 0.959 0.381 -0.192 -2.624 1.4112 -0.623 Down
4 2001 -0.623 1.032 0.959 0.381 -0.192 1.2760 0.614 Up
5 2001 0.614 -0.623 1.032 0.959 0.381 1.2057 0.213 Up
6 2001 0.213 0.614 -0.623 1.032 0.959 1.3491 1.392 Up
训练集和测试集
训练集:2001 至 2004 年
测试集:2005 年
train <- (Year < 2005)
train
是一个布尔变量,Boolean vector
smarket_2005 <- Smarket[!train, ]
dim(smarket_2005)
[1] 252 9
direction_2005 <- Direction[!train]
方法
MASS
包的 qda()
函数实现二次判别分析
qda_fit <- qda(
Direction ~ Lag1 + Lag2,
data=Smarket,
subset=train
)
qda_fit
Call:
qda(Direction ~ Lag1 + Lag2, data = Smarket, subset = train)
Prior probabilities of groups:
Down Up
0.491984 0.508016
Group means:
Lag1 Lag2
Down 0.04279022 0.03389409
Up -0.03954635 -0.03132544
预测
qda_predict <- predict(
qda_fit,
smarket_2005
)
qda_class <- qda_predict$class
列联表
table(direction_2005, qda_class)
qda_class
direction_2005 Down Up
Down 30 81
Up 20 121
mean(qda_class == direction_2005)
[1] 0.5992063
ROC 曲线
plot(
roc(
direction_2005,
qda_predict$posterior[,2],
percent=TRUE
),
print.auc=TRUE,
plot=TRUE
)
参考
https://github.com/perillaroc/islr-study
ISLR实验系列文章
线性回归
分类
重抽样方法
线性模型选择与正则化