机器学习基石 作业四

1 假设函数空间变小了,固定噪声大体上会变大。因为假设函数与真实函数之间的差距可能变大了。

2 从第三项就等于0的假设函数包含于从第四项系数才等于0的。

3 直接求导

4 因为加正则项相当于对系数加了个限制。如果最优点在那个限制的球内则相等,否则肯定小于不加限制的时候。具体可以看图理解:


5 计算即可

6.整体过程为,每次随机猜测两种结果,下一轮只再发给上次说准的人。也就是从32个开始跟16个人说胜利,另外16个说失败。第二次在剩下猜对的16人里继续对半。所以选择该项。

7 成本是32+16+8+4+2+1 ×10=630,因此获利370。

8 这题比较神奇。据说是因为自己推算了一个数学公式,只有一个假设。因此选1。(看了别人的才知道,一脸懵逼)

9 根据Heoffding不等式直接算得。

10 因为原来银行有的数据是以前使用a(x)筛选后下发银行卡的人的数据,因此使用AND之后能够保证跟推算的效果一样。

11 加正则项求导即可,和原来的推导过程一样。

12 对这个目标函数进行求导得到w=(XTX+λI)−1XTyw=(X^{T}X+\lambda I)^{-1}X^{T}yw=(XTX+λI)−1XTy,因此得到答案。

13 从这里开始是编程题。这里要说一个问题。刚开始的时候我使用了np.mat来格式化X,结果在得到结果的时候无论如何也对不上选项。卡了好久,看了一下别人的实现,用的是np.dot来对array格式的数据进行矩阵运算结果就好了。想了一下是因为计算过程中精度的问题,因为λ\lambdaλ有的值很小,精度不够的话结果可能体现不出区别。实现的过程其实没什么好说的,就是很简单的套用公式即可,代码放在最后面。

14

15

16

17

18

19

20

代码如下:

import numpy as np
import requestsdef getData(url):content = requests.get(url).contentcontent = content.decode('utf-8')x = []y = []content = content.split('\n')for line in content[:-1]:data = line.split(' ')y.append(int(data[-1]))x1 = data[:-1]for i in range(len(x1)):x1[i] = float(x1[i])x.append([1]+x1)x = np.array(x)y = np.array(y)return x,ydef ridgeReg(x,y,lamda):identity = lamda*np.eye(len(x[0]))w = np.dot(np.dot(np.linalg.inv(np.dot(x.transpose(),x)+identity),x.transpose()),y)return wdef sign(v):if v > 0:return 1else:return -1def errorRate(w,x,y):yHat = np.dot(w,x.transpose())yHat = np.where(yHat>=0,1,-1)errorNum = np.sum(np.array(y) != np.array(yHat))return errorNum/len(y)def main():print("#13")lamda = 10trainUrl = 'https://www.csie.ntu.edu.tw/~htlin/mooc/datasets/mlfound_algo/hw4_train.dat'testUrl = 'https://www.csie.ntu.edu.tw/~htlin/mooc/datasets/mlfound_algo/hw4_test.dat'X,Y = getData(trainUrl)testX,testY = getData(testUrl)w = ridgeReg(X,Y,lamda)errorIn = errorRate(w,X,Y)errorOut = errorRate(w,testX,testY)print("in sample error:",errorIn)print("out of sample error:",errorOut)print("#14,15")for i in range(13):lamda = pow(10,i-10)w = ridgeReg(X,Y,lamda)errorIn = errorRate(w,X,Y)errorOut = errorRate(w,testX,testY)print("log:",i-10,"in:",errorIn,"out:",errorOut)print("#16,17")valX = X[120:]valY = Y[120:]trainX = X[:120]trainY = Y[:120]for i in range(13):lamda = pow(10,i-10)w = ridgeReg(trainX,trainY,lamda)errorIn = errorRate(w,trainX,trainY)errorVal = errorRate(w,valX,valY)errorOut = errorRate(w,testX,testY)print("log:",i-10)print("in:",errorIn,"validataion:",errorVal,"out:",errorOut)print("#18")lamda = 1w = ridgeReg(X,Y,lamda)errorIn = errorRate(w,X,Y)errorOut = errorRate(w,testX,testY)print("in:",errorIn,"out:",errorOut)print("#19")lamda = 1for k in range(13):lamda = pow(10,k-10)errorVal = 0for i in range(1,6):XL = X.tolist()YL = Y.tolist()trainX = XL[:(i-1)*40]+XL[i*40:]trainX = np.array(trainX)trainY = YL[:(i-1)*40]+YL[i*40:]trainY = np.array(trainY)valX = XL[(i-1)*40:i*40]valX = np.array(valX)valY = YL[(i-1)*40:i*40]valY = np.array(valY)w = ridgeReg(trainX,trainY,lamda)errorVal += errorRate(w,valX,valY)print("log:",k-10,"cv:",errorVal/5)print("#20")lamda = pow(10,-8)w = ridgeReg(X,Y,lamda)errorIn = errorRate(w,X,Y)errorOut = errorRate(w,testX,testY)print("in:",errorIn,"out:",errorOut)if __name__ == '__main__':main()

完结撒花,技法再会。

机器学习基石 作业四相关推荐

  1. 机器学习基石-作业四-代码部分

    这次的作业内容主要就是对带正则化项的线性规划的闭式解做各种操作:选择.把数据分成训练集和交叉验证.k-折交叉验证.完全套公式就可以了,这里唯一的一个问题就是偏移量参不参加正则化: 在林老师的课程中,最 ...

  2. 机器学习基石-作业三-第2题分析以及通过H证明EIN的讨论

    题目: 这是机器学习基石作业三种的第二小题,额,在网上看了很多解答(解答也不多)感觉都没有说清楚为什么,所以励志清楚滴解决一下这个问题,经过努力,自认为得到了详细的解答,内容如下: (一)解决选项(e ...

  3. 机器学习基石作业03:二阶泰勒展开,特征转换,逻辑回归

    本文总结机器学习基石的第三次作业,主要包括误差函数.特征转换.二阶泰勒展开,以及线性回归,逻辑回归的实现. 问题1和问题2:关于线性回归问题中 E i n E_{in} Ein​和 E o u t E ...

  4. 机器学习基石第四讲:feasibility of learning

    博客已经迁移至Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完成机器学习基石的第四节,这一节讨论机器学习的可行性,用到了Hoeffding' ...

  5. 機器學習基石(Machine Learning Foundations) 机器学习基石 作业三 课后习题解答

    今天和大家分享coursera-NTU-機器學習基石(Machine Learning Foundations)-作业三的习题解答.笔者在做这些题目时遇到很多困难,当我在网上寻找答案时却找不到,而林老 ...

  6. 机器学习基石-作业三-代码部分

    梯度下降迭代和牛顿迭代,gradient_and_newton.py # -*- coding:utf-8 -*- # Author: Evan Mi import numpy as np" ...

  7. 机器学习基石-作业二-第10题分析

    题目如上图所示,答案是::在网上看到的答案中有一个很好的解释就是说在一个n纬的欧几里德空间里,分别按照参数做一个垂直于每个轴的超平面,这些超平面能够打散这么多个点.首先我承认这个事实,具体的证明还没做 ...

  8. 机器学习基石作业一中的PLA和POCKET_PLA实现

    前提:文中使用的数据是本人下载下来以后自己处理过的,就是把文件中的所有分隔符都换成了空格.所以load_data方法只能加载我自己的数据,想要加载原生数据的话需要自己写load_data方法. 两个算 ...

  9. 机器学习基石作业二中的DECISION_STUMP实现

    概要:在林老的题目描述中,DECISION_STUMP(其实就是"决策桩",也就是只有一层的决策树).题目中提到了的选去是把属性(一维的)按照从小到大的顺序排列以后取两个挨着的值的 ...

  10. 機器學習基石 机器学习基石(Machine Learning Foundations) 作业1 习题解答

    大家好,我是Mac Jiang,今天和大家分享coursera-NTU-機器學習基石(Machine Learning Foundations)-作业1的习题解答.笔者是在学习了Ng的Machine ...

最新文章

  1. 理科的至尊思想:进制之间的转换
  2. 什么是Shell,Shell教程
  3. Flex 传JAVA BEAN 到后台 JAVA
  4. JavaScript学习 第一课(一)
  5. Linux之Bash_Script_Program_002
  6. XtraBackup备份mysql5.1.73
  7. Makefile 教程
  8. IE 9 beta 下载地址
  9. mysql字段有中文、英文、数字的混合排序
  10. Django——jinja2配置与使用
  11. C++调用c#的.net Standard类库流程
  12. 为什么视频无法播放,视频无法播放的原因是什么
  13. Vue Cli脚手架安装与使用
  14. “有点笨”的数学大师迈克尔·弗里德曼
  15. XSS及CSRF攻击防御
  16. Desolate Era Book 1, Chapter 1
  17. Kubernetes-调度、节点亲和反亲和、pod亲和反亲和、Taints污点的处理
  18. 简易atm java代码_Java的简易ATM系统
  19. 对CreateCompatibleDC的粗浅认识
  20. python多叉树遍历_基于Python的多叉树遍历算法

热门文章

  1. Microsoft Office Word、Excel 和 PowerPoint 文件格式兼容包
  2. 老毛子 K2 通过SSH 抓包
  3. Sublime Text新增GBK编码支持
  4. 如何让百度检索Github博客
  5. C++入门教程(23)深度优先,广度优先(连连看判断是否可以消除)
  6. ··· Socks Online - 在内部网也能使用QQ ···
  7. Epub2基础知识介绍
  8. 【SonicUI】 VS2008 SP1 编译错误处理。
  9. Setup Factory 卸载 Invalid Start mode :archive filename
  10. TR069 (CWMP协议即CPE广域网管理协议)