博客园相关内容值得一看。逻辑回归是一种输出标签是 0 / 1 0/1 0/1的分类模型,将 s i g m o i d ( x ) = 1 1 + e − x = e x 1 + e x sigmoid(x)=\frac{1}{1+e^{-x}}=\frac{e^x}{1+e^x} sigmoid(x)=1+e−x1=1+exex套在线性回归 f ( x ) = w T x + b f(x)=w^Tx+b f(x)=wTx+b上得到,即 y = 1 1 + e − ( w T x + b ) y=\frac{1}{1+e^{-(w^Tx+b)}} y=1+e−(wTx+b)1,若模型为二分类 y = 1 / 0 y=1/0 y=1/0模型,输出的 y y y就是 y = 1 y=1 y=1的概率,即 p ( y = 1 ∣ x ) = 1 1 + e − ( w T x + b ) = e w T x + b 1 + e w T x + b p(y=1|x)=\frac{1}{1+e^{-(w^Tx+b)}}=\frac{e^{w^Tx+b}}{1+e^{w^Tx+b}} p(y=1∣x)=1+e−(wTx+b)1=1+ewTx+bewTx+b,那么 p ( y = 0 ∣ x ) = 1 − p ( y = 1 ∣ x ) = 1 1 + e w T x + b p(y=0|x)=1-p(y=1|x)=\frac{1}{1+e^{w^Tx+b}} p(y=0∣x)=1−p(y=1∣x)=1+ewTx+b1,以最大似然估计计算 w , b w,b w,b,为了表述简单,设 p ( y = 1 ∣ x ) = π ( x ) , p ( y = 0 ∣ x ) = 1 − π ( x ) p(y=1|x)=\pi(x),p(y=0|x)=1-\pi(x) p(y=1∣x)=π(x),p(y=0∣x)=1−π(x),共有 n n n个样本点且标签为 y = 0 , 1 y={0,1} y=0,1,那么似然函数 l ′ ( w , b ) = ∏ i = 1 n [ π ( x i ) ] y i [ 1 − π ( x i ) ] 1 − y i l'(w,b)=\prod_{i=1}^{n}[\pi(x_i)]^{y_i}[1-\pi(x_i)]^{1-y_i} l′(w,b)=∏i=1n[π(xi)]yi[1−π(xi)]1−yi(这里是关键,因为这里的 y i y_i yi和 1 − y i 1-y_i 1−yi都是1,相当于没加,但化简之后有抵消的作用),取对数得到 l ( w , b ) = ∑ i = 1 n [ y i l o g π ( x i ) + ( 1 − y i ) l o g ( 1 − π ( x i ) ) ] l(w,b)=\sum_{i=1}^{n}[y_ilog\pi(x_i)+(1-y_i)log(1-\pi(x_i))] l(w,b)=∑i=1n[yilogπ(xi)+(1−yi)log(1−π(xi))],合并同类项 l ( w , b ) = ∑ i = 1 n [ y i l o g π ( x i ) 1 − π ( x i ) + l o g ( 1 − π ( x i ) ) ] l(w,b)=\sum_{i=1}^{n}[y_ilog\frac{\pi(x_i)}{1-\pi(x_i)}+log(1-\pi(x_i))] l(w,b)=∑i=1n[yilog1−π(xi)π(xi)+log(1−π(xi))],把 π ( x ) \pi(x) π(x)和 1 − π ( x ) 1-\pi(x) 1−π(x)的定义代入得到 l ( w , b ) = ∑ i = 1 n [ y i ( w T x i + b ) − l o g ( 1 + e w T x i + b ) ] l(w,b)=\sum_{i=1}^{n}[y_i(w^Tx_i+b)-log(1+e^{w^Tx_i+b})] l(w,b)=∑i=1n[yi(wTxi+b)−log(1+ewTxi+b)],最大化此似然函数就是最小化 l ( w , b ) = ∑ i = 1 n [ − y i ( w T x i + b ) + l o g ( 1 + e w T x i + b ) ] l(w,b)=\sum_{i=1}^{n}[-y_i(w^Tx_i+b)+log(1+e^{w^Tx_i+b})] l(w,b)=∑i=1n[−yi(wTxi+b)+log(1+ewTxi+b)],此函数为连续可导的凸函数,多种优化方法都可求得其最优解,设 β = ( w ; b ) , x = ( x ; 1 ) \beta=(w;b),x=(x;1) β=(w;b),x=(x;1),那么负对数似然函数的梯度是 ∂ l ( β ) ∂ β = − ∑ i = 1 n x i ( y i − e β T x i 1 + e β T x i ) \frac{\partial l(\beta)}{\partial \beta}=-\sum_{i=1}^{n}x_i(y_i-\frac{e^{\beta^Tx_i}}{1+e^{\beta^Tx_i}}) ∂β∂l(β)=−∑i=1nxi(yi−1+eβTxieβTxi),梯度下降法,牛顿法都可解
设 X 1 , … , X n X_1,\dots,X_n X1,…,Xn是来自 f ( x ∣ θ 1 , … , θ k ) f(x|\theta_1,\dots,\theta_k) f(x∣θ1,…,θk)为概率密度函数的 i i d iid iid样本,似然函数的定义是 L ( θ ∣ x ) = L ( θ 1 , … , θ k ∣ x 1 , … , x n ) = ∏ i = 1 n f ( x i ∣ θ 1 , … , θ k ) L(\theta|x)=L(\theta_1,\dots,\theta_k|x_1,\dots,x_n)=\prod_{i=1}^nf(x_i|\theta_1,\dots,\theta_k) L(θ∣x)=L(θ1,…,θk∣x1,…,xn)=∏i=1nf(xi∣θ1,…,θk),即给定观测点 x x x,参数 θ \theta θ的似然函数是在参数确实是 θ \theta θ的时候,确实观测到 x x x的概率,最大化似然函数就是最大化观测到的实际情况的概率
机器学习实战中直接最大化对数似然函数,而不是最小化负对数似然函数,最大化方法用的是梯度上升,关键是计算了梯度 ∂ l ( β ) ∂ β = − ∑ i = 1 n x i ( y i − e β T x i 1 + e β T x i ) \frac{\partial l(\beta)}{\partial \beta}=-\sum_{i=1}^{n}x_i(y_i-\frac{e^{\beta^Tx_i}}{1+e^{\beta^Tx_i}}) ∂β∂l(β)=−∑i=1nxi(yi−1+eβTxieβTxi)
for k in range(maxCycles): #heavy on matrix operations
h = sigmoid(dataMatrix*weights) #matrix mult
error = (labelMat - h) #vector subtraction
weights = weights + alpha * dataMatrix.transpose()* error #matrix mult
这里 h h h得到的就是 e β T x i 1 + e β T x i \frac{e^{\beta^Tx_i}}{1+e^{\beta^Tx_i}} 1+eβTxieβTxi, e r r o r error error就是 ( y i − e β T x i 1 + e β T x i ) (y_i-\frac{e^{\beta^Tx_i}}{1+e^{\beta^Tx_i}}) (yi−1+eβTxieβTxi), d a t a M a t r i x . t r a n s p o s e ( ) ∗ e r r o r dataMatrix.transpose()* error dataMatrix.transpose()∗error 就是 x i ( y i − e β T x i 1 + e β T x i ) x_i(y_i-\frac{e^{\beta^Tx_i}}{1+e^{\beta^Tx_i}}) xi(yi−1+eβTxieβTxi),权重 β = β + α g r a d l ( β ) \beta=\beta+\alpha\ grad\ l(\beta) β=β+α grad l(β),优化权重 m a x C y c l e s maxCycles maxCycles轮后返回。一次仅用一个样本点更新系数称为随机梯度上升,由于可以在新样本到来时对分类器进行增量式更新,因而随机梯度上升是一个在线学习算法,与之对应的,梯度上升一次处理所有数据被称作“批处理”
h = sigmoid(sum(dataMatrix[i]*weights))
error = classLabels[i] - h
weights = weights + alpha * error * dataMatrix[i]
改进随机梯度上升可以使步长 α \alpha α 随迭代次数减小,防止越过最优点,还可以在随机梯度上升时随机选取样本,减少周期性的波动
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
h = sigmoid(sum(dataMatrix[randIndex]*weights))
error = classLabels[randIndex] - h
weights = weights + alpha * error * dataMatrix[randIndex]
del(dataIndex[randIndex])
感知机 f ( x ) = s i g n ( w T x + b ) f(x)=sign(w^Tx+b) f(x)=sign(wTx+b)也是一种线性分类模型,假设标签是 + 1 / − 1 +1/-1 +1/−1,数据中误分类点到超平面的距离之和是 ∑ x i ∈ M − 1 ∣ ∣ w ∣ ∣ y i ( w T x i + b ) \sum_{x_i\in M}-\frac{1}{||w||}y_i(w^Tx_i+b) ∑xi∈M−∣∣w∣∣1yi(wTxi+b),不考虑 1 ∣ ∣ w ∣ ∣ \frac{1}{||w||} ∣∣w∣∣1,就得到了损失函数 L = ∑ x i ∈ M − y i ( w T x i + b ) L=\sum_{x_i\in M}-y_i(w^Tx_i+b) L=∑xi∈M−yi(wTxi+b),求偏导得到 ∂ w L = ∑ x i ∈ M − y i x i \partial_wL=\sum_{x_i\in M}-y_ix_i ∂wL=∑xi∈M−yixi, ∂ b L = ∑ x i ∈ M − y i \partial_bL=\sum_{x_i\in M}-y_i ∂bL=∑xi∈M−yi,优化算法用批量大小为 1 1 1的批量随机梯度下降,这里是代码实现,它不能拟合 X O R XOR XOR函数而使得第一次 A I AI AI寒冬