logistic regression

来源:互联网 发布:婚恋软件 编辑:程序博客网 时间:2024/06/09 13:23

logistic regression就是逻辑回归。感觉上就是把数据进行分类,然后对输入样本进行预测。
为了区分许多邮件中存在的垃圾邮件,
我们假设:
y = 1 不是垃圾邮件
y = 0 是垃圾邮件
要是y只能去0或1,提出了sigmoid函数
这里写图片描述
定义:
g(z) >= 0.5, y=1
g(z) < 0.5, y=1
然后定义一组数据{x1,x2,x3..,xn}代表邮件信息

这里写图片描述
所以当h(x) >= 0.5 ,y = 1;h(x) < 0.5, y = 0;

cost function :
这里写图片描述
Gradient Descent:
这里写图片描述

伪代码如下:
每一个回归系数为1:
重复R次:
计算数据
更新回归系数
返回回归系数

书上例举了三种更新回归系数的方法。
1.计算alphas*回归系数的向量(计算整个数据集)

def gradient(dataArr,labelArr):    dataArr = np.mat(dataArr)    labelArr = np.mat(labelArr).transpose()    m,n = np.shape(dataArr)    alphas = 0.001    weights = np.ones((n,1))    for i in range(500):        h = sigmoid(dataArr*weights)        error = labelArr - h        weights = weights + alphas * dataArr.transpose() * error    return weights.tolist()

结果图
这里写图片描述
2.计算alphas*回归系数的向量(计算当前样本的)

def gradient0(dataArr,labelArr):    m,n = np.shape(dataArr)    weights = np.ones(n)    alphas = 0.01    for i in range(m):        h = sigmoid(sum(dataArr[i]*weights))        error = labelArr[i] - h        weights = weights + alphas * error * np.array(dataArr[i])    return weights   

结果图:
这里写图片描述
3.时时更新alphas*回归系数(随机取样)

def gradient1(dataArr,labelArr,num=150):     m,n = np.shape(dataArr)     weights = np.ones(n)     for i in range(num):         dataIndex = range(m)         for j in range(m):             alphas = 4/(1.0+j+i) + 0.01             randomIndex = int(np.random.uniform(0,len(dataIndex)))             h = sigmoid(sum(dataArr[randomIndex]*weights))             error = labelArr[randomIndex] - h             weights = weights + alphas * error * np.array(dataArr[randomIndex])             np.delete(dataIndex,dataIndex[randomIndex])     return weights

结果图
这里写图片描述

原创粉丝点击