程序示例–模型选择

在新的一组样本中,我们将通过交叉验证集选择模型,参数 CCC 和 高斯核的参数 δδδ 我们都将在以下 8 个值中选取测试,则总共构成了 8×8=648×8=648×8=64 个模型:

[0.01,0.03,0.1,0.3,1,3,10,30][0.01,\quad 0.03,\quad 0.1,\quad 0.3,\quad 1,\quad 3,\quad 10,\quad 30][0.01,0.03,0.1,0.3,1,3,10,30]

我们选择使得交叉验证集错误率最低的模型:

# coding: utf8
# svm/test_diagnose.pyimport numpy as np
import smo
import matplotlib.pyplot as plt
from scipy.io import loadmatdata = loadmat('data/ex6data3.mat')X = np.mat(data['X'], dtype=np.float)
y = np.mat(data['y'], dtype=np.float)
XVal = np.mat(data['Xval'], dtype=np.float)
yVal = np.mat(data['yval'], dtype=np.float)m, n = X.shape
mVal, _ = XVal.shape# 纠正负样本
y[y == 0] = -1
yVal[yVal == 0] = -1Cs = [0.01, 0.03, 0.1, 0.3, 1, 3, 10, 30]
deltas = [0.01, 0.03, 0.1, 0.3, 1, 3, 10, 30]# 获得所有 C 及 delta 的组合
deltaCPairs = [[delta, C] for C in Cs for delta in deltas]# 获得训练模型
tol = 1e-3
maxIter = 5
models = [smo.getSmo(X, y, C, tol, maxIter, kernel=smo.rbfKernel(delta))for delta, C in deltaCPairs]# 开始训练
results = [train() for train, _, _  in models]# 利用交叉验证集选择模型
predictions = [models[idx][2](XVal, alphas, b, supportVectorsIndex, supportVectors)for idx, (alphas, w, b, supportVectorsIndex, supportVectors, iterCount) in enumerate(results)]
errorRates = [(np.multiply(prediction, yVal).A < 0).sum() /float(mVal) for prediction in predictions]
minIdx = np.argmin(errorRates)
alphas, w, b, supportVectorsIndex, supportVectors, iterCount = results[minIdx]
delta, C = deltaCPairs[minIdx]# 绘制数据点
x1Min = X[:, 0].min()
x1Max = X[:, 0].max()
x2Min = X[:, 1].min()
x2Max = X[:, 1].max()
plt.title(r'C=%.2f, $\delta$=%.2f, error=%.2f'%(C, delta, errorRates[minIdx]))
plt.xlabel('X1')
plt.ylabel('X2')
plt.xlim(x1Min, x1Max)
plt.ylim(x2Min, x2Max)for i in range(m):x = X[i].A[0]if y[i] == 1:color = 'black'if i in supportVectorsIndex:color = 'red'plt.scatter(x[0], x[1], marker='*', color=color, s=50)else:color = 'green'if i in supportVectorsIndex:color = 'red'plt.scatter(x[0], x[1], marker='o', color=color, s=50)# 绘制决策边界
xx1, xx2 = np.meshgrid(np.linspace(x1Min, x1Max, 100),np.linspace(x2Min, x2Max, 100)
)
_, _, predict = models[minIdx]
predictX = np.mat(np.c_[xx1.ravel(), xx2.ravel()])
predictions = predict(predictX, alphas, b, supportVectorsIndex, supportVectors)
predictions = predictions.reshape(xx1.shape)
plt.contour(xx1, xx2, predictions, [0.5], linewidths=5)
plt.show()

测试结果如下,在 C=1.0,δ=0.10C=1.0,δ=0.10C=1.0,δ=0.10 时,模型的交叉验证集误差最低:

5.10 程序示例--模型选择-机器学习笔记-斯坦福吴恩达教授相关推荐

  1. 3.10 程序示例--神经网络设计-机器学习笔记-斯坦福吴恩达教授

    神经网络设计 在神经网络的结构设计方面,往往遵循如下要点: 输入层的单元数等于样本特征数. 输出层的单元数等于分类的类型数. 每个隐层的单元数通常是越多分类精度越高,但是也会带来计算性能的下降,因此, ...

  2. 8.7 程序示例--异常检测-机器学习笔记-斯坦福吴恩达教授

    程序示例–异常检测 异常检测模型 提供了一般高斯分布模型和多元高斯分布模型.其中,多元高斯分布模型被限制到了同轴分布: # coding: utf8 # anomaly_detection/anoma ...

  3. 4.7 程序示例--算法诊断-机器学习笔记-斯坦福吴恩达教授

    程序示例–算法诊断 我们手头有一份大坝水的流量与水位关系的数据,首先我们将其划分为训练集.交叉验证集和测试集: # coding: utf-8 # algorithm_analysis/diagnos ...

  4. 5.9 程序示例--非线性分类-机器学习笔记-斯坦福吴恩达教授

    程序示例–非线性分类 接下来,我们采用高斯核函数来解决非线性可分问题,由于数据集较大,我们使用性能更好的完整版 SMO 算法进行训练: # coding: utf8 # svm/test_non_li ...

  5. 5.8 程序示例--线性分类-机器学习笔记-斯坦福吴恩达教授

    程序示例–线性分类 首先,我们使用线性核函数来训练线性可分问题,这里,我们使用的是简化版 SMO 算法: # coding: utf8 # svm/test_linear import smo imp ...

  6. 1.3 程序示例--梯度下降-机器学习笔记-斯坦福吴恩达教授

    回归模块 回归模块中提供了批量梯度下降和随机梯度下降两种学习策略来训练模型: # coding: utf-8 # linear_regression/regression.py import nump ...

  7. 6.7 程序示例--K-Means-机器学习笔记-斯坦福吴恩达教授

    程序示例–K-Means 函数定义 # coding: utf-8 # kmeans/kmeans.py import numpy as npdef loadDataSet(filename):&qu ...

  8. 10.1 掌握大数据-机器学习笔记-斯坦福吴恩达教授

    掌握大数据 在算法分析与优化一节中,我们就提到,在机器学习界流传着这样一句话: It's not who has the best algorithm that wins. It's who has ...

  9. 4.4 机器学习系统设计--垃圾邮件分类-机器学习笔记-斯坦福吴恩达教授

    机器学习系统设计–垃圾邮件分类 假定我们现有一封邮件,其内容如下: From: cheapsales@buystufffromme.com To: ang@cs.stanford.edu Subjec ...

最新文章

  1. arkit与现实世界距离比_如何使用ARKit和Pusher构建实时增强现实测量应用程序
  2. -bash: fg: no job control -bash: /usr/java/jdk1.8.0_221-amd64/jre/bin: Is a directory
  3. 在Sqlserver下巧用行列转换日期的数据统计
  4. 用上 RocketMQ,系统性能提升了 10 倍!
  5. 成功创业者所需的能力
  6. 牛人和普通人的区别在于思维方式!
  7. vim命令模式和底线_人生苦短!老鸟带你用Vim偷懒!
  8. JAVA中list的循环遍历,详解Java中list,set,map的遍历与增强for循环
  9. android应用开发全程实录-你有多熟悉listview? .
  10. c++通过TCP/IP协议提交POST信息登录到PHPChina中文开发者社区
  11. 更新sqlmap1.5.5版本教程(附带下载地址)
  12. 空间数据库管理方案及数据文件组织方式
  13. 魔兽世界n 服服务器维护时段,魔兽世界N服人员撤离新N服 E服即将面临关闭
  14. JAVA (Graphics2D)解决合成图片失真问题
  15. 干货|一网打尽,100个高价值资料库免费使用!还不快为孩子们收藏?|方格教育
  16. 时间格式处理获取本年份的起止时间
  17. 虚拟内存(操作系统)
  18. 我和Double Lift的故事(五)——升华篇​
  19. ad策略下发_windows 2008 server 域环境通过组策略下发计划任务
  20. 总帐追溯到各模块 R12

热门文章

  1. 机器学习技法-随机森林(Random Forest)
  2. LeetCode -- 3Sum
  3. hdu 5092 线裁剪(纵向连线最小和+输出路径)
  4. 毕业设计《MMORPG DEMO》——1
  5. 解决网通英文wiki无法显示图片问题【20100723更新】
  6. 合并表格,并实现对datatable的group by 功能
  7. UA OPTI570 量子力学30 Degenerate Stationary Perturbation Theory简介
  8. 平衡不完全区组设计 数据分析的SAS实践
  9. UA MATH574M 统计学习V Variable Selection简介
  10. Luogu2791 幼儿园篮球题【斯特林数,数学】