美文网首页
【原创】逻辑回归基本概念梳理

【原创】逻辑回归基本概念梳理

作者: Gaafung峰 | 来源:发表于2020-05-19 22:47 被阅读0次

逻辑回归

前言

1、逻辑回归是经典二分类方法、不是回归方法

2、机器算法中,先选简单算法、后复杂,逻辑回归特别简单,所以说 ==经典==

3、逻辑回归的边界可以是非线性,取决于传参

基本公式入门

Sigmoid函数

image.png

g(z) = \frac{1}{1+e^{-z}}

代码实现

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

存在以下特性:

  • 自变量取值为任意实数,值域:[0,1]
  • 区间
    • g:\mathbb{R} \to [0,1]
    • g(0)=0.5
    • g(- \infty)=0
    • g(+ \infty)=1

解释:将任意的输入映射到了[0,1]区间 我们在线性回归中可以得到一个预测值,再将该值映射到Sigmoid 函数 中这样就完成了由值到概率的转换,也就是分类任务

套入预测函数

h_\theta(x) = g(\theta^Tx) = \frac{1}{1+e^{-{\theta^Tx}}}

def model(X, theta):
    return sigmoid(np.dot(X, theta.T))
image.png

值转为概率,多个X样本则实现边界是非线性的

分类任务

P(y=1|x;\theta) = h_\theta(x)

P(y=0|x;\theta) = 1-h_\theta(x)

进行整合:

P(y|x;\theta) = h_\theta(x)^y(1-h_\theta(x))^{1-y}

y取0时,只有(1-h_\theta(x))^{1-y}y取1时,只有h_\theta(x)^y,如此==二分类任务(0,1)==整合为一个公式

似然函数,与线性回归相同,将P(y|x;\theta)传入

似然函数:

L(\theta) = \prod_{i=1}^m p(y_i|x_i;\theta) = \prod_{i=1}^m h_\theta(x_i)^{y_i}(1-h_\theta(x_i))^{1-y_i}

对数似然函数:

l(\theta) = \log L(\theta) = \sum_{i=1}^m (y_i\log h_\theta(x_i)+(1-y_i)\log(1-h_\theta(x_i)))

转化梯度上升为梯度下降函数

J(\theta)=-\frac{1}{m}l(\theta)

先将对数似然函数去除负号

D(h_\theta(x), y) = -y\log(h_\theta(x)) - (1-y)\log(1-h_\theta(x))

求平均损失

J(\theta)=\frac{1}{n}\sum_{i=1}^{n} D(h_\theta(x_i), y_i)

代码实现

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))

求偏导:

\frac{\partial}{\partial\theta_j}J(\theta) = -\frac{1}{m}\sum_{i=1}^m (y_i \frac{1}{h_\theta(x_i)} \frac{\partial}{\partial\theta_j}h_\theta(x_i)-(1-y_i)\frac{1}{1-h_\theta(x_i)} \frac{\partial}{\partial\theta_j}h_\theta(x_i))

= -\frac{1}{m}\sum_{i=1}^m(y_i - h_\theta(x_i))x_i^j

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

过程复杂推导有些复杂,直接附图

image.png

参数更新:

\theta_j: =\theta_j-\frac{1}{m}\sum_{i=1}^m(h_\theta(x_i)-y_i)x_i^j

theta = theta - alpha*grad
# grad调用函数gradient

降维(归一化)操作:

一般数据是有自己特征,去除后再进行回归算法会更简便

例如:Z-score规范化(标准差标准化 / 零均值标准化)

x' = (x - μ)/σ

from sklearn import preprocessing as pp

scaled_data = orig_data.copy()
scaled_data[:, 1:3] = pp.scale(orig_data[:, 1:3])

相关文章

网友评论

      本文标题:【原创】逻辑回归基本概念梳理

      本文链接:https://www.haomeiwen.com/subject/rgfwohtx.html