逻辑回归与线性回归非常类似,线性回归下,我们根据训练集求出下列线性方程的参数w和b(使用最小二乘法):
y=wx+b
y=wx+b
y=wx+b
式中,x是自变量,y是因变量。x为特征向量,多分类下,y是分类标签向量,其元素个数就是分类数,形如:
[0,0,0...1]
[0,0,0...1]
[0,0,0...1]
二分类下,y则是标量数值。
有了w和b,对测试集中的每个输入就能算出结果y。
逻辑回归则在线性回归的基础上通过函数L再对y做归一化处理:
p=L(wx+b)
p=L(wx+b)
p=L(wx+b)
之后再做分类。
对于二分类,L一般是logistic函数(即sigmoid函数),p是标量数值,其值域是(0,1)。我们根据
max(p,1−p)
max(p,1-p)
max(p,1−p)
决定因变量是0还是1,从而达到分类的效果。
对于多分类,L一般是softmax函数,p为一向量,向量长度为多分类的类别数,向量元素之和为1。我们取出p中最大的元素,其对应的类别就是多分类的结果。
由于逻辑回归是线性回归的结果套了一个归一化层(logistic或softmax),所以逻辑回归只能用于分类,线性回归则用于预测。
下面是一段验证代码:
from sklearn.linear_model import LogisticRegression
def test_lr():
# 指定multinomial,表明使用softmax归一化
lr = LogisticRegression(multi_class='multinomial', solver='lbfgs')
# 拟合数据
lr.fit([[1, 1, 1], [1, 0, 1], [1, 1, 0], [1, 0, 0], [0,2,1]], [0,1,1,0,2])
# lr.fit([[1, 1, 1], [1, 0, 1], [1, 1, 0], [1, 0, 0]], [0,1,1,0])
# 类别:[0 1 2]
print lr.classes_
# 拟合出来的系数,因为类别数为3,特征数为3,所以系数是3x3的矩阵
#[[ 0.23430736 -0.30624064 -0.10175753]
#[ 0.23430736 -0.30624064 -0.10175753]
#[-0.46861473 0.61248127 0.20351505]]
print lr.coef_
# 根据拟合系数算出的y值 [[ 0.67558907 0.67558907 -1.35117813]]
print lr.decision_function([[1,0,0]])
# y值softmax后的概率值:[[ 0.46909578 0.46909578 0.06180843]]
print lr.predict_proba([[1,0,0]])
# 分类结果: [1]
print lr.predict([[1,0,0]])

被折叠的 条评论
为什么被折叠?



