读取数据

import numpy as np
import pandas as pd
import scipy.io as sio
import  matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
data = sio.loadmat("D:\吴恩达机器学习与深度学习\CourseraML\ex5\data\ex5data1.mat") #加载数据
X, y  = data['X'], data['y'] #训练集
Xtest, ytest = data['Xtest'], data['ytest'] #测试集
Xval, yval = data['Xval'], data['yval']   #验证集X = np.insert(X, 0, 1, axis =1)
Xtest = np.insert(Xtest, 0, 1, axis =1)
Xval = np.insert(Xval, 0, 1, axis =1)

数据可视化

def dataPlot():  #数据可视化函数plt.figure(figsize=(6, 4)) #新建画布plt.plot(X[:,1], y, 'x' )plt.xlabel("Change in water level")plt.ylabel("Water flowing out of the dam")plt.grid(True)dataPlot()


假设函数和损失函数

def h(mytheta, myx): #定义假设函数return np.dot(myx, mytheta)def costFunction(mytheta, myx, myy, mylambda = 0): #定义损失函数m = myx.shape[0] #样本数myh = h(mytheta, myx).reshape(m, 1)mycost = float(1./(2*m)*np.dot((myh - myy).T, (myh-myy)))regterm = mylambda/(2*m)*np.dot(mytheta, mytheta.T)return  mycost + regterm

梯度函数

def computeGradient(mytheta, myx, myy, mylambda = 0): #定义梯度函数mytheta = mytheta.reshape((mytheta.shape[0],1))m = myx.shape[0]myh = h(mytheta,myx).reshape((m,1))grad = 1/(m)*np.dot(myx.T, (h(mytheta, myx)-myy))regterm = mylambda/m*mythetaregterm[0] = 0regterm.reshape((grad.shape[0],1))return (grad + regterm).flatten()mytheta = np.array([1, 1]).T
print(computeGradient(mytheta, X, y, 1.))

最优化参数θ

from scipy import optimizedef optimizeTheta(mytheta, myx, myy, mylambda=0., print_output=True): #定义最优化theta的函数fit_theta = optimize.fmin_cg(costFunction, x0= mytheta, fprime = computeGradient, args = (myx, myy, 0), maxiter = 500)fit_theta = fit_theta.reshape((mytheta.shape[0],1))return fit_thetaprint(optimizeTheta(mytheta, X, y, 0))
theta1 = optimizeTheta(mytheta, X, y, 0)

可视化

plt.plot(X[:,1], y, 'x')
plt.plot(X[:,1], h(theta1, X))


可视化

def learningCurve(): #定义学习曲线initial_theta = np.array([1, 1]).Ttrain_error, val_error = [], []for i in range(1, X.shape[0]+1, 1):train_subset = X[:i, :]y_subset = y[:i]#mym.append(y_subset.shape[0])theta1 = optimize.fmin_cg(costFunction, x0= initial_theta, fprime = computeGradient, args = (train_subset, y_subset, 0), maxiter = 100)train_error.append(costFunction(theta1, train_subset, y_subset, mylambda = 0))val_error.append(costFunction(theta1, Xval, yval, mylambda = 0))plt.figure(figsize = (6, 4))#print(mym, train_error, val_error)plt.plot(range(1,len(X)+1), train_error, label = "train")plt.plot(range(1,len(X)+1), val_error, label = "val")plt.legend()plt.grid(True)learningCurve()


特征映射

def polyFeature(myx, power): #定义特征映射函数newx = myx.copy()for i in range(2, power+1):newx = np.insert(newx, newx.shape[1], np.power(newx[:,1], i), axis =1)return newxdef featureNormalize(myx): #特征标准化xnorm = myx.copy()feature_means = np.mean(xnorm, axis=0) #按列求均值feature_stds = np.std(xnorm, axis=0) #按列求方差xnorm[:,1:] = (xnorm[:,1:] -  feature_means[1:]) / feature_stds[1:]return xnorm, feature_means, feature_stds

标准化

newx = polyFeature(X, power = 6)
xnorm, feature_means, feature_stds = featureNormalize(newx)
mytheta = np.ones((newx.shape[1], 1))
fit_theta = optimizeTheta(mytheta, xnorm, y )

拟合

def plotFit(): #多项式拟合函数曲线xval = np.linspace(-55, 55, 50)X = np.ones((50, 1))X = np.insert(X, 1, xval.T, axis = 1)newx = polyFeature(X, power = 6)xnorm, feature_means, feature_stds = featureNormalize(newx)yval =  h(fit_theta, xnorm)dataPlot()plt.plot(xval, yval, 'r--')
plotFit()


多项式学习曲线可视化

def polyLearningCurve(): #定义多项式学习曲线initial_theta = np.ones((7, 1)) #初始化thetatrain_error, val_error = [], []myXval = featureNormalize( polyFeature(Xval, 6))[0]for i in range(1, X.shape[0]+1, 1):train_subset = featureNormalize(polyFeature( X[:i, :], 6))[0]y_subset = y[:i,:]theta1 = optimize.fmin_cg(costFunction, x0 = initial_theta, fprime = computeGradient, args = (train_subset, y_subset, 0), maxiter = 2000)train_error.append(costFunction(theta1, train_subset, y_subset, mylambda = 0))val_error.append(costFunction(theta1, myXval,yval,0))plt.figure(figsize = (6,4))    plt.plot(range(1,len(X)+1), train_error, label = "train_error")plt.plot(range(1, len(X)+1), val_error, label = "val_error")plt.legend()return theta1polyLearningCurve()        
  • 选择合适的正则系数 λ \lambda λ
def lambdaError(): #确定正则系数lambdas = [0, 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1, 3, 10]initial_theta = np.ones((7, 1)) #初始化thetatrainX = featureNormalize(polyFeature(X, 6))[0]myXval = featureNormalize( polyFeature(Xval, 6))[0]train_error, val_error = [], []for mylambda in lambdas:print(mylambda)theta1 = optimize.fmin_cg(costFunction, x0 = initial_theta, fprime = computeGradient, args = (trainX, y, mylambda), maxiter = 500)#theta1 = optimizeTheta(initial_theta, trainX, y, mylambda)train_error.append(costFunction(theta1,  trainX, y, 0))val_error.append(costFunction(theta1,  myXval, yval, 0))plt.figure(figsize = (6, 4))    plt.plot(range(1,len(lambdas)+1), train_error, label = "train_error")plt.plot(range(1, len(lambdas)+1), val_error, label = "val_error")plt.legend()   lambdaError()          

从图中看到验证误差最小的时候是lambda为0.03

延伸阅读

机器学习——反馈神经网络多分类

机器学习——神经网络多分类

机器学习——逻辑回归多分类

机器学习——逻辑回归正则(二)

机器学习——逻辑回归不正则(一)

机器学习——多元线性回归模型

机器学习——单变量线性回归模型

机器学习——方差与偏差相关推荐

  1. 机器学习-方差和偏差理论

    机器学习-方差和偏差理论 关于机器学习方差和偏差的内容其实很重要,这个方差和偏差可以帮助我们去分析,模型的泛化能力和过拟合的程度. 下面我们先给存储方差和偏差的公式: 注意,下式当中, f ( x ; ...

  2. 机器学习中过拟合、欠拟合与方差、偏差的关系是什么?

    机器学习中过拟合.欠拟合与方差.偏差的关系是什么? 过拟合(overfitting)与欠拟合(underfitting)是统计学中的一组现象.过拟合是在统计模型中,由于使用的参数过多而导致模型对观测数 ...

  3. 机器学习中的偏差和方差是什么?

    机器学习中的偏差和方差是什么? 机器学习全部是关于给定输入数据(X)和给定输出数据(Y),然后去寻找一个最佳映射函数(F),这个映射函数通常也被叫做目标函数. 任何机器学习算法的预测误差可以分解为三部 ...

  4. 转载:理解机器学习中的偏差与方差

    学习算法的预测误差, 或者说泛化误差(generalization error)可以分解为三个部分: 偏差(bias), 方差(variance) 和噪声(noise). 在估计学习算法性能的过程中, ...

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

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

  6. 吴恩达机器学习课后作业——偏差和方差

    1.写在前面 吴恩达机器学习的课后作业及数据可以在coursera平台上进行下载,只要注册一下就可以添加课程了.所以这里就不写题目和数据了,有需要的小伙伴自行去下载就可以了. 作业及数据下载网址:吴恩 ...

  7. 机器学习中的方差与偏差

    方差与偏差的定义 方差:不同的训练数据集训练出的模型输出值之间的差异. 偏差:用所有可能的训练数据集训练出的所有模型的输出的平均值与真实模型的输出值之间的差异. 方差与偏差的数学公式 首先,以回归为例 ...

  8. 理解机器学习中的偏差与方差

    学习算法的预测误差, 或者说泛化误差(generalization error)可以分解为三个部分: 偏差(bias), 方差(variance) 和噪声(noise). 在估计学习算法性能的过程中, ...

  9. 机器学习中的偏差、方差以及泛化误差

    在机器学习中学习器的实际预测结果与样本的真实输出往往存在误差(error) 学习器在训练集上的误差称为"训练误差"(training error)or "经验误差&quo ...

最新文章

  1. 京东金融科技学堂开班,AI 在金融云上有了新成果
  2. flink启动命令参数_Flink调优之前,必须先看懂的TaskManager内存模型
  3. [H5表单]一些html5表单知识及EventUtil对象完善
  4. 让你的man手册显示与众不同
  5. 数学之美系列16(转帖)
  6. sudo rosdep init ERROR: cannot download default sources list from: https://raw.githubusercontent.com
  7. 2021-2025年中国冲浪板鳍行业市场供需与战略研究报告
  8. IPO 跑路,细思极恐!
  9. java 进制转换十进制
  10. mysql phpmyadmin远程_phpMyAdmin远程连接mysql数据库
  11. 《学习Oracle从这里开始》之常用SQL篇
  12. html5做出toast效果,toast提示效果
  13. 由三点画圆到未来日记:失控中的位置隐私
  14. LaTex图表中英文标题,中英文图表目录
  15. Android学习笔记:实现app启动界面跳过倒计时功能
  16. 室内定位方案部署WIFI定位还是IBeacon定位-新导智能
  17. 关于编程语言和编程工具
  18. TensorFlow入门之二:tensorflow手写数字识别
  19. Lit(二):响应式属性
  20. android多点触控的使用

热门文章

  1. less、scss、sass
  2. 2019-4-19小米面试总结
  3. 初识Redis——邂逅
  4. 有一函数,当y= -1 (x「0);y=0 (x=0);y=1(x「0),编一个程序,输入一个x值,输出y值
  5. nodemon 安装
  6. 2023年全国最新道路运输从业人员精选真题及答案27
  7. solor快速_Solr快速入门(一)
  8. 26个字母表达80后个性
  9. PAT题集2019.5.23排名变动
  10. angular5 升级到 angular7 步骤