資源簡介
python實現邏輯回歸,牛頓法,梯度上升法,對西瓜數據集和鳶鳥花數據集進行學習,正確率可達100%。
代碼片段和文件信息
import?numpy?as?np
from?sklearn.model_selection?import?train_test_split
#?sigmoid函數
def?sigmoid(x):
????return?1.0?/?(1?+?np.exp(-x))
#?關于beta的高階可導連續凸函數(書上式3.27)
def?beta_function(x?y?beta):
????sum?=?0
????m?=?np.shape(x)[0]
????for?i?in?range(m):
????????sum?=?sum?-?y[i]?*?np.dot(beta?x[i].T)?+?np.log(1?+?np.exp(np.dot(beta?x[i].T)))
????return?sum
#?關于beta的一階導數
def?first_derivative_beta(x?y?beta):
????m?n?=?np.shape(x)
????sum?=?0
????for?i?in?range(m):
????????temp?=?np.math.exp(np.dot(beta?x[i].T))
????????p1?=?temp/(1+temp)
????????sum?=?sum?+?x[i]?*?(y[i]?-?p1)
????return?-sum
#?關于beta的二階導數
def?second_derivative_beta(x?y?beta):
????m?n?=?np.shape(x)
????sum?=?0
????for?i?in?range(m):
????????temp?=?np.math.exp(np.dot(beta?x[i].T))
????????p1?=?temp?/?(1?+?temp)
????????sum?=?sum?+?np.dot(x[i]?x[i].T)?*?p1?*?(1?-?p1)
????return?sum
#?牛頓法迭代
def?newton(x?y?beta0?accuracy?iteration):
????for?i?in?range(iteration):
????????beta_before?=?beta0
????????#?beta0?=?beta0?-?solve(second_derivative_beta(x?y?beta0)?first_derivative_beta(x?y?beta0))
????????beta0?=?beta0?-?first_derivative_beta(x?y?beta0)?/?second_derivative_beta(x?y?beta0)
????????if?np.dot((beta0?-?beta_before)?(beta0?-?beta_before).T)?????????????break
????????else:
????????????continue
????????#print(beta0)
????return?beta0
#?梯度上升優化算法
def?gradAscent(dataMatIn?classLabels):
????dataMatrix?=?np.mat(dataMatIn)
????labelMat?=?np.mat(classLabels).transpose()
????m?n?=?np.shape(dataMatrix)
????alpha?=?0.001
????maxCycles?=?500
????weights?=?np.ones((n?1))
????for?k?in?range(maxCycles):
????????h?=?sigmoid(dataMatrix?*?weights)
????????error?=?(labelMat?-?h)
????????weights?=?weights?+?alpha?*?dataMatrix.transpose()?*?error
????return?weights
def?main():
????data?=?np.array([[0.697?0.460?1]
?????????????????????[0.774?0.376?1]
?????????????????????[0.634?0.264?1]
?????????????????????[0.608?0.318?1]
?????????????????????[0.556?0.215?1]
?????????????????????[0.403?0.237?1]
?????????????????????[0.481?0.149?1]
?????????????????????[0.437?0.211?1]
?????????????????????[0.666?0.091?0]
?????????????????????[0.243?0.267?0]
?????????????????????[0.245?0.057?0]
?????????????????????[0.343?0.099?0]
?????????????????????[0.639?0.161?0]
?????????????????????[0.657?0.198?0]
?????????????????????[0.360?0.370?0]
?????????????????????[0.593?0.042?0]
?????????????????????[0.719?0.103?0]])
????#?訓練集的屬性
????xtrain0?=?np.hstack((data[:?0:2]?np.ones((17?1))))
????#?訓練集的樣本標簽
????ytrain0?=?data[:?2]
??
評論
共有 條評論