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

在林老师的课程中,最后的闭式解的公式为:

按照这个公式,线性得分函数中的b也参加了正则化。

而在吴恩达的课程,以及很多其他的地方得到的经验是,b一般是不参加正则化的。按照这样的理解,假设w0=b,那么公式为:

本人更倾向于后者。但是为了和林老师的答案一致,程序中采用了第一种计算公式。

具体代码如下,套公式就可以了:

# -*- coding:utf-8 -*-
# Author: Evan Mi
import numpy as npdef load_data(file_name):x = []y = []with open(file_name, 'r+') as f:for line in f:line = line.rstrip("\n")temp = line.split(" ")temp.insert(0, '1')x_temp = [float(val) for val in temp[:-1]]y_tem = [int(val) for val in temp[-1:]][0]x.append(x_temp)y.append(y_tem)nx = np.array(x)ny = np.array(y)return nx, nydef sign_zero_as_neg(x):"""这里修改了np自带的sign函数,当传入的值为0的时候,不再返回0,而是-1;也就是说在边界上的点按反例处理:param x::return:"""result = np.sign(x)result[result == 0] = -1return resultdef get_w_reg(x, y, lambdas):w_reg = np.dot(np.linalg.pinv(np.dot(np.transpose(x), x) + lambdas * np.eye(np.size(x, axis=1))),np.dot(np.transpose(x), y))return w_reg.flatten()def e_counter(x, y, w):local_result = sign_zero_as_neg(np.dot(x, w))e = np.where(local_result == y, 0, 1)return e.sum()/np.size(e)def exe_13():print('#13:')train_x, train_y = load_data("data/train.txt")test_x, test_y = load_data("data/test.txt")w_reg_one = get_w_reg(train_x, train_y, 10)e_in = e_counter(train_x, train_y, w_reg_one)e_out = e_counter(test_x, test_y, w_reg_one)print("E_IN:", e_in)print("E_OUT:", e_out)def exe_14_15():print('#14,#15')train_x, train_y = load_data("data/train.txt")test_x, test_y = load_data("data/test.txt")for i in range(-10, 3):lambda_tem = 10 ** iw_reg_tem = get_w_reg(train_x, train_y, lambda_tem)e_in_tem = e_counter(train_x, train_y, w_reg_tem)e_out_tem = e_counter(test_x, test_y, w_reg_tem)print("log_10(%d)" % i, e_in_tem, e_out_tem)def exe_16_17():print('#16,17')x_tem, y_tem = load_data("data/train.txt")test_x, test_y = load_data("data/test.txt")train_x = x_tem[:120, :]val_x = x_tem[120:, :]train_y = y_tem[:120]val_y = y_tem[120:]for i in range(-10, 3):lambda_tem = 10 ** iw_reg_tem = get_w_reg(train_x, train_y, lambda_tem)e_in_tem = e_counter(train_x, train_y, w_reg_tem)e_val_tem = e_counter(val_x, val_y, w_reg_tem)e_out_tem = e_counter(test_x, test_y, w_reg_tem)print("log_10(%d)" % i, e_in_tem, e_val_tem, e_out_tem)def exe_18():print('#18:')train_x, train_y = load_data("data/train.txt")test_x, test_y = load_data("data/test.txt")# lambda = log_10(0)w_reg_one = get_w_reg(train_x, train_y, 1)e_in = e_counter(train_x, train_y, w_reg_one)e_out = e_counter(test_x, test_y, w_reg_one)print("E_IN:", e_in)print("E_OUT:", e_out)def exe_19():print('#19')train_x, train_y = load_data("data/train.txt")for i in range(-10, 3):lambda_tem = 10 ** ie_cross = []for j in range(0, 200, 40):x_val = train_x[j:j+40, :]y_val = train_y[j:j+40]x_remain_left = train_x[0:j, :]x_remain_right = train_x[j+40:, :]y_remain_left = train_y[0:j]y_remain_right = train_y[j + 40:]if np.size(x_remain_left, axis=0) == 0:x_train = x_remain_righty_train = y_remain_rightelif np.size(x_remain_right, axis=0) == 0:x_train = x_remain_lefty_train = y_remain_leftelse:x_train = np.concatenate((train_x[0:j, :], train_x[j + 40:, :]), axis=0)y_train = np.concatenate((train_y[0:j], train_y[j + 40:]), axis=0)w_reg_tem = get_w_reg(x_train, y_train, lambda_tem)e_cross.append(e_counter(x_val, y_val, w_reg_tem))print("lambda:", "log_10(%d)" % i, "E_CV", np.array(e_cross).mean())def exe_20():print('#20:')train_x, train_y = load_data("data/train.txt")test_x, test_y = load_data("data/test.txt")# lambda = log_10(-8)w_reg_one = get_w_reg(train_x, train_y, 10 ** -8)e_in = e_counter(train_x, train_y, w_reg_one)e_out = e_counter(test_x, test_y, w_reg_one)print("E_IN:", e_in)print("E_OUT:", e_out)if __name__ == '__main__':exe_13()exe_14_15()exe_16_17()exe_18()exe_19()exe_20()

详细代码及代码使用的数据见:机器基石作业四

机器学习基石-作业四-代码部分相关推荐

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

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

  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. 机器学习基石作业一中的PLA和POCKET_PLA实现

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

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

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

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

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

  9. 《机器学习基石》作业一

    博客已经迁移到Marcovaldo's blog (http://marcovaldong.github.io/) 已入机器学习坑,下决心走下去.<统计学习方法>一书介绍了十种算法,不算太 ...

最新文章

  1. 使用psycopg2操作PostgreSQL数据库之二
  2. linux最基础安装,Linux Nginx最基础的十大安装步骤(2)
  3. 详解 | Spring Boot 最核心的 3 个注解详解
  4. 【elasticsearch】Elasticsearch : alias数据类型
  5. java线程池读文件_多线程读取Java文件
  6. [渝粤教育] 中国地质大学 审计学 复习题 (2)
  7. Android NDK开发(1)----- Java与C互相调用实例详解
  8. python search group_python笔记52-re正则匹配search(group groups groupdict)
  9. 关于英语前缀和后缀的区别
  10. 视频直播微信小程序开发方案
  11. C#练习题答案: 反恐精英系列【难度:1级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战
  12. 耳机插入电脑没反应 控制面板也找不到realtek音频管理器的解决方案
  13. 这些是 Python 官方推荐的最好书籍(推荐)
  14. 计算机学生英语面试自我介绍ppt,【英语自我介绍ppt】_大学生英语自我介绍ppt...
  15. 类里面的成员函数指针使用
  16. IDEA打包JavaWeb的War包并部署到Tomcat
  17. EasyExcel使用详解与源码解读
  18. SQL窗口函数-截止至某天的累计值
  19. 基于RoomPlan,苹果房间扫描AR效果震惊
  20. 简单模板,小样,难道简单点不好吗?

热门文章

  1. 崔华 oracle简历,2013数据库大会:崔华-基于Oracle的SQL优化案例分析
  2. java list 获取索引_java – 获取arrayList中元素的索引
  3. Tomcat 中文路径乱码
  4. python新奇检测_3种Python检测URL状态
  5. python 2048源码_一个python的2048简单实现
  6. linux redis 5.6扩展,Windows下为PHP5.6安装Redis扩展和memcached扩展
  7. 经典sql语句50题_SQL面试经典50题:带你从建表开始
  8. python 程序运行在阿里云主机_阿里云主机Access key利用工具
  9. 按冯诺依曼提出的计算机类型,2011年12月24日计算机一级考试题目广西
  10. Javascript性能优化【内联缓存】 V8引擎特性