逻辑回归
前言
1、逻辑回归是经典二分类方法、不是回归方法
2、机器算法中,先选简单算法、后复杂,逻辑回归特别简单,所以说 ==经典==
3、逻辑回归的边界可以是非线性,取决于传参
基本公式入门
Sigmoid函数

代码实现
def sigmoid(z):
return 1 / (1 + np.exp(-z))
存在以下特性:
- 自变量取值为任意实数,值域:[0,1]
- 区间
解释:将任意的输入映射到了[0,1]区间 我们在线性回归中可以得到一个预测值,再将该值映射到Sigmoid 函数 中这样就完成了由值到概率的转换,也就是分类任务
套入预测函数
def model(X, theta):
return sigmoid(np.dot(X, theta.T))

将值转为概率,多个X样本则实现边界是非线性的
分类任务:
进行整合:
取0时,只有
,
取1时,只有
,如此==二分类任务(0,1)==整合为一个公式
似然函数,与线性回归相同,将
传入
似然函数:
对数似然函数:
转化梯度上升为梯度下降函数
先将对数似然函数去除负号
求平均损失
代码实现
def cost(X, y, theta):
left = np.multiply(-y, np.log(model(X, theta)))
right = np.multiply(1 - y, np.log(1 - model(X, theta)))
return np.sum(left - right) / (len(X))
求偏导:
def gradient(X, y, theta):
"""
计算梯度
"""
grad = np.zeros(theta.shape) # 初始化参数数组
error = (model(X, theta)- y).ravel() # 求误差,ravel是把多维变为一维
for j in range(len(theta.ravel())): #for each parmeter
term = np.multiply(error, X[:,j])
grad[0, j] = np.sum(term) / len(X) # X代表含义不太理解
return grad
过程复杂推导有些复杂,直接附图

参数更新:
theta = theta - alpha*grad
# grad调用函数gradient
降维(归一化)操作:
一般数据是有自己特征,去除后再进行回归算法会更简便
例如:Z-score规范化(标准差标准化 / 零均值标准化)
from sklearn import preprocessing as pp
scaled_data = orig_data.copy()
scaled_data[:, 1:3] = pp.scale(orig_data[:, 1:3])
网友评论