ISLR读书笔记(3)分类

阅读: 评论:0

ISLR读书笔记(3)分类

ISLR读书笔记(3)分类

欢迎访问个人主页,目前访问量太低,百度搜不到的说。。。谢谢鼓励
读书笔记,并不打算翻译全文,打算将书中重要的知识点结合自己的理解将其分享,并在最后附上R语言相关函数应用,作为自己最近一段时间在机器学习方面学习总结。如果理解不正确,望指正。

前言

ISLR,全称为An Introduction to Statistical Learning with Applications in R,算是the Elements of Statistical Learning的基础版,里面公式推导并不多,主要是讲解统计学习中的一些常用方法,以及相关方法在R语言上的应用。ISLR官方并没用出习题的答案,不过已经有人做了一份,可以学习参考ISLR答案

第四章理解

这一章讲解了三种分类方法。
1. Logistic Regression(逻辑回归)
2. Linear Discriminant Analysis
3. Quadratic Discriminant Analysis

下面就逐一分析一下四种分类并进行对比。
1.Logistic Regression(逻辑回归)

公式:

log(p(x)1−p(x))=β0+β1X1+β2X2+...
其中, p(x) 为属于某异类的概率,为最后的输出, β 为 Logistic Regression中的参数,一般通过最大似然的方法求出最优解。一般拟合曲线如下:

一般来讲,逻辑回归适合于2种问题的分类,大于2种的分类问题一般采用Discriminant Analysis(判别式分析)。

2.Linear Discriminant Analysis(线性判别式)

事实上判别式方法就是在原有的贝叶斯理论的基础上增加了对模型分布服从正态分布的假设,在线型判别式中,假设不同变量的协方差是相同的

左图中椭圆就是正态分布曲线,两两相交的边界线形成了分类的边界,右图中实线是贝叶斯估计也就是实际的分界线,可以发现,线性判别式法准确度还是很好的。

3.Quadratic Discriminant Analysis(二次判别式)

二次判别式法与线性判别式法唯一的区别就是,假设不同的变量的协方差是不同的,这造成了分界线变现在图像上是弯曲的,将自由度从 p(p+1)/2 增加到了 Kp(p+1)/2 ,K是变量的数量。增加自由度造成的影响可以在读书笔记(1)中看到。

紫色的虚线代表实际的分界线,黑色的虚线代表线性判别式的分界线,绿色的实线代表二次判别式的分界线。可以看到当分界线为线性时,线性判别式法表现较好;当分界线为非线性时,则刚好相反。

4.总结

当实际分界线为线性时,如果数据接近正态分布假设,则线性判别式法表现较好,如果数据并不接近正态分布假设,则逻辑回归法表现较好。
当实际分界线为非线性时,二次将拟合二次判别式,其他的更高次或者不规则情况下,KNN表现优异。

R语言应用

1.导入数据及准备

> library(ISLR)
> dim(Caravan)
[1] 5822   86
> attach(Caravan)
> summary(Purchase)No  Yes
5474  348

因为后面要用到KNN,需要用到距离,所以将变量进行一下归一化处理,归一化程序就一句话,后面几句是显示一下归一化效果。

> standardized.X = scale(Caravan[,-86])
> var(Caravan[,1])
[1] 165.0378
> var(Caravan[,2])
[1] 0.1647078
> var(standardized.X[,1])
[1] 1
> var(standardized.X[,2])
[1] 1

建立测试样本和训练样本

> test = 1:1000
> train.X = standardized.X[-test,]
> test.X = standardized.X[test,]
> train.Y = Purchase[-test]
> test.Y = Purchase[test]

2.Logistic Regression(逻辑回归)

> glm.fit = glm(Purchase~., data=Caravan, family = binomial, subset = -test)
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred
> glm.probs = predict(glm.fit, Caravan[test, ], type="response")
> glm.pred = rep("No", 1000)
> glm.pred[glm.probs>.5]="Yes"
> table(glm.pred, test.Y)test.Y
glm.pred  No YesNo  934  59Yes   7   0
> mean(glm.pred == test.Y)
[1] 0.934

3.Linear Discriminant Analysis(线性判别式)

> library(MASS)
> lda.fit = lda(Purchase~.,data = Caravan, subset = -test)
> lda.pred = predict(lda.fit, Caravan[test,])
> lda.class = lda.pred$class
> table(lda.class, test.Y)test.Y
lda.class  No YesNo  933  55Yes   8   4
> mean(lda.class==test.Y)
[1] 0.937

4.Quadratic Discriminant Analysis(二次判别式)

> qda.fit = qda(Purchase~.,data = Caravan, subset = -test)
Error in qda.default(x, grouping, ...) : rank deficiency in group Yes
> qda.fit = qda(Purchase~ABYSTAND+AINBOED,data = Caravan, subset = -test)

发现直接训练会发生错误。。。尝试两个变量成功了,感觉是维度太高,目前没有发现解决办法,其他的应用与LDA相似

5.KNN
参数k是可以自己选择的,应注意knn函数变量的输入顺序

> library(class)
> knn.pred = knn(train.X, test.X, train.Y,k=1)
> mean(test.Y==knn.pred)
[1] 0.882

本文发布于:2024-02-02 22:41:53,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170688491446924.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:读书笔记   ISLR
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23