logistic模型
为改进测试权重的结果,首先设置weights权重为1,然后基于其进行向量梯度递减,进行梯度递减的计算量较大,为了减少计算量可进行随机梯度递减计算。梯度递减算法自适应减小预测结果与实际结果之间的差值。
调整参数alpha = 4/(1.0+j+i)+0.0001
实参数旨在避免随着调优的进行alpha趋近于零。I,j随着迭代不断增加,alpha逐渐减小,降低参数调整的幅度。在这里我们选取的迭代次数为500次。
def stocGradAscent1(dataMatrix, classLabels, numIter=500): m,n = shape(dataMatrix) weights = ones(n) #定义初始单位矩阵 dataIndex=[] for j in range(numIter): dataIndex = list(range(m)) for i in range(m): alpha = 4/(1.0+j+i)+0.0001 # 定义常量值防止alpha趋近1 randIndex = int(random.uniform(0,len(dataIndex))) h = sigmoid(sum(dataMatrix[dataIndex[randIndex]]*weights)) error = classLabels[dataIndex[randIndex]] - h weights = weights + alpha * error * dataMatrix[dataIndex[randIndex]] del(dataIndex[randIndex]) return weights
随机梯度下降算法每次基于训练数据集中的一个随机向量(alpha/weights/向量相乘)进行调参,这样就大大减少了每次迭代的计算量。(但权重向量的调整速度较慢)。0.5作为分类阀值是logistic的通用方法ÿ