美文网首页
逻辑回归

逻辑回归

作者: fighting_coder | 来源:发表于2019-08-01 10:30 被阅读0次

逻辑回归一种常用于用于二分类问题的算法,通过sigmod函数将一个数值转化为0,1之间的一个概率,大于0.5划分为1,小于0.5划分为0

1.sigmoid函数
y=\frac{1}{1+e^{-x}}
关于sigmoid函数的导数也是非常容易得出y^{'}=y(1-y),在机器学习中通常x是由线性模型构成的,用矩阵形式表示如下
y=\frac{1}{1+e^{-W^TX}}
w就是要学习的参数

2.损失函数
逻辑回归的损失函数是用交叉熵损失函数,分类问题中真实标签y^{n}\in{0,1},所以样本{x^{n},y^{n}}概率可以表示为
\begin{equation} \left\{ \begin{array}{**lr**} p(y^{n}=1|x^{n})=y^{n}, &\\ p(y^{n}=0|x^{n})=1-y^{n} \end{array} \right. \end{equation}
损失函数可以表达为
L(w)=-\frac{1}{N}\sum_{n=1}^{N}(y^nlog\hat{y}^{n}+(1-y^{n})log(1-\hat{y}^{n}))
损失函数的偏导数如下
\begin{align*} \frac{\partial L(W)}{\partial w} &= -\frac{1}{N}\sum_{n=1}^{N}(y^{n}\frac{\hat{y}^{n}(1-\hat{y}^{n})} {\hat{y}^{n}}x^{n}-(1-y^{n})\frac{\hat{y}^{n}(1-\hat{y}^{n})} {(1-\hat{y}^n)} x^{n})\\ &=-\frac{1}{N}\sum_{n=1}^{N}(y^{n}(1-\hat{y}^{n})x^{n}-(1-y^{n})\hat{y}^{n}x^{n})\\ &=-\frac{1}{N}\sum_{n=1}^{N}x^{n}(y^{n}-\hat{y}^{n}) \end{align*}
采用梯度下降法逻辑回归的训练过程归结为初始化 w_{0}\leftarrow0,然后采用梯度下降公式更新
w_{t+1}\leftarrow w_{t}+\alpha\frac{1}{N}\sum_{n=1}^{N}(x^{n}(y^{n}-\hat{y}^{n}))

  1. python代码
    数据集使用的是titanic的数据集,用梯度下降获取最优解,主要是练习用的,熟练pandas和numpy
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split


def read_csv():
    # 获取数据集,age缺失177,Cabin(客舱)缺失687,embarked(登船港口)缺失2个,考虑选择age,sex,Pclass(乘仓的等级)作为特征
    data = pd.read_csv('train.csv')
    # 处理缺失的age,用均值替代
    data.Age.fillna(data.Age.mean(), inplace=True)
    # 处理sex(male,female)用one-hot编码
    data['Sex_type'] = data.Sex.map({'male': 0, 'female': 1})
    features = ['Sex_type', 'Age', 'Pclass']
    X = data.loc[:, features].values
    y = data.Survived.values
    return X, y


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


def initialize_with_zeros(dim):
    w = np.zeros(shape=(dim, 1))
    b = 0
    return (w, b)


def gradient(w, b, X_train, y_train):
    X = X_train.T
    m = y_train.shape[0]
    Y = np.reshape(y_train, (1, m))
    wT = w.T
    A = sigmoid(np.dot(wT, X) + b)
    cost = (-1 / m) * np.sum(Y * np.log(A) + (1 - Y) * np.log(1 - A))
    dw = (1 / m) * np.dot(X, (A - Y).T)
    db = (1 / m) * np.sum(A - Y)
    cost = np.squeeze(cost)
    grads = {
        "dw": dw,
        "db": db
    }
    return (grads, cost)


def predict(w, b, X):
    X = X.T
    m = X.shape[1]
    Y_prediction = np.zeros((1, m))
    w = w.reshape(X.shape[0], 1)
    A = sigmoid(np.dot(w.T, X) + b)
    for i in range(A.shape[1]):
        Y_prediction[0, i] = 1 if A[0, i] > 0.5 else 0
    return Y_prediction


def optimize(w, b, X, Y, num_iterations, learning_rate):
    costs = []
    for i in range(num_iterations):
        grads, cost = gradient(w, b, X, Y)
        dw = grads["dw"]
        db = grads["db"]
        w = w - learning_rate * dw
        b = b - learning_rate * db
        if i % 100 == 0:
            costs.append(cost)
            print("迭代次数:%i,误差值:%f" % (i, cost))
    params = {
        'w': w,
        'b': b
    }
    grads = {
        "dw": dw,
        "db": db
    }
    return (params, grads, costs)


if __name__ == '__main__':
    X, y = read_csv()
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
    m = X.shape[1]
    w, b = initialize_with_zeros(m)
    parameters, grads, costs = optimize(w, b, X_train, y_train, num_iterations=50000, learning_rate=0.001)
    w, b = parameters["w"], parameters["b"]
    Y_prediction_train = predict(w, b, X_train)
    Y_prediction_test = predict(w, b, X_test)
    print("训练集准确性:", format(100 - np.mean(np.abs(Y_prediction_train - y_train)) * 100), "%")
    print("测试集准确性:", format(100 - np.mean(np.abs(Y_prediction_test - y_test)) * 100), "%")

实验结果

训练集准确性: 79.34131736526946 %
测试集准确性: 78.47533632286995 %

数据集下载地址
https://www.kaggle.com/c/titanic/data

相关文章

  • 机器学习day7-逻辑回归问题

    逻辑回归 逻辑回归,是最常见最基础的模型。 逻辑回归与线性回归 逻辑回归处理的是分类问题,线性回归处理回归问题。两...

  • ML03-逻辑回归(下部分)

    本文主题-逻辑回归(下部分):逻辑回归的应用背景逻辑回归的数学基础逻辑回归的模型与推导逻辑回归算法推导梯度下降算法...

  • ML02-逻辑回归(上部分)

    本文主题-逻辑回归(上部分):逻辑回归的应用背景逻辑回归的数学基础逻辑回归的模型与推导逻辑回归算法推导梯度下降算法...

  • 逻辑回归模型

    1.逻辑回归介绍2.机器学习中的逻辑回归3.逻辑回归面试总结4.逻辑回归算法原理推导5.逻辑回归(logistic...

  • Task 01|基于逻辑回归的分类预测

    知识背景 关于逻辑回归的几个问题 逻辑回归相比线性回归,有何异同? 逻辑回归和线性回归最大的不同点是逻辑回归解决的...

  • 11. 分类算法-逻辑回归

    逻辑回归 逻辑回归是解决二分类问题的利器 逻辑回归公式 sklearn逻辑回归的API sklearn.linea...

  • 机器学习100天-Day4-6逻辑回归

    逻辑回归(Logistic Regression) 什么是逻辑回归 逻辑回归被用于对不同问题进行分类。在这里,逻辑...

  • SKlearn_逻辑回归小练习

    逻辑回归 逻辑回归(Logistic regression 或logit regression),即逻辑模型(英语...

  • R glm

    R 逻辑回归 R 怎么做逻辑回归

  • 逻辑斯蒂回归在二分类中的应用

    逻辑回归简介 逻辑斯蒂回归(logistic regression,又称“对数几率回归”)是经典的分类方法。逻辑斯...

网友评论

      本文标题:逻辑回归

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