这里为二分类的logistic回归,即结果取值只有{0,1}的分类回归模型。例如,基于今天的天气情况,预测明天是否晴天,明天是否晴天就是取值只有两个的决策。那么在这里我们使用:
函数来表示 这个函数是著名的sigmod函数。z=0,g(z)=0.5。z>0并且越来越大的时候,g(z)无限趋向于1。z<0并且越来越小的时候,g(z)无限趋向于0。
z有可能为直线,也就是对数据用直线进行二分,那么 ,当直线拟合程度不够,z有可能是曲线。
不过,在这里,z是直线,也就是:
其中:
从概率上来讲:,
可以简化为:
似然函数:
,则
求得偏导数:
求似然函数最大值,利用梯度上升法:
求得
python实现:
import numpy as np
def sigmod(x):
return 1/(1+np.exp(-x))
def decent(x,y):
x1=np.mat(x)
alph=0.0001;
number=200
theta=np.ones((x1.shape[1]))
for index in range(x1.shape[1]):
for index1 in range(number):
theta[index]=theta[index]+alph*np.sum((y-sigmod(np.sum(x*theta,axis=1)))*x[:,index])
return theta
if __name__ == '__main__':
x=np.array([[1,1],[4,4],[4,3],[1,2],[3,4],[2,1]])
y=np.array([0,1,1,0,1,0])
print(decent(x,y))
python实现起来,因为numpy的缘故,会很方便。代码量也会很少。就是对于矩阵运算的处理更简洁。