5.8 程序示例--线性分类-机器学习笔记-斯坦福吴恩达教授
生活随笔
收集整理的這篇文章主要介紹了
5.8 程序示例--线性分类-机器学习笔记-斯坦福吴恩达教授
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
程序示例–線性分類
首先,我們使用線性核函數(shù)來(lái)訓(xùn)練線性可分問(wèn)題,這里,我們使用的是簡(jiǎn)化版 SMO 算法:
# coding: utf8 # svm/test_linear import smo import numpy as np from sklearn import datasets from scipy.io import loadmat import matplotlib.pyplot as pltdata = loadmat('data/ex6data1.mat')X = np.mat(data['X']) y = np.mat(data['y'], dtype=np.float) y[y==0] = -1m, n = X.shape tol = 1e-3 maxIter = 20 C = 1.0 # C = 100.0trainSimple, train, predict = smo.getSmo(X, y, C, tol, maxIter) alphas, w, b, supportVectorsIndex, supportVectors, iterCount = trainSimple() print w print b print len(supportVectorsIndex) print 'iterCount:%d'%iterCountpredictions = predict(X, alphas, b, supportVectorsIndex, supportVectors) errorCount = (np.multiply(predictions, y).A < 0 ).sum() print 'error rate: %.2f'%(float(errorCount)/m)# 繪制數(shù)據(jù)點(diǎn) x1Min = X[:, 0].min() x1Max = X[:, 0].max() x2Min = X[:, 1].min() x2Max = X[:, 1].max() plt.xlabel('X1') plt.ylabel('X2') plt.xlim(x1Min - 1, x1Max + 1) plt.ylim(x2Min - 1, x2Max + 1) plt.title('C=%.1f'%C) 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)# 繪制決策邊界 x = np.arange(x1Min, x1Max, 0.1) h = (-w[0,0] * x - b[0,0]) / w[1,0] plt.plot(x, h) plt.show()- C=1C=1C=1 時(shí),可以看到,左側(cè)的一個(gè)正樣本被誤分為負(fù)樣本:
- C=100C=100C=100 時(shí),可以看到,所有樣本都被正確分類,但是,多少有點(diǎn)過(guò)擬合,新來(lái)的樣本很有可能被誤分:
紅色樣本為支持向量
總結(jié)
以上是生活随笔為你收集整理的5.8 程序示例--线性分类-机器学习笔记-斯坦福吴恩达教授的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 5.7 程序示例--基于 SMO 的 S
- 下一篇: 5.9 程序示例--非线性分类-机器学习