统计学习导论:基于R应用——第四章习题

第四章习题,部分题目未给出答案

1.

这个题比较简单,有高中生推导水平的应该不难。

2~3证明题,略

4.

(a)

这个问题问我略困惑,答案怎么直接写出来了,难道不是10%么

(b)

这个答案是(0.1*0.1)/(1*1),所以答案是1%

(c)

其实就是个空间所占比例,所以这题是(0.1**100)*100 = 0.1**98%

(d)

这题答案显而易见啊,而且是指数级别下降

(e)

答案是0.1**(1)、0.1**(1/2)、0.1**(1/3)...0.1**(1/100)

5.

这题在中文版的104页的偏差-方差权衡说的听清楚。

(a)

当贝叶斯决策边界是线性的时候,训练集上当然是QDA效果好,因为拟合的更好。而测试集上是LDA更好,因为更接近实际。

(b)

当贝叶斯决策边界是非线性的时候,QDA在训练集和测试集都比LDA好

(c)

相比于LDA,QDA的预测率变得更好。因为当样本量n提升时,一个自由度更高的模型会产生更好的效果,因为方差会被大的样本抵消一点

(d)

不对。因为当样本很少时,QDA会过拟合。

6.

(a)

由公式直接带入p(X)=37.75%

(b)

还是带入上述公式,反求X1为50hours

7.

其实就是贝叶斯公式+中文版书97页公式4-12。。。有点繁琐,最后答案是75.2%

8.

文字题。。当你用K=1的KNN时,在训练集上的错误率是0%,所以测试集上错误率实际是36%。我们当然选逻辑回归啦

9.

参见92页公式4-3。。。就是带入公式而已,第一题是27%,第二题是0.19

10.

(a)

感觉题目里面让我们进行数值和图像描述统计时,大概就三条命令:summary()、pairs()、cor()。不过pairs()在特征很多的时候,跑的真心慢,cor()在使用前也要把定性的变量去掉。

library(ISLR)
summary(Weekly)
pairs(Weekly)
cor(Weekly[, -9])

(b)

attach(Weekly)
glm.fit = glm(Direction ~ Lag1 + Lag2 + Lag3 + Lag4 + Lag5 + Volume, data = Weekly,  family = binomial)
summary(glm.fit)

(c)

glm.probs = predict(glm.fit, type = "response")
glm.pred = rep("Down", length(glm.probs))
glm.pred[glm.probs > 0.5] = "Up"
table(glm.pred, Direction)

(d)

train = (Year < 2009)
Weekly.0910 = Weekly[!train, ]
glm.fit = glm(Direction ~ Lag2, data = Weekly, family = binomial, subset = train)
glm.probs = predict(glm.fit, Weekly.0910, type = "response")
glm.pred = rep("Down", length(glm.probs))
glm.pred[glm.probs > 0.5] = "Up"
Direction.0910 = Direction[!train]
table(glm.pred, Direction.0910)mean(glm.pred == Direction.0910)

(e)

library(MASS)
lda.fit = lda(Direction ~ Lag2, data = Weekly, subset = train)
lda.pred = predict(lda.fit, Weekly.0910)
table(lda.pred$class, Direction.0910)
mean(lda.pred$class == Direction.0910)

(f)

qda.fit = qda(Direction ~ Lag2, data = Weekly, subset = train)
qda.class = predict(qda.fit, Weekly.0910)$class
table(qda.class, Direction.0910)
mean(qda.class == Direction.0910)

(g)

library(class)
train.X = as.matrix(Lag2[train])
test.X = as.matrix(Lag2[!train])
train.Direction = Direction[train]
set.seed(1)
knn.pred = knn(train.X, test.X, train.Direction, k = 1)
table(knn.pred, Direction.0910)
mean(knn.pred == Direction.0910)

(h)

两种方法的准确率一样。。。

(i)

# Logistic regression with Lag2:Lag1
glm.fit = glm(Direction ~ Lag2:Lag1, data = Weekly, family = binomial, subset = train)
glm.probs = predict(glm.fit, Weekly.0910, type = "response")
glm.pred = rep("Down", length(glm.probs))
glm.pred[glm.probs > 0.5] = "Up"
Direction.0910 = Direction[!train]
table(glm.pred, Direction.0910)
mean(glm.pred == Direction.0910)
## [1] 0.5865

# LDA with Lag2 interaction with Lag1
lda.fit = lda(Direction ~ Lag2:Lag1, data = Weekly, subset = train)
lda.pred = predict(lda.fit, Weekly.0910)
mean(lda.pred$class == Direction.0910)
## [1] 0.5769

# QDA with sqrt(abs(Lag2))
qda.fit = qda(Direction ~ Lag2 + sqrt(abs(Lag2)), data = Weekly, subset = train)
qda.class = predict(qda.fit, Weekly.0910)$class
table(qda.class, Direction.0910)
mean(qda.class == Direction.0910)
## [1] 0.5769

# KNN k =10
knn.pred = knn(train.X, test.X, train.Direction, k = 10)
table(knn.pred, Direction.0910)
mean(knn.pred == Direction.0910)
## [1] 0.5769

# KNN k = 100
knn.pred = knn(train.X, test.X, train.Direction, k = 100)
table(knn.pred, Direction.0910)
mean(knn.pred == Direction.0910)
## [1] 0.5577

结果在代码注释中,逻辑回归效果最好

11.

(a)

library(ISLR)
summary(Auto)

attach(Auto)
mpg01 = rep(0, length(mpg))
mpg01[mpg > median(mpg)] = 1
Auto = data.frame(Auto, mpg01)

(b)

cor(Auto[, -9])
pairs(Auto)

(c)

train = (year%%2 == 0)  # if the year is even
test = !train
Auto.train = Auto[train, ]
Auto.test = Auto[test, ]
mpg01.test = mpg01[test]

(d)

library(MASS)
lda.fit = lda(mpg01 ~ cylinders + weight + displacement + horsepower, data = Auto, subset = train)
lda.pred = predict(lda.fit, Auto.test)
mean(lda.pred$class != mpg01.test)

(e)

qda.fit = qda(mpg01 ~ cylinders + weight + displacement + horsepower, data = Auto, subset = train)
qda.pred = predict(qda.fit, Auto.test)
mean(qda.pred$class != mpg01.test)

(f)

glm.fit = glm(mpg01 ~ cylinders + weight + displacement + horsepower, data = Auto, family = binomial, subset = train)
glm.probs = predict(glm.fit, Auto.test, type = "response")
glm.pred = rep(0, length(glm.probs))
glm.pred[glm.probs > 0.5] = 1
mean(glm.pred != mpg01.test)

(g)

library(class)
train.X = cbind(cylinders, weight, displacement, horsepower)[train, ]
test.X = cbind(cylinders, weight, displacement, horsepower)[test, ]
train.mpg01 = mpg01[train]
set.seed(1)
# KNN(k=1)
knn.pred = knn(train.X, test.X, train.mpg01, k = 1)
mean(knn.pred != mpg01.test)

# KNN(k=10)
knn.pred = knn(train.X, test.X, train.mpg01, k = 10)
mean(knn.pred != mpg01.test)

# KNN(k=100)
knn.pred = knn(train.X, test.X, train.mpg01, k = 100)
mean(knn.pred != mpg01.test)

13题和11题类似,就是用这几个函数。所以13题略。

12.

(a)~(b)

Power = function() {
  2^3
}
print(Power())

Power2 = function(x, a) {
  x^a
}
Power2(3, 8)

(c)

Power2(10, 3)
Power2(8, 17)
Power2(131, 3)

(d)~(f)

Power3 = function(x, a) {
  result = x^a
  return(result)
}

x = 1:10
plot(x, Power3(x, 2), log = "xy", ylab = "Log of y = x^2", xlab = "Log of x",
     main = "Log of x^2 versus Log of x")

PlotPower = function(x, a) {
  plot(x, Power3(x, a))
}
PlotPower(1:10, 3)
时间: 2024-12-05 05:59:08

统计学习导论:基于R应用——第四章习题的相关文章

统计学习导论:基于R应用——第三章习题

第三章习题 部分证明题未给出答案 1. 表3.4中,零假设是指三种形式的广告对TV的销量没什么影响.而电视广告和收音机广告的P值小说明,原假设是错的,也就是电视广告和收音机广告均对TV的销量有影响:报纸的P值高,说明原假设成立,也就是报纸广告对TV的销量没啥影响. 2. KNN回归和KNN近分类都是典型的非参数方法.这两者的区别在于,前者的输入和输出均为定量值:而后者的输入和输入和输出均为定性值. 3. 首先,有题目可知下面关系:Y = 50 + 20(gpa) + 0.07(iq) + 35(

Python核心编程(第二版) 第四章习题答案

4-1.Python对象.与所有Python对象有关的三个属性是什么?请简单的描述一下.答:与所有Python对象有关的三个属性是身份.类型.值.身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到.这个值可以被认为是该对象的内存地址.类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么规则.可以用内建函数type()来查看Python的类型.值:对象表示的数据项.4-2.类型.不可更改(immutable)指的是什么?Pyth

第四章习题:斐波那.契数列&amp;&amp;吸血鬼数字

package com.twoslow.cha4; /** * 斐波那契数列:从3个数字起,每一个数都是前2个数之和:1 1 2 3 5 8 13... * @author sai * */ public class Fibonacci { public static void main(String[] args) { for(int i = 0 ; i < 10 ;i++) { System.out.print(fib(i) + "."); } } public static

算法导论读书笔记-第十四章-数据结构的扩张

算法导论第14章 数据结构的扩张 一些工程应用需要的只是标准数据结构, 但也有许多其他的应用需要对现有数据结构进行少许的创新和改造, 但是只在很少情况下需要创造出全新类型的数据结构, 更经常的是通过存储额外信息的方法来扩张一种标准的数据结构, 然后对这种数据结构编写新的操作来支持所需要的应用. 但是对数据结构的扩张并不总是简单直接的, 因为新的信息必须要能被该数据结构上的常规操作更新和维护. 14.1 动态顺序统计 顺序统计树(order-static tree) : 在红黑树的基础上, 在每个

我的学习之路_第十四章_反射

类的反射 [获取class文件对象的三种方式]: ● 使用Object类中的方法 getClass() Class<?> getClass() 返回此Object的运行时类. ● 使用类名.class属性 每一个数据类型,基本数据类型和引用数据类型,Java都会为其设置一个class属性 例如: Class class = int.class Class class = String.class Class class = Person.class● 使用Class类中的静态方法forName

java第三天学习内容回顾——java白皮书第四章

java面向对象程序设计中使用到名词理解:对象标识==一个实例的变量名.对象行为==一个类的方法.对象状态==类中的数据域(严格讲是可以发生变化的数据域): 类之间的关系:use_a,has_a,is_a三种 java中的Math类有些特殊,它只封装了功能而并不涉及数据域,所以不需要也不必隐藏数据 java中的对象变量名更像是个指针(像),声明一个对象实例后必须用new构造对象然后用=将两者链接起来,也可以用=将两个不同的对象变量连接起来,但此时需要注意,就像指针赋值一样,两个变量自此将共享同一

java第四天学习内容回顾——java白皮书第四章

java中有自动的垃圾回收器,不需要人工回收内存或者资源,所以java不支持析构函数. finalize方法可以添加进任何一个类,可以用来在回收短缺的资源,但作者并不提倡使用这个方法,因为程序员无法确定这个方法将在哪一时刻被调用,只知道它将在垃圾回收器前调用. System.runFinalizersOnExits 这个方法能够确保finalizer方法在java关闭前调用,但作者认为这样并不安全,有一个替代的方法:Runtime.addShutdownHook方法,具体在白皮书后面介绍. ja

C和指针 第十四章 习题

14.1 打印函数 #include <stdio.h> void print_ledger_long(){ printf("function print_ledger_long\n"); } void print_ledger_detailed(){ printf("function print_ledger_detailed\n"); } void print_ledger_default(){ printf("function print

Objective-C 程序设计(第六版)第四章习题答案

1.   非法常量 0x10.5    0X0G1    98.7U    17777s    0996    1.2Fe-7    15,000    . 2. //只需要列出表达式就可以 int F = 27; //设置F为华氏温度,赋值 27 float C ; //设置C为摄氏温度,类型为浮点类型 C = (F-32)/1.8; NSLog(@"%.1f",C); // %.1f 保留一位小数就可以 //输出结果 2014-09-17 14:58:48.259 prog1[60