机器学习之逻辑回归(2)

接机器学习之逻辑回归(1),尝试判别分析和多元自适应回归样条方法对数据集的预测能力。
线性判别分析即LDA,可通过MASS包实现,语法和lm()与glm()相似。

lda.fit <- lda(class~.,data = train)
lda.fit
Call:
lda(class ~ ., data = train)
Prior probabilities of groups:
benign malignant
0.6462 0.3538
Group means:
V1 V2 V3 V4 V5 V6 V7 V8 V9
benign 3.007 1.348 1.410 1.374 2.125 1.334 2.131 1.298 1.079
malignant 7.084 6.503 6.533 5.557 5.263 7.713 5.850 5.898 2.904
Coefficients of linear discriminants:
LD1
V1 0.189076
V2 0.107205
V3 0.081504
V4 0.032985
V5 0.100915
V6 0.268742
V7 0.112070
V8 0.080503
V9 0.004782

良性概率大约为64%,恶性概率大约为36,我们可以使用plot()函数,画出判别评分的直方图和密度图。

biopsy03.png

可以看出,组间有些重合,这表明有些预测被错误分类。

提取良性和恶性其中一列

train.lad.fit0 <- predict(lda.fit,type = "response")$posterior[,2]
train.lad.fit <- ifelse(train.lad.fit0>=0.5,1,0)
misClassError(trainY,train.lad.fit)
[1] 0.0424
confusionMatrix(trainY,train.lad.fit)
0 1
0 298 13
1 7 154

lda在测试集上表现比训练集好得多。

test.lda.probs0 <- predict(lda.fit,newdata = test)$posterior[,2]
test.lda.probs <- ifelse(test.lda.probs0>=0.5,1,0)
misClassError(testY,test.lda.fit)
[1] 0.0284
confusionMatrix(testY,test.lda.fit)
0 1
0 138 5
1 1 67

下面用二次判别分析(QDA)模型来拟合一下数据。

qda.fit <- qda(class~.,data = train)
test.qda.probs0 <- predict(qda.fit,newdata = test)$posterior[,2]
test.qda.probs <- ifelse(test.qda.probs0>=0.5,1,0)
misClassError(testY,qda.fit.probs)
[1] 0.0237
confusionMatrix(testY,qda.fit.probs)
0 1
0 135 1
1 4 71

看起来QDA模型准确率最高。再用多元自适应回归样条方法拟合一下模型。
(pmothod ="cv",nfold=5),五折交叉验证
(ncross=3),重复3次
(degree=1),使用没有交互项的加法
(minspan=-1),每个输入特征指使用一个铰链函数

library(earth)
set.seed(1)
earth.fit <- earth(class~.,data = train,pmethod = "cv",nfold = 5,ncross = 3,degree = 1,minspan=-1,glm = list(family=binomial))
summary(earth.fit)
Call: earth(formula=class~., data=train, pmethod="cv", glm=list(family=binomial),
degree=1, nfold=5, ncross=3, minspan=-1)
GLM coefficients
malignant
(Intercept) -5.6101
V2 0.0020
V3 0.3348
V6 0.3915
V8 0.1398
h(V1-3) 0.6547
h(V5-2) 0.2609
h(3-V7) -1.1045

h(V7-3) 0.3524
Earth selected 9 of 11 terms, and 7 of 9 predictors using pmethod="cv"
Termination condition: RSq changed by less than 0.001 at 11 terms
Importance: V6, V2, V1, V8, V7, V5, V3, V4-unused, V9-unused
Number of terms at each degree of interaction: 1 8 (additive model)
Earth GRSq 0.8271 RSq 0.8387 mean.oof.RSq 0.825 (sd 0.0322)
GLM null.deviance 613.4 (471 dof) deviance 85.3 (463 dof) iters 8
pmethod="backward" would have selected:
8 terms 7 preds, GRSq 0.8273 RSq 0.8374 mean.oof.RSq 0.8232

plot()函数可以画出控制其他变量保持不变,某个预测变量发生变化时,响应变量发生的改变。

biopsy04.png

通过plotd()函数,可以生成按类别标签分类的预测概率密度图。

biopsy05.png

下面看看变量之间的相对重要性。
nsubsets是精简过程完成后包含这个变量的模型的个数
gcv和rss列是这个变量贡献减少量

evimp(earth.fit)
nsubsets gcv rss
V6 8 100.0 100.0
V2 7 41.4 42.3
V1 6 22.3 24.2
V8 5 13.4 16.1
V7 4 9.2 12.2
V5 3 6.0 9.2
V3 2 0.7 5.9

再看下模型在测试集上的表现。

test.earth.probs0 <- predict(earth.fit,newdata = test,type = "response")
test.earth.probs <- ifelse(test.earth.probs0>=0.5,1,0)
misClassError(testY,test.earth.probs)
[1] 0.0284
confusionMatrix(testY,test.earth.probs)
0 1
0 137 4
1 2 68

4、模型选择
绘制ROC图

library(ROCR)
pred.full <- prediction(test.probs,testclass) perf.full <- performance(pred.full,"tpr","fpr") plot(perf.full,main="ROC",col=1) pred.cv <- prediction(test.cv.probs,testclass)
perf.cv <- performance(pred.cv,"tpr","fpr")
plot(perf.cv,main="ROC",col=2,add=TRUE)
pred.bic <- prediction(test.bic.probs,testclass) perf.bic <- performance(pred.bic,"tpr","fpr") plot(perf.bic,main="ROC",col=3,add=TRUE) pred.lda <- prediction(test.lda.probs,testclass)
perf.lda <- performance(pred.lda,"tpr","fpr")
plot(perf.lda,main="ROC",col=4,add=TRUE)
pred.qda <- prediction(test.qda.probs,testclass) perf.qda <- performance(pred.qda,"tpr","fpr") plot(perf.qda,main="ROC",col=5,add=TRUE) pred.earth <- prediction(test.earth.probs,testclass)
perf.earth <- performance(pred.earth,"tpr","fpr")
plot(perf.earth,main="ROC",col=6,add=TRUE)
legend(0.6,0.6,c("FULL","CV","BIC","lda","qda","earth"),1:6)

biopsy06.png

计算AUC值
performance(pred.full,"auc")@y.values
performance(pred.cv,"auc")@y.values
performance(pred.bic,"auc")@y.values
performance(pred.lda,"auc")@y.values
performance(pred.qda,"auc")@y.values
performance(pred.earth,"auc")@y.values

performance(pred.full,"auc")@y.values
[[1]]
[1] 0.972

performance(pred.cv,"auc")@y.values
[[1]]
[1] 0.9475

performance(pred.bic,"auc")@y.values
[[1]]
[1] 0.9581

performance(pred.lda,"auc")@y.values
[[1]]
[1] 0.9617

performance(pred.qda,"auc")@y.values
[[1]]
[1] 0.9787

performance(pred.earth,"auc")@y.values

[[1]]
[1] 0.965

从结果上看来,qda模型准确率最高,最终选用哪个模型,我们可以权衡模型的准确性与解释性,或者简约性与扩展性。选择之前,我们还可以将训练集和测试集重新随机化,再做一遍分析,比如50/50划分,60/40划分,80/20划分,然后采用最稳定的模型。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容

  • 精灵刀阅读 72评论 0 0
  • 吾日三省: 1.一个人的自在独行最是逍遥。 2.一定要把科二过了,咬咬牙就坚持下去了。 3.做一个外边安静而内心狂...
    高能磷酸阅读 174评论 0 0
  • 落雨如诗,谁在谱写一曲华章? 独坐时光的轩窗,眺望,多少风华写不尽一世尘念,多少柔肠缱绻梦里的芬芳,又有多少花雨湿...
    于丽芳阅读 632评论 2 1