机器学习笔记 (2)-逻辑回归模型
来源:互联网 发布:网络犯罪举报中心 编辑:程序博客网 时间:2024/04/30 15:39
参考资料
- 《机器学习》-周志华
- 《统计学习方法》-李航
- 《斯坦福大学2014机器学习教程个人笔记》-黄海广
- 《寒小阳机器学习讲义》-寒小阳
摘要
机器学习包含监督学习、非监督学习、以及强化学习三大部分。监督学习又分为分类和回归两大类。Logistic回归模型
就属于监督学习里的分类模型
。
正文
1. 问题的引入
在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈等等。
我们从二元的分类问题开始讨论
2.逻辑回归的定义
2.1 定义:
其中
向量化表示为为:
2.2 判定边界
* z = 0时,g(z) =0.5
* z > 0时,g(z) >0.5
* z < 0时,g(z) <0.5
3.激活函数Sigmod函数
3.1 激活函数的定义:
3.2 激活函数的图像
4.损失函数
4.1 不用最小二乘定义损失函数的原因:
对应的图像为:
由上图知,最小二乘定义的损失函数不为凸函数,不易于数学计算。因此不用最小二乘定义的损失函数。
4.2 逻辑回归对应的损失函数:
该损失函数为凸函数
损失函数向量化为:
4.3正则化后的损失函数为:
正则化的目的:防止数据过拟合
4.4 损失函数对应的图像
5. 梯度下降算法
5.1 梯度下降算法求损失函数的极小值
即对损失函数,通过梯度下降算法求极小值。即:
5.2 算法的伪代码表述:
6. 多分类问题
利用二分类器进行多分类
* one vs one
利用二分类器对其中的两个类别进行训练,需要训练出 n.(n-1) 个分类器,然后选择投票数最多的类别作为整个模型最终预测的类别。
- one vs rest
在一对多方法中,我们将多类分类问题转化成二元分类问题。为了能实现这样的转变,我们将多个类中的一个类标记为正向类(y=1),然后将其他所有类都标记为负向类。
最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。
7.主要代码实现:
代码下载
#导入依赖模块import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom scipy.optimize import minimizefrom sklearn.preprocessing import PolynomialFeatures%matplotlib inline#定义sigmoid激活函数def sigmoid(z): return(1 / (1 + np.exp(-z)))#定义损失函数def costFunction(theta, X, y): m = y.size h = sigmoid(X.dot(theta)) J = -1.0*(1.0/m)*(np.log(h).T.dot(y)+np.log(1-h).T.dot(1-y)) if np.isnan(J[0]): return(np.inf) return J[0]#梯度函数def gradient(theta, X, y): m = y.size h = sigmoid(X.dot(theta.reshape(-1,1))) grad =(1.0/m)*X.T.dot(h-y) return(grad.flatten())# 最小化损失函数res = minimize(costFunction, initial_theta, args=(X,y), jac=gradient, options={'maxiter':400})
总结:
- LR模型可解释性强,可控度高
- 训练快,进行合适的特征工程之后效果很好
结果为概率,可以用于做排名 - 添加feature简单
- 常作为系统的基线模型
本章代码下载 https://github.com/yanwosky4/MLNotebookProject/tree/master/note2-LogisticModel/code
邮箱: yanwosky4@gmail.com
github地址: https://github.com/yanwosky4 ,欢迎Star