2.7 程序示例--多分类问题-机器学习笔记-斯坦福吴恩达教授
生活随笔
收集整理的這篇文章主要介紹了
2.7 程序示例--多分类问题-机器学习笔记-斯坦福吴恩达教授
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
程序示例–多分類問題
我們采用 One-vs-All 方法來進行多分類,在原有的邏輯回歸模塊中添加 One-vs-All 的訓練以及預測方法:
# coding: utf-8 # logical_regression/logical_regression.py# ...def oneVsAll(X, y, options):"""One-vs-All 多分類Args:X 樣本y 標簽options 訓練配置Returns:Thetas 權值矩陣"""# 類型數classes = set(np.ravel(y))# 決策邊界矩陣Thetas = np.zeros((len(classes), X.shape[1]))# 一次選定每種分類對應的樣本為正樣本,其他樣本標識為負樣本,進行邏輯回歸for idx, c in enumerate(classes):newY = np.zeros(y.shape)newY[np.where(y == c)] = 1result, timeConsumed = gradient(X, newY, options)thetas,errors,iterations = resultThetas[idx] = thetas[-1].ravel()return Thetasdef predictOneVsAll(X,Thetas):"""One-vs-All下的多分類預測Args:X 樣本Thetas 權值矩陣Returns:H 預測結果"""H = sigmoid(Thetas * X.T)return H測試程序如下,我們對手寫字符集進行了多分類,并統計了訓練精度:
# coding: utf-8 # logical_regression/test_onevsall.py """OneVsAll 多分類測試 """ import numpy as np import logical_regression as regression from scipy.io import loadmatif __name__ == "__main__":data = loadmat('data/ex3data1.mat')X = np.mat(data['X'])y = np.mat(data['y'])# 為X添加偏置X = np.append(np.ones((X.shape[0], 1)), X, axis=1)# 采用批量梯度下降法options = {'rate': 0.1,'epsilon': 0.1,'maxLoop': 5000,'method': 'bgd'}# 訓練Thetas = regression.oneVsAll(X,y,options)# 預測H = regression.predictOneVsAll(X, Thetas)pred = np.argmax(H,axis=0)+1# 計算準確率print 'Training accuracy is: %.2f%'%(np.mean(pred == y.ravel())*100)程序運行結果如下:
Training accuracy is: 89.26%總結
以上是生活随笔為你收集整理的2.7 程序示例--多分类问题-机器学习笔记-斯坦福吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.6 多分类问题-机器学习笔记-斯坦福
- 下一篇: 3.1 再论 0/1 分类问题-机器学习