1、逻辑回归与线性回归的联系与区别
线性回归 | Logistic回归 | |
---|---|---|
自变量(特征) | 连续或离散 | 连续或离散 |
因变量(结果) | 连续实数 | (0,1)之间连续值 |
关系 | 线性 | 非线性 |
函数 | y = a x + b y = ax + b y=ax+b | p = S i g m o i d ( a x + b ) p = Sigmoid(ax + b) p=Sigmoid(ax+b) |
损失函数 | 拟合函数 | 预测函数 |
参数计算方式 | 最小二乘 | 最大似然估计 |
2、 逻辑回归的原理
阶跃函数
以二分类为例,输出结果要么为0,要么为1,即 y ∈ {0,1}。
分类的基本思想:
在空间中构建一个合理的超平面,把空间区域划分为两个子空间,每种类别在平面的一面。
分类结果需要将实数值约为0或1。最理想的是阶跃函数。
f ( x ) = { 1 w T + b > 0 0 w T + b < = 0 f(x) = \begin{cases} 1 & w^T+b>0\\ 0 & w^T+b<=0 \end{cases} f(x)={10wT+b>0wT+b<=0
但阶跃函数具有不连续不可导的特点,所以选择平滑版本sigmoid函数。
sigmoid函数
f ( x ) = 1 1 + e x p ( − w t x + b ) f(x) = \frac{1}{1 + exp(-w^{t}x+b)} f(x)=1+exp(−wtx+b)1
定义域是R,值域是[0 , 1],典型的概率空间,阈值为0.5,输出大于0.5归为1类,小于0.5归为0类。
3、逻辑回归损失函数推导及优化
损失函数
1.令
P ( Y = 1 ∣ x ) = exp ( w ⋅ x ) 1 + exp ( w ⋅ x ) = exp ( w ⋅ x ) / exp ( w ⋅ x ) ( 1 + exp ( w ⋅ x ) ) / ( exp ( w ⋅ x ) ) = 1 e − ( w ⋅ x ) + 1 P ( Y = 0 ∣ x ) = 1 1 + exp ( w ⋅ x ) = 1 − 1 1 + e − ( w ⋅ x ) = e − ( w ⋅ x ) 1 + e − ( w ⋅ x ) \begin{aligned} P(Y=1|x)&=\frac{\exp(w\cdot x)}{1+\exp(w\cdot x)}\\ &=\frac{\exp(w\cdot x)/\exp(w\cdot x)}{(1+\exp(w\cdot x))/(\exp(w\cdot x))}\\ &=\frac{1}{e^{-(w\cdot x)}+1}\\ P(Y=0|x)&=\frac{1}{1+\exp(w\cdot x)}\\ &=1-\frac{1}{1+e^{-(w\cdot x)}}\\ &=\frac{e^{-(w\cdot x)}}{1+e^{-(w\cdot x)}} \end{aligned} P(Y=1∣x)P(Y=0∣x)=1+exp(w⋅x)exp(w⋅x)=(1+exp(w⋅x))/(exp(w⋅x))exp(w⋅x)/exp(w⋅x)=e−(w⋅x)+11=1+exp(w⋅x)1=1−1+e−(w⋅x)1=1+e−(w⋅x)e−(w⋅x)
2.整合
参数估计这里, 似然函数中的表达
∏ i = 1 N [ π ( x i ) ] y i [ 1 − π ( x i ) ] 1 − y i \prod^N_{i=1}[\pi(x_i)]^{y_i}[1-\pi(x_i)]^{1-y_i} i=1∏N[π(xi)]yi[1−π(xi)]1−yi
这里利用了 y i ∈ { 0 , 1 } y_i\in\{0,1\} yi∈{0,1}这个特点
更一般的表达
∏ i = 1 N P ( y i ∣ x i , W ) \prod_{i=1}^NP(y_i|x_i,W) ∏i=1NP(yi∣xi,W)
3.求似然函数
利用最大似然估计,假定样本与样本之间相互独立,那么整个样本集生成的概率即为所有样本生成概率的乘积。
并求对数。
log ∏ i = 1 N [ π ( x i ) ] y i [ 1 − π ( x i ) ] 1 − y i = ∑ i = 1 N y i log ( π ( x i ) ) + ( 1 − y i ) log ( 1 − π ( x i ) ) = ∑ i = 1 N y i log ( π ( x i ) 1 − π ( x i ) ) + log ( 1 − π ( x i ) ) = ∑ i = 1 N y i ( w ⋅ x i ) − log ( 1 + exp ( w ⋅ x i ) ) \begin{aligned} \log \prod_{i=1}^N[\pi(x_i)]^{y_i}[1-\pi(x_i)]^{1-y_i}&=\sum_{i=1}^Ny_i\log(\pi(x_i))+(1-y_i)\log(1-\pi(x_i))\\ &=\sum_{i=1}^Ny_i\log(\frac{\pi(x_i)}{1-\pi(x_i)})+\log(1-\pi(x_i))\\ &=\sum_{i=1}^Ny_i(w\cdot x_i)-\log(1+\exp(w\cdot x_i)) \end{aligned} logi=1∏N[π(xi)]yi[1−π(xi)]1−yi=i=1∑Nyilog(π(xi))+(1−yi)log(1−π(xi))=i=1∑Nyilog(1−π(xi)π(xi))+log(1−π(xi))=i=1∑Nyi(w⋅xi)−log(1+exp(w⋅xi))
梯度下降法优化
梯度下降原理:
将函数比作一座山,我们站在某个山坡上,往四周看,从哪个方向向下走一小步,能够下降的最快。
4、 正则化与模型评估指标
正则化
-
L1正则化(LASSO)
在原来的损失函数基础上加上权重参数的绝对值的和
L = E i n + λ ∑ j = 1 n ∣ θ j ∣ L = E_{in} + \lambda\sum_{j=1}^{n}|\theta_j| L=Ein+λj=1∑n∣θj∣
-
L2正则化(岭回归)
在原来的损失函数基础上加上权重参数的平方和
L = E i n + λ ∑ j = 1 n θ j 2 L = E_{in} + \lambda\sum_{j=1}^{n}\theta_{j}^2 L=Ein+λj=1∑nθj2
模型评估指标
- 平均绝对误差(MAE:Mean Absolute Error)
M A E = 1 m ∑ i = 1 m ∣ ( f ( x i ) − y i ∣ MAE = \frac{1}{m}\sum_{i=1}^{m}|(f(x_i)−y_i| MAE=m1i=1∑m∣(f(xi)−yi∣
- 平均平方差(均方误差,MSE:Mean Square Error)
M S E = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 MSE = \frac{1}{m}\sum_{i=1}^{m}(f(x_i)−y_i)^2 MSE=m1i=1∑m(f(xi)−yi)2
- 方均根差(RMSE:Root Mean Square Error)
R M S E = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 RMSE=\sqrt{\frac{1}{m}∑_{i=1}^{m}(f(x_i)−y_i)^2} RMSE=m1i=1∑m(f(xi)−yi)2
- 平均绝对百分比误差(MAPE:Mean Absolute Percentage Error)
M A P E = 100 n ∑ t = 1 n ∣ y i − f i y i ∣ MAPE = \frac{100}{n}\sum_{t=1}^{n}|\frac{y_i-f_i}{yi}| MAPE=n100t=1∑n∣yiyi−fi∣
- R平方
R 2 = 1 − ∑ i = 1 N ( y i − y i ^ ) 2 ∑ i = 1 N ( y i − y i ˉ ) 2 R^2 = 1- \frac{\sum_{i=1}^N(y_i-\hat{y_i})^2}{\sum_{i=1}^N(y_i-\bar{y_i})^2} R2=1−∑i=1N(yi−yiˉ)2∑i=1N(yi−yi^)2
- 交叉检验
5、逻辑回归的优缺点
优点:
-
简单,计算量小,存储资源低
-
直接对分类的可能性进行建模,无需事先假设数据分布,避免了假设分布不准确所带来的问题
-
不是仅预测出”类别“,而是可得到近似概率预测,这对许多需要利用概率辅助决策的任务很有用
-
对率函数是任何阶可导凸函数,有很好的函数性质,现有的许多数值优化算法都可知己用于求取最优解
缺点:
-
欠拟合,精度不高。
-
数据特征有缺失或者特征空间很大时表现效果并不好。
6、样本不均衡问题解决办法
- 1. SMOTE(Synthetic Minority Over-sampling Technique)过采样小样本(扩充小类,产生新数据)
- 欠采样大样本(压缩大类,产生新数据)
- 对小类错分进行加权惩罚
- 分治ensemble
- 分层级ensemble
- 基于异常检测的分类
7、sklearn参数
sklearn.linear_model.LogisticRegression(penalty='l2', dual=False,tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='liblinear', max_iter=100, multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)
参数 | 含义 | 作用 | 说明 |
---|---|---|---|
penalty | 正则化选择参数 | 防止过拟合 | 参数可选值为l1、l2,分别对应l1正则化和l2正则化,默认是l2正则化。 |
dual | 改成对偶问题 | 相反的问题 | |
tol | 残差收敛条件 | 逻辑回归模型的损失函数是残差平方和 | 默认是0.0001,也就是只需要收敛的时候两步只差<0.0001就停止,可以设置更大或更小。 |
C | 正则化系数 | 正则化强度的导数 | 必须是一个正数,值越小,正则化强度越大,即防止过拟合的程度更大。 |
fit_intercept | 截距/方差 | 是否将截距/方差加入到决策模型中 | 默认为True |
class_weight | 正负样本比例 | 用来调节正负样本比例的 | 默认是值为None |
random_state | 随机种子的设置 | 种子相同,那么每次使用的训练集和测试集都是一样的 | 默认是None |
solver | 损失函数的优化方法 | 用来指明损失函数的优化方法 | 默认是‘liblinear’(坐标轴下降法来迭代优化损失函数)方法,还有lbfgs(拟牛顿法的一种),newton-cg(牛顿法法的一种),sag(随机平均梯度下降,数据量大时使用) |
max_iter | 算法收敛的最大迭代次数 | 求取损失函数最小值的迭代次数 | 默认是100 |
multi_class | 分类方法参数选择 | 分类方法参数选择 | ‘ovr’和‘multinomial’两个值可以选择,默认值为‘ovr’, |
verbose | 任务进程 | 输出一些模型运算过程中的东西(任务进程) | 默认是False |
warm_start | 上次的模型结果作为初始化 | 是否使用上次的模型结果作为初始化 | 默认是False |
n_jobs | 并行运算数量(核的数量) | 并行运算数量(核的数量) | 默认为1,如果设置为-1,则表示将电脑的cpu全部用上 |
3.3 调参模型对象
方法 | 含义 |
---|---|
coef_ | 返回各特征的系数,绝对值大小可以理解成特征重要性 |
intercept_ | 返回模型的截距 |
n_iter_ | 模型迭代次数 |
3.4 模型方法
方法 | 为估计器设置参数 |
---|---|
decision_function(X) | 返回决策函数值(比如svm中的决策距离) |
predict_proba(X) | 返回每个类别的概率值(有几类就返回几列值) |
predict_log_proba(X) | 返回概率值的log值(即将概率取对数) |
predict(X) | 返回预测结果值(0/1) |
score(X, y=None) | 返回函数 |
get_params(deep=True) | 返回估计器的参数 |
set_params(**params) | 为估计器设置参数 |