在前半部分的练习中,你将实现正则化线性回归,以预测水库中的水位变化,从而预测大坝流出的水量。在下半部分中,您将通过一些调试学习算法的诊断,并检查偏差 v.s. 方差的影响。

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import loadmat
import scipy.optimize as optdef plotData():"""瞧一瞧数据长啥样"""plt.figure(figsize=(8, 5))plt.scatter(X[:, 1:], y, c='r', marker='x')plt.xlabel('Change in water level (x)')plt.ylabel('Water flowing out of the dam (y)')plt.grid(True)def costReg(theta, X, y, l):    # 正则化costcost = ((X @ theta - y.flatten()) ** 2).sum()regterm = l * (theta[1:] @ theta[1:])return (cost + regterm) / (2 * len(X))def gradientReg(theta, X, y, l):  # 正则化线性回归梯度grad = (X @ theta - y.flatten()) @ Xregterm = l * thetaregterm[0] = 0return (grad + regterm) / len(X)def trainLinearReg(X, y, l):   # 拟合线性回归theta = np.zeros(X.shape[1])res = opt.minimize(fun=costReg,x0=theta,args=(X, y ,l),method='TNC',jac=gradientReg)return res.xdef plot_learning_curve(X, y, Xval, yval, l):"""画出学习曲线,即交叉验证误差和训练误差随样本数量的变化的变化"""xx = range(1, len(X) + 1)  # at least has one exampletraining_cost, cv_cost = [], []for i in xx:res = trainLinearReg(X[:i], y[:i], l)training_cost_i = costReg(res, X[:i], y[:i], 0)cv_cost_i = costReg(res, Xval, yval, 0)training_cost.append(training_cost_i)cv_cost.append(cv_cost_i)plt.figure(figsize=(8, 5))plt.plot(xx, training_cost, label='training cost')plt.plot(xx, cv_cost, label='cv cost')plt.legend()plt.xlabel('Number of training examples')plt.ylabel('Error')plt.title('Learning curve for linear regression')plt.grid(True)plt.show()def genPolyFeatures(X, power):"""添加多项式特征每次在array的最后一列插入第二列的i+2次方(第一列为偏置)从二次方开始开始插入(因为本身含有一列一次方)"""Xpoly = X.copy()for i in range(2, power + 1):Xpoly = np.insert(Xpoly, Xpoly.shape[1], np.power(Xpoly[:,1], i), axis=1)return Xpolydef get_means_std(X):"""获取训练集的均值和误差,用来标准化所有数据。"""means = np.mean(X,axis=0)stds = np.std(X,axis=0,ddof=1)  # ddof=1 means 样本标准差return means, stdsdef featureNormalize(myX, means, stds):"""标准化"""X_norm = myX.copy()X_norm[:,1:] = X_norm[:,1:] - means[1:]X_norm[:,1:] = X_norm[:,1:] / stds[1:]return X_normdef plot_fit(means, stds, l):"""画出拟合曲线"""theta = trainLinearReg(X_norm, y, l)x = np.linspace(-75, 55, 50)xmat = x.reshape(-1, 1)xmat = np.insert(xmat, 0, 1, axis=1)Xmat = genPolyFeatures(xmat, power)Xmat_norm = featureNormalize(Xmat, means, stds)plotData()plt.plot(x, Xmat_norm @ theta, 'b--')plt.show()# ---------------1.读取数据,数据可视化----------------
path = 'ex5data1.mat'
data = loadmat(path)
X, y = data['X'], data['y']  #Training set
Xval, yval = data['Xval'], data['yval']  #Training set
Xtest, ytest = data['Xtest'], data['ytest']   #Test set
X = np.insert(X,0,1,axis=1)   #X=(12, 2),y=(12, 1)
Xval = np.insert(Xval ,0,1,axis=1)  #Xval=(21, 2),yval=(21, 1)
Xtest = np.insert(Xtest,0,1,axis=1)   # Xtest=(21, 2),ytest=(21, 1)
plotData()
plt.show()
# ---------------2.正则化线性回归----------------
theta = np.ones(X.shape[1])
print(costReg(theta, X, y, 1))  # 303.9931922202643
print(gradientReg(theta, X, y, 1))
fit_theta = trainLinearReg(X, y, 0)
plotData()
plt.plot(X[:,1], X @ fit_theta)
plt.show()
# ---------------3.学习函数----------------
plot_learning_curve(X, y, Xval, yval, 0)
# ---------------4.多项式回归----------------
power = 6  # 扩展到x的6次方train_means, train_stds = get_means_std(genPolyFeatures(X,power))
X_norm = featureNormalize(genPolyFeatures(X,power), train_means, train_stds)
Xval_norm = featureNormalize(genPolyFeatures(Xval,power), train_means, train_stds)
Xtest_norm = featureNormalize(genPolyFeatures(Xtest,power), train_means, train_stds)
plot_fit(train_means, train_stds, 0)
plot_learning_curve(X_norm, y, Xval_norm, yval, 0)plot_fit(train_means, train_stds, 1)
plot_learning_curve(X_norm, y, Xval_norm, yval, 1)
plot_fit(train_means, train_stds, 100)
plot_learning_curve(X_norm, y, Xval_norm, yval, 100)lambdas = [0., 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1., 3., 10.]
errors_train, errors_val = [], []
for l in lambdas:theta = trainLinearReg(X_norm, y, l)errors_train.append(costReg(theta, X_norm, y, 0))  # 记得把lambda = 0errors_val.append(costReg(theta, Xval_norm, yval, 0))plt.figure(figsize=(8, 5))
plt.plot(lambdas, errors_train, label='Train')
plt.plot(lambdas, errors_val, label='Cross Validation')
plt.legend()
plt.xlabel('lambda')
plt.ylabel('Error')
plt.grid(True)
plt.show()
print(lambdas[np.argmin(errors_val)] )theta = trainLinearReg(X_norm, y, 3)
print('test cost(l={}) = {}'.format(3, costReg(theta, Xtest_norm, ytest, 0)))

吴恩达机器学习作业5——偏差与方差相关推荐

  1. 吴恩达机器学习作业5.偏差和方差

    机器学习作业 5 - 偏差和方差 import numpy as np import scipy.io as sio import scipy.optimize as opt import panda ...

  2. 吴恩达机器学习作业ex2-python实现

    系列文章目录 吴恩达机器学习作业ex1-python实现 吴恩达机器学习作业ex2-python实现 吴恩达机器学习作业ex3-python实现 作业说明及数据集 链接:https://pan.bai ...

  3. k均值算法python实现(吴恩达机器学习作业)

    k均值算法python实现(吴恩达机器学习作业) 题目要求 数据集 读取mat文件 K-means 实现 结果 问题 题目要求 采用K均值算法对样本进行聚类. 编写K均值算法源代码,对ex7data2 ...

  4. 第一章-机器学习简介 深度之眼_吴恩达机器学习作业训练营

    目录 专栏简介: 一,机器学习简介 1.1 机器学习定义 1.1 机器学习的重要性 1.2 应用领域 二.监督学习 三.无监督学习 四.总结 专栏简介: 本栏主要内容为吴恩达机器学习公开课的学习笔记, ...

  5. 吴恩达机器学习作业7 - K-means和PCA主成分分析(Python实现)

    吴恩达机器学习作业7 - K-means和PCA主成分分析(Python实现) Introduction 在本实验中,将实现K-means聚类算法,并将其应用于图像压缩.在第二部分实验中,将使用主成分 ...

  6. 吴恩达机器学习作业Python实现(五):偏差和方差

    吴恩达机器学习系列作业目录 在本练习中,您将实现正则化的线性回归和多项式回归,并使用它来研究具有不同偏差-方差属性的模型 1 Regularized Linear Regression 正则线性回归 ...

  7. 吴恩达机器学习作业Python实现(八):异常检测和推荐系统

    吴恩达机器学习系列作业目录 1 Anomaly detection 这部分,您将实现一个异常检测算法来检测服务器计算机中的异常行为.他的特征是测量每个服务器的响应速度(mb/s)和延迟(ms).当你的 ...

  8. 吴恩达机器学习作业Python实现(七):K-means和PCA主成分分析

    吴恩达机器学习系列作业目录 1 K-means Clustering 在这个练习中,您将实现K-means算法并将其用于图像压缩.通过减少图像中出现的颜色的数量,只剩下那些在图像中最常见的颜色. 1. ...

  9. 吴恩达机器学习作业Python实现(六):SVM支持向量机

    吴恩达机器学习系列作业目录 1 Support Vector Machines 1.1 Example Dataset 1 %matplotlib inline import numpy as np ...

最新文章

  1. 开源资产管理系统java_开源资产管理软件 GLPI 9.3.1 部署
  2. 第三次学JAVA再学不好就吃翔(part3)--基础语法之常量
  3. 百炼OJ - 1004 - 财务管理
  4. Java Math类的常用方法
  5. 编写函数digit(num, k),函数功能是:求整数num从右边开始的第k位数字的值,如果num位数不足k位则返回0。...
  6. 百度SEO站群wordpress设置网站TDK源码插件
  7. android 显示清除缓存
  8. STL堆算法性能分析与优化方法(GCC4.4.2 stl_heap.h源代码分析与改进方案)
  9. C#获取文件/文件夹默认图标
  10. HFSS入门学习(一)
  11. Elasticsearch优化的一些建议
  12. NameNode格式化——组件恢复,数据丢失
  13. 《数据结构与算法自学与面试指南》01-01:图灵奖得主尼古拉斯·沃斯
  14. 浅析:宝贝标题关键词优化技巧
  15. javascript 正则里面 \s\S 和 . 的区别
  16. PHP串行化与JSON
  17. redefinition; different type modifiers错误解决
  18. 在中国大陆,XGP对比Steam有什么优势?
  19. 《工程伦理与学术道德》之《工程活动中的环境伦理》
  20. 转:VNX存储下,连接各平台主机的Failover Mode 设置的参数

热门文章

  1. Ubuntu 下 Eclipse 桌面图标创建
  2. Codeforces 710 E. Generate a String (dp)
  3. ASP.NET MVC 4 (五) 视图
  4. 博客园的神回复,程序猿的奇葩神回复[连载][二]
  5. 为Xen虚拟机扩容根文件系统(LVM)
  6. 今天开始要详细的记录学习sharepoint 的进度和相关的一些资料
  7. 转lua解析脚本过程中的关键数据结构介绍
  8. Python数据类型解析(基础篇)
  9. 开发中所使用的渠道(统计分析、分享、第三方登录、短信等)
  10. C语言 · 数组查找及替换