1.Logistic回归
Logistic回归是一种广义线性回归模型,是机器学习中最常见的一种用于二分类的算法模型。
Logistic回归通过给定的自变量数据集来估计事件的发生概率,结果是一个概率,因变量的范围在 0 和 1, 常用于数据挖掘、疾病自动诊断、经济预测等领域。
对于数据点,用一条直线对这些数据点进行拟合(该线称为最佳拟合直线),这个拟合的过程称为回归。
2.Logistic回归的原理
Logistic回归的模型形式
p = 1 / (1 + e^(-(w1x1 + w2x2 + ... + wb*xb)))
w是待求的权重,x是自变量
Logistic回归在因变量和自变量之间引入了一个逻辑函数,使得模型可以更好地拟合非线性关系的数据。
Logistic回归进行分类,构建分类器,找到最佳的拟合,要找到最佳的拟合参数,需要能接受所有的输入然后预测出其类别的函数。可以使用Sigmoid函数进行处理。
Sigmoid函数
3.实现过程
读取文件数据
for line in fr.readlines():
lineArr = line.strip().split()
dataMat.append([1.0,float(lineArr[0]),float(lineArr[1])])
labelMat.append(int(lineArr[2]))
return dataMat,labelMat
lineArr = line.strip().split() 对单行进行处理
dataMat.append([1.0,float(lineArr[0]),float(lineArr[1])]) 将三个浮点数值组成一个列表,并将这个列表添加到 dataMat
这个列表
labelMat.append(int(lineArr[2])) 将标签放入标签列表
sigmoid函数计算
def sigmoid(inX):
return 1.0/(1+exp(-inX))
梯度上升优化算法求最佳回归系数
def gradAscent(dataMatIn,classLabels):
dataMatrix = mat(dataMatIn) #将训练特征数据转为矩阵
labelMat = mat(classLabels).transpose() #将标签列表转为矩阵并将其转置
m,n = shape(dataMatrix) #获得矩阵的行数和列数
alpha = 0.001 #向目标移动的步长,控制速率
maxCycles = 500 #迭代次数
weights = ones((n,1)) #初始化回归系数为1(以列数即特征数量为基准)
for k in range(maxCycles):
h = sigmoid(dataMatrix * weights) #梯度上升矢量化公式
error = (labelMat - h) #公式计算
weights = weights + alpha * dataMatrix.transpose()*error
return weights.getA()
运行结果
4.总结
优点:计算代价不高,简单易用,易于理解和实现,适用于二分类问题
缺点:容易欠拟合,分类精度可能不高,无法处理多分类问题、对数据分布和假设条件有一定要求
Logistic回归与其他分类算法相比,在处理线性可分问题时具有更好的性能。