機器學習之監督標題學習__線性分類
阿新 • • 發佈:2019-01-05
機器學習之監督標題學習__線性分類
一,logistic迴歸 (邏輯迴歸):
通過不斷修正縮小誤差最終得到準確的模型,整個過程中需要不斷迴歸,直到達到指定的次數或者達到設定的精度
二,sigsigmoid函式:
啟用函式sigmoid函式是一種階躍函式,輸出範圍在[0,1],在迴歸問題中,我們需要找到最佳的迴歸係數,需要用到最優化演算法。
Sigmoid函式: f(x)=1/(1+exp^(-x)) (exp,高等數學裡以自然常數e為底的指數函式)通過此函式將任何數字投射為0到1之間的數,有利於進行判定
三,精度:alpha(模型允許的誤差值,一般來說誤差越小運算量越大),同時如果過分追求高精度,容易造成模型過度複雜,從而造成過擬合的情況(即在訓練集中的預測非常精確,但是在測試集中的準確率非常低)
四,步長(也稱學習率)
即每次修正的大小,如果步長變大,則每次向正確引數移動的距離變大,學習效率變高,但是容易造成引數越過正確值
五,梯度
梯度上升和梯度下降:梯度是三維以上的空間用的,類似於二維中的傾斜度,二維中的傾斜度為正的時候線向右傾斜,否則向左傾斜,同理在三維中梯度下降類似於碗裝,想要求得碗底那一點就要減,梯度上升類似於蘑菇狀,想要求得最大值,就要增加
六,程式碼實現`
'''python # -*- coding: utf-8 -*- """ Created on Fri Jan 4 20:41:37 2019 @author: ym """ from numpy import * #定義sigmoid的實現 def sigmoid(data): return 1.0/(1+exp(-data)) #print(sigmoid(40)) #當學習指定次數後退出迴圈 def gradient_ascent_test1(): def func(old): return -2*old+4 old=-1 news=0 alpha=0.001 num=5000 for i in range(num): olds=news news=olds+alpha*func(olds) return news print(gradient_ascent_test1()) #當模型到達指定精度後停止學習 def gradient_ascent_test2(): def func(old): return -2*old+4 olds=-1 news=0 alpha=0.001 #步長 pricision=0.00001 #精度 while (news-olds)>pricision: olds=news news=olds+alpha*func(olds) return news print(gradient_ascent_test2()) #資料集前80條作為訓練集 後20條作為測試集 #載入資料 def loadDataSet(): i=0 dataMat=[] labelMat=[] with open('testSet.txt','r') as fp: for line in fp.readlines(): if i>80: break array=line.strip().split() dataMat.append([1.0,float(array[0]),float(array[1])]) labelMat.append(int(array[2])) i=i+1 return dataMat,labelMat dataMat,labelMat=loadDataSet() #print(dataMat) #print(labelMat) #學習部分 獲得模型 def gradientAscent(dataMat,labelMat): #將python中的list轉為 Matrix dataMat=mat(dataMat) labelMat=mat(labelMat).T # transpose()轉置 ——》》行轉置為行 行轉置為列 m,n=shape(dataMat) #資料集有n行 3列 #numpy 建立一個值為1 n行1列的值 weights=ones((n,1)) alpha=0.0001 #步長 學習率 num=5000 #迭代的次數 for k in range(num): tempResult=sigmoid(dataMat*weights) error=labelMat-tempResult weights=weights+alpha*dataMat.T*error return weights weights=gradientAscent(dataMat,labelMat) print(weights) #測試模型 data=[1.0, 0.317029 ,14.739025] data=mat(data) y=data*weights cla=sigmoid(y) print(y,' ',cla) '''
`