逻辑回归定义:
逻辑回归是一种解决二分类(0 or 1)问题的机器学习方法,用于估算某种事物的可能性。
逻辑回归和线性回归的关系
联系
- 都是广义线性回归模型(generalized linear model)
- 逻辑回归去掉Sigmoid映射函数的话,就算是一个线性回归。
区别
线性回归得到的是一个连续的结果,而逻辑回归得到的是一个离散的结果。
优缺点
优点
- 高效,不需要太大的计算量,又通俗易懂,不需要缩放输入特征,不需要任何调整,且又很容易调整,并且输出校准好的预测概率。
- 非常容易实现,且训练很高效
- 可以用它作为一个很好的基准,用来衡量其他更复杂的算法。
缺点
- 不能解决非线性问题(或者说解决起来很困难,至少我现在不会,太菜),因为它的决策边界是线性的。
- 高度依赖正确的数据表示,所以在确定所有的重要变量之前不会成为一个有用的工具。
- 只能预测分类结果
- 容易过拟合
原理
逻辑回归模型是广义线性回归模型的拓展。
广义线性模型如下:
y
=
g
−
1
(
w
T
x
+
b
)
y =g^{-1}(w^Tx+b)
y=g−1(wTx+b)
其中的函数
g
(
.
)
g(.)
g(.)称为 “ 联系函数 ” ,且是连续和充分光滑的。
逻辑回归的功能是实现二分类,但是一般的线性回归输出的是一个连续的值,所以要想输出离散的结果,就必须引入一个联系函数能够将实值转化为{0,1},最理想的是 “单位阶跃函数”,但是阶跃函数不是连续的,所以就需要找一个替代函数,而Sigmoid函数非常适合:
y
=
1
1
+
e
−
z
y=\frac{1}{1+e^{-z}}
y=1+e−z1
结合广义线性模型,我们可以得到:
h
θ
(
x
)
=
1
1
+
e
−
θ
T
x
h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}
hθ(x)=1+e−θTx1
但Sigmoid函数只能将实值转化到0到1之间,并不能直接得到0和1两个离散的值,所以这里引入了条件概率,来实现分类的目的。假如我们设
P
(
Y
=
1
∣
x
)
=
1
1
+
e
−
θ
T
x
P(Y=1|x)=\frac{1}{1+e^{-\theta^Tx}}
P(Y=1∣x)=1+e−θTx1
来表示输入一组特征样本返回的是正例的概率,那么就有
P
(
Y
=
0
∣
x
)
=
1
−
P
(
Y
=
1
∣
x
)
=
1
1
+
e
θ
T
x
P(Y=0|x)=1-P(Y=1|x)=\frac{1}{1+e^{\theta^Tx}}
P(Y=0∣x)=1−P(Y=1∣x)=1+eθTx1
现在假设有N个样本
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
n
,
y
n
)
}
\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\}
{(x1,y1),(x2,y2),...,(xn,yn)},那么每个样本出现的概率就为
P
(
x
i
,
y
i
)
=
P
(
y
i
=
1
∣
x
i
)
y
i
P
(
y
i
=
0
∣
x
i
)
(
1
−
y
i
)
P(x_i,y_i)=P(y_i=1|x_i)^{y_i}P(y_i=0|x_i)^{(1-y_i)}
P(xi,yi)=P(yi=1∣xi)yiP(yi=0∣xi)(1−yi)
则所有样本出现的概率的对数形式为
L
(
x
)
=
∑
i
=
1
n
[
y
i
l
n
P
(
y
i
=
1
∣
x
i
)
+
(
1
−
y
i
)
l
n
P
(
y
i
=
0
∣
x
i
)
]
L(x)=\sum_{i=1}^{n}[y_ilnP(y_i=1|x_i)+(1-y_i)lnP(y_i=0|x_i)]
L(x)=i=1∑n[yilnP(yi=1∣xi)+(1−yi)lnP(yi=0∣xi)]
由最大似然估计可知,逻辑回归的损失函数为
a
r
g
m
i
n
(
θ
)
−
L
(
x
)
argmin_{(\theta)} -L(x)
argmin(θ)−L(x)
我们可以用梯度下降法、牛顿法来求解损失函数,得到参数。
正则化
当模型参数过多时,容易遇到过拟合问题,因此可以在优化目标中加入正则项来控制模型的复杂度,通过惩罚过大的参数来防止过拟合。
引入正则项的LR目标函数
J
(
θ
)
=
−
1
n
∑
i
=
1
n
[
y
l
n
h
θ
(
x
)
+
(
1
−
y
)
l
n
(
1
−
h
θ
(
x
)
)
+
λ
∣
∣
w
∣
∣
p
]
J(\theta)=-\frac{1}{n}\sum_{i=1}^{n}[ylnh_{\theta}(x)+(1-y)ln(1-h_{\theta}(x))+\lambda||w||_p]
J(θ)=−n1i=1∑n[ylnhθ(x)+(1−y)ln(1−hθ(x))+λ∣∣w∣∣p]
p一般取1或2,分别对应L1,L2正则化。
L1正则化倾向于使参数变为0,因此能产生稀疏解,可以用来特征选择。
模型评估指标
常见的分类指标有准确率,召回率,ROC曲线等,通常用准确率作为一般评估标准,但这个标准的默认假设前提是数据是平衡的,正例、反例的重要性一样,二分类器的阈值是0.5
样本不均衡问题及其解决方法
- 不平衡的类分布(imbalanced class distribution)的定义:
属于某一类别的观测样本的数量显著少于其他类别。 - 发生原因
机器学习算法通常被设计成通过减少误差来提高准确率。 - 处理不平衡数据集的方法
数据层面:随机重采样、随机过采样、基于聚类的过采样、信息性过采样、改进的合成少数类过采样技术
算法集成技术:基于Bagging方法、基于Boosting方法、自适应boosting-Ada Boost、梯度树、XGBoost
Sklearn库参数略谈
from sklearn.linear_model import LogisticRegression
modelLR=LogisticRegression()
modelLR.fit(X_train,Y_train) #拟合
modelLR.score(X_test,Y_test) #模型得分(准确率)
modelLR.predict_proba(data) #预测分类为0和1的概率
modelLR.predict(data) #预测是为正例还是反例。
b=modelLR.coef_ #逻辑回归模型的系数
a=modelLR.intercept_ #逻辑回归模型的截距
from sklearn.metrics import confusion_matrix
confusion_matrix(test_y.astype(str),pred_y.astype(str)) #得到混淆矩阵
from sklearn.metrics import roc_curve,auc
fpr,tpr,threshold = roc_curve(test_y,pred_y) #计算真正率,假正率
roc_auc=auc(fpr,tpr) #计算AUC值
参考资料