梯度上公升法在每次更新回歸系統時都需要遍歷整個資料集,該方法在處理100個左右的資料集時尚可,但如果有數十億樣本和成千上萬的特徵,那麼該方法的計算複雜度太高了。
隨機梯度上公升演算法偽**:
所有回歸係數初始化為1
對資料集中每個樣本
計算該樣本的梯度
使用alpha*gradient更新回歸係數值
返回回歸係數值
def stocgradascent0(datamatrix, classlabels):m,n = shape(datamatrix)
alpha = 0.01
weights = ones(n) #initialize to all ones
for i in range(m):
h = sigmoid(sum(datamatrix[i]*weights))
error = classlabels[i] - h
weights = weights + alpha * error * datamatrix[i]
return weights
回歸係數經過大量迭代才能達到穩定值,並且仍然有區域性波動的現象。
對於隨機梯度演算法中存在的問題,可以通過改進的隨機梯度上公升演算法來解決。
def stocgradascent1(datamatrix, classlabels, numiter=150):m,n = shape(datamatrix)
weights = ones(n) #initialize to all ones
for j in range(numiter):
dataindex = range(m)
for i in range(m):
alpha = 4/(1.0+j+i)+0.0001 #apha decreases with iteration, does not
randindex = int(random.uniform(0,len(dataindex)))#go to 0 because of the constant
index=dataindex[randindex]
h = sigmoid(sum(datamatrix[index]*weights))
error = classlabels[index] - h
weights = weights + alpha * error * datamatrix[index]
del(dataindex[randindex])
return weights
改進:1.alpha在每次迭代的時候都會調整,這會緩解資料的波動或者高頻波動。雖然alpha會隨著迭代次數不斷減小,但永遠不會減到0,保證了新資料在多次迭代之後仍然具有一定的影響。
2.通過隨機選取樣本來更新回歸係數。這種方法將減少週期性的波動。
機器學習基礎 Logistic回歸基礎
logistics回歸模型要解決的是分類問題,在之前的二元分類問題中,我們將資料分成正例和負例,但是像pla演算法一樣,用單位階躍函式來處理的這種瞬間跳躍的過程有時很難處理。於是,我們希望能得到正例的概率值是多少。我們在pla和線性回歸演算法中都用資料的加權來計算乙個分數s,在logistic回歸中...
機器學習之線性回歸以及Logistic回歸
1 線性回歸 回歸的目的是 數值型資料的目標值。目標值的計算是通過乙個線性方程得到的,這個方程稱為回歸方程,各未知量 特徵 前的係數為回歸係數,求這些係數的過程就是回歸。對於普通線性回歸使用的損失函式一般為平方誤差。把其用最小二乘法進行優化得到的關於係數w求導所得到的矩陣形式的表示式求得的 w便為最...
機器學習 logistic
一 面對缺失資料集的方法 1.使用可用特徵的均值來填補缺失值 2.使用特殊值來填補缺失值,如 1 3.忽略有缺失值的樣本 4.使用相似樣本的均值添補缺失值 5.使用另外的機器學習演算法 缺失值。二 預處理資料做兩件事 如果測試集中一條資料的特徵值已經確實,那麼我們選擇實數0來替換所有缺失值,因為本文...