3.统计学习方法—logistic regression

1. logistic模型

回归模型: f ( x ) = 1 1 + e − w x f(x) = \frac{1}{1+e^{-wx}} f(x)=1+ewx1
其中wx线性函数: w x = w 0 ∗ x 0 + w 1 ∗ x 1 + w 2 ∗ x 2 + . . . + w n ∗ x n , ( x 0 = 1 ) wx =w_0*x_0 + w_1*x_1 + w_2*x_2 +...+w_n*x_n,(x_0=1) wx=w0x0+w1x1+w2x2+...+wnxn,(x0=1)
对于二分类的logistic:
P ( Y = 1 ∣ x ) = e w ⋅ x 1 + e w x P(Y=1|x)=\frac{e^{w·x}}{1+e^{wx}} P(Y=1x)=1+ewxewx

P ( Y = 0 ∣ x ) = 1 1 + e w x P(Y=0|x)=\frac{1}{1+e^{wx}} P(Y=0x)=1+ewx1

在解释系数的时候采用优势比:一件事情发生的机率(odds)是指该事件发生的概率与不发生的概率的比值。

如果事情的发生概率是P,则该事件发生的机率是 P 1 − P \frac{P}{1-P} 1PP,该事件的对数几率或者logit函数是:
l o g i t ( p ) = log ⁡ P 1 − P logit(p)= \log \frac{P}{1-P} logit(p)=log1PP
对于logistic来说:
log ⁡ P ( Y = 1 ∣ x ) 1 − P ( Y = 1 ∣ x ) = w ⋅ x \log \frac{P(Y=1|x)}{1-P(Y=1|x)} = w·x log1P(Y=1x)P(Y=1x)=wx

1.2.参数估计

极大似然法,然后取对数似然函数

最优化:梯度下降法、拟牛顿法

1.3 案例及代码

from math import exp
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler


def load_data():
    iris = load_iris()
    df = pd.DataFrame(iris.data,columns = iris.feature_names)
    df['label'] = iris.target
    df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']
    data = np.array(df.iloc[:100, [0, 1, -1]])
    return data[:,:2] , data[:,-1]

class LogisticRegressionClassifier:
    def __init__(self,max_iter=200,learning_rate=0.01):
        self.max_iter = max_iter
        self.learning_rate = learning_rate

    def sigmod(self, x):
        return 1 / (1+exp(-x))

    def data_matrix(self, X):
        data_mat = []
        for d in X:
            data_mat.append([1.0 ,*d]) # 单星号是多组参数以元组的形式传参,双星号是字典
        return data_mat

    def fit(self, X, y):
        data_mat = self.data_matrix(X)
        self.weights = np.zeros((len(data_mat[0]),1),dtype=np.float32)

        for iter_ in range(self.max_iter):
            for i in range(len(X)):
                result = self.sigmod(np.dot(data_mat[i],self.weights))    # dot矩阵乘法
                error = y[i] - result
                self.weights += self.learning_rate * error * np.transpose([data_mat[i]])  #transpose矩阵转置

    def score(self, X_test, y_test):
        right = 0
        X_test = self.data_matrix(X_test)
        for x, y in zip(X_test, y_test):      #zip就是将x,y变成一对一对的,就像(1,22)这种
            result = np.dot(x, self.weights)
            if (result > 0 and y == 1) or (result < 0 and y == 0):
                right += 1
        return right / len(X_test)


if __name__ == '__main__':

    X,y = load_data()

    X_train,X_test,y_train,y_test = train_test_split(X,y,train_size=0.7,test_size=0.3)
    sc = StandardScaler()
    sc.fit(X_train)  # 计算均值和方差
    x_train_std = sc.transform(X_train) #利用计算好的方差和均值进行Z分数标准化
    x_test_std = sc.transform(X_test)

    model = LogisticRegressionClassifier()
    model.fit(x_train_std,y_train)
    print(model.score(x_test_std,y_test))

在这里插入图片描述

1.4 sklearn调包实现

这篇文章对sklearn实现logistic讲的特别详细,还有案例和代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 逻辑斯谛回归(logistic regression)是一种用于分类问题的统计学习方法,属于监督学习中的一种。它的基本思想是通过建立模型去学习不同特征之间的关系,然后使用这个模型去对未知数据进行分类。逻辑斯谛回归是一种线性模型,可用于进行二分类或多分类问题。在统计学习方面,逻辑斯谛回归是一种经典的机器学习方法。 ### 回答2: 逻辑斯谛回归是一种用于二分类问题的机器学习算法。其基本思想是将输入变量与一个sigmoid函数相乘,从而得到该分类的概率值。这个sigmoid函数将实数映射到[0,1]区间内,当概率趋近于0时,函数取到0,概率趋近于1时,函数取到1,当输入为0时,函数取到0.5。这个函数的形式为: $$\sigma(z)=\frac{1}{1+e^{-z}}=\frac{e^z}{1+e^z}$$ 其中z为线性回归模型的输出。逻辑斯谛回归通过最大似然估计来确定模型参数,目标是最大化似然函数。似然函数的形式为: $$L(w)=\prod_{i=1}^N[y_iP(y_i=1|x_i,w)+(1-y_i)P(y_i=0|x_i,w)]$$ 其中N为样本数,$y_i\in\{0,1\}$为样本i的类别,$y_i=1$表示正例,$y_i=0$表示反例。$P(y_i=1|x_i,w)$和$P(y_i=0|x_i,w)$分别表示当输入变量为$x_i$时,样本i的正例概率和反例概率。使用log函数对似然函数取负对数,然后对参数w求偏导,得到的结果为: $$\nabla L(w)=\sum_{i=1}^N[y_i-\sigma(w^Tx_i)]x_i$$ 使用梯度下降法来更新参数,得到迭代更新公式为: $$w^{(t+1)}=w^{(t)}+\eta\nabla L(w^{(t)})$$ 其中$\eta$为学习率,$w^{(t)}$表示t时刻的参数值。 逻辑斯谛回归可以扩展到多分类问题,称为softmax回归,也可以应用于不同的领域,例如医学诊断、金融风险评估等。 ### 回答3: 逻辑斯谛回归(Logistic Regression)是一种用于处理二分类问题的统计机器学习算法,其思想来源于逻辑学。在《统计学习方法》一书中,逻辑斯谛回归是目标函数为对数似然函数,利用梯度下降法或牛顿法估计参数的一类判别模型。 逻辑斯谛回归的模型可以表示为$$h_{\boldsymbol{w}}(\boldsymbol{x})=\sigma(\boldsymbol{w}^{\rm T} \boldsymbol{x})$$其中,$h_{\boldsymbol{w}}(\boldsymbol{x})\in [0,1]$ 表示 $\boldsymbol{x}$ 属于正类的概率,$\sigma(z)=\dfrac{1}{1+\mathrm{e}^{-z}}$ 是 sigmoid 函数。逻辑斯谛回归的目标函数是对数似然函数$$L(\boldsymbol{w})=\sum_{i=1}^{N}[y_i \log h_{\boldsymbol{w}}(\boldsymbol{x_i})+(1-y_i)\log(1-h_{\boldsymbol{w}}(\boldsymbol{x_i}))]$$其中,$N$ 是样本数量,$y_i\in\{0,1\}$ 是样本 $\boldsymbol{x_i}$ 的真实标记。对数似然函数一般通过梯度下降法或牛顿法来求得最优参数 $\boldsymbol{w}$。梯度下降法的更新公式是$$\boldsymbol{w} \leftarrow \boldsymbol{w}+\alpha \sum_{i=1}^{N}(y_i-h_{\boldsymbol{w}}(\boldsymbol{x_i}))\boldsymbol{x_i}$$其中,$\alpha$ 是学习率,$\boldsymbol{w}$ 初始化为 0 或其它随机值,重复进行上述更新直到收敛。牛顿法是一种二阶优化方法,其参数更新公式是$$\boldsymbol{w} \leftarrow \boldsymbol{w}-\boldsymbol{H}^{-1}\nabla_{\boldsymbol{w}}L(\boldsymbol{w})$$其中,$\boldsymbol{H}$ 是 Hessian 矩阵。牛顿法比梯度下降法收敛速度更快,但计算量更大。 逻辑斯谛回归的优点是模型参数较少,计算速度较快,且可以得到样本属于正类的概率。缺点是对异常值比较敏感,对特征之间的相关性比较敏感,容易出现过拟合。在实际应用中,可以通过添加正则化项或使用 L1、L2 正则化等方式来避免过拟合。 总之,逻辑斯谛回归是一种用于处理二分类问题的有效算法,可以应用于回归和分类问题。它的思想简单,实现容易,是初学者入门的理想算法之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值