李航统计学习方法 Chapter6 逻辑斯蒂回归

简介: 李航统计学习方法 Chapter6 逻辑斯蒂回归

第6章 逻辑斯蒂回归和最大熵模型


逻辑斯谛回归(LR)是经典的分类方法


1.逻辑斯谛回归模型是由以下条件概率分布表示的分类模型。逻辑斯谛回归模型可以用于二类或多类分类。


image.png

这里,x 为输入特征,w 为特征的权值。


逻辑斯谛回归模型源自逻辑斯谛分布,其分布函数F ( x )是S 形函数。逻辑斯谛回归模型是由输入的线性函数表示的输出的对数几率模型。


2.最大熵模型是由以下条件概率分布表示的分类模型。最大熵模型也可以用于二类或多类分类。


image.png

其中,Z w ( x ) 是规范化因子,f i为特征函数,w i为特征的权值。


3.最大熵模型可以由最大熵原理推导得出。最大熵原理是概率模型学习或估计的一个准则。最大熵原理认为在所有可能的概率模型(分布)的集合中,熵最大的模型是最好的模型。


最大熵原理应用到分类模型的学习中,有以下约束最优化问题:


image.png


求解此最优化问题的对偶问题得到最大熵模型。


4.逻辑斯谛回归模型与最大熵模型都属于对数线性模型。


5.逻辑斯谛回归模型及最大熵模型学习一般采用极大似然估计,或正则化的极大似然估计。逻辑斯谛回归模型及最大熵模型学习可以形式化为无约束最优化问题。求解该最优化问题的算法有改进的迭代尺度法、梯度下降法、拟牛顿法。


逻辑斯蒂回归(logistic regression)是统计学习中的经典分类方法。最大熵是概率模型学习的一个准则,推广到分类问题得到最大熵模型(maxium entropy model)

都属于对数线性模型


逻辑斯蒂模型


  • 二项逻辑斯谛回归模型是一种分类模型,由条件概率分布P(Y|X)表示,形式为参数化的逻辑斯谛分布。
  • 分类问题,可以表示成one-hot的形式,而one-hot可以认为是一种确定概率的表达。而最大熵模型,是一种不确定的概率表达,其中这个概率,是一个条件概率,是构建的特征函数生成的概率


逻辑斯谛分布


X是连续随机变量,X服从逻辑斯谛分布,具有以下分布函数和密度函数


image.png


关于逻辑斯谛, 更常见的一种表达是Logistic function


image.png

  • 这个函数把实数域映射到(0, 1)区间,这个范围正好是概率的范围, 而且可导,对于0输入, 得到的是0.5,可以用来表示等可能性。


二项逻辑斯谛回归模型


项逻辑斯谛回归模型是如下的条件概率分布:(这里的w 是对扩充的权值向量,包含参数b)


image.png


一个事件的几率(odds)是指改时间发生的概率与该事件不发生的概率的比值。对于逻辑斯蒂回归而言,可得


image.png

  • 当线性函数值越接近正无穷,概率值就越接近1;线性函数值越接近负无穷,概率值就越接近0。


模型参数估计


应用极大似然估计法估计模型参数,从而得到回归模型,具体步骤为求对数似然函数,并对L ( w ))求极大值,得到w 的估计值


image.png

上述过程将P ( Y = 1 ∣ x ) = π ( x ) 代入L ( w ) L(w)L(w)中,从而对L ( w )求极大值,得到w 的估计值,这样问题就变成了以对数似然函数为目标函数的最优化问题。通常采用的方法是梯度下降法以及拟牛顿法。


多项逻辑斯谛回归


假设离散型随机变量Y 的取值集合是1 , 2 , … , K 多项逻辑斯谛回归模型是


image.png


  • 上述两式和为1


  • 二项逻辑斯蒂回归的参数估计法也可以推广到多项逻辑斯蒂回归


练习


回归模型:image.png


其中w x wxwx线性函数:w x = w 0 ⋅ x 0 + w 1 ⋅ x 1 + w 2 ⋅ x 2 + . . . + w n ⋅ x n , ( x 0=1)


我们用逻辑斯蒂回归模型来进行分类问题的求解


class LogisticReressionClassifier:

def init(self, max_iter=200, learning_rate=0.01):

self.max_iter = max_iter

self.learning_rate = learning_rate

def sigmoid(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):
    # label = np.mat(y)
    data_mat = self.data_matrix(X)  # m*n
    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.sigmoid(np.dot(data_mat[i], self.weights))
            error = y[i] - result
            self.weights += self.learning_rate * error * np.transpose(
                [data_mat[i]])
    print('LogisticRegression Model(learning_rate={},max_iter={})'.format(
        self.learning_rate, self.max_iter))
# def f(self, x):
#     return -(self.weights[0] + self.weights[1] * x) / self.weights[2]
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):
        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)
lr_clf = LogisticReressionClassifier()
lr_clf.fit(X_train, y_train)
x_ponits = np.arange(4, 8)
y_ = -(lr_clf.weights[1]*x_ponits + lr_clf.weights[0])/lr_clf.weights[2]
plt.plot(x_ponits, y_)
#lr_clf.show_graph()
plt.scatter(X[:50,0],X[:50,1], label='0')
plt.scatter(X[50:,0],X[50:,1], label='1')
plt.legend()

20210717170515727.png


sklearn 实例


当然,我们也可以直接用sklearn来帮我们快速构建逻辑斯蒂回归模型

sklearn.linear_model.LogisticRegression

solver参数决定了我们对逻辑回归损失函数的优化方法,有四种算法可以选择,分别是:


a) liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。

b) lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。

c) newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。

d) sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。


from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(max_iter=200)
clf.score(X_test, y_test)
x_ponits = np.arange(4, 8)
y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]
plt.plot(x_ponits, y_)
plt.plot(X[:50, 0], X[:50, 1], 'bo', color='blue', label='0')
plt.plot(X[50:, 0], X[50:, 1], 'bo', color='orange', label='1')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend()

20210717170502226.png

相关文章
|
8月前
|
机器学习/深度学习 存储 自然语言处理
机器学习面试笔试知识点-贝叶斯网络(Bayesian Network) 、马尔科夫(Markov) 和主题模型(T M)1
机器学习面试笔试知识点-贝叶斯网络(Bayesian Network) 、马尔科夫(Markov) 和主题模型(T M)
102 0
机器学习面试笔试知识点-贝叶斯网络(Bayesian Network) 、马尔科夫(Markov) 和主题模型(T M)1
|
8月前
|
机器学习/深度学习 自然语言处理 算法
机器学习面试笔试知识点-贝叶斯网络(Bayesian Network) 、马尔科夫(Markov) 和主题模型(T M)2
机器学习面试笔试知识点-贝叶斯网络(Bayesian Network) 、马尔科夫(Markov) 和主题模型(T M)
40 0
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
【ICLR2020】基于模型的强化学习算法玩Atari【附代码】
【ICLR2020】基于模型的强化学习算法玩Atari【附代码】
135 0
|
机器学习/深度学习 算法 数据挖掘
Chapter1 统计学习方法概论
第1章 统计学习方法概论 1.统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行分析与预测的一门学科。统计学习包括监督学习、非监督学习、半监督学习和强化学习。 2.统计学习方法三要素——模型、策略、算法,对理解统计学习方法起到提纲挈领的作用。 3.本书主要讨论监督学习,监督学习可以概括如下:从给定有限的训练数据出发, 假设数据是独立同分布的,而且假设模型属于某个假设空间,应用某一评价准则,从假设空间中选取一个最优的模型,使它对已给训练数据及未知测试数据在给定评价标准意义下有最准确的预测。 4.统计学习中,进行模型选择或者说提高学习的泛化能力是一个重要问题。如果只考虑减少训
Chapter1 统计学习方法概论
《统计学习方法》极简笔记P4:朴素贝叶斯公式推导
《统计学习方法》极简笔记P4:朴素贝叶斯公式推导
《统计学习方法》极简笔记P4:朴素贝叶斯公式推导
|
机器学习/深度学习 Python
李航统计学习方法 Chapter4 朴素贝叶斯法
李航统计学习方法 Chapter4 朴素贝叶斯法
李航统计学习方法 Chapter4 朴素贝叶斯法
|
人工智能 算法 Windows
李航统计学习方法 Chapter5 决策树(上)
李航统计学习方法 Chapter5 决策树
李航统计学习方法 Chapter5 决策树(上)
|
算法 JavaScript
李航统计学习方法 Chapter5 决策树(下)
李航统计学习方法 Chapter5 决策树(下)
李航统计学习方法 Chapter5 决策树(下)
|
算法 Python
李航统计学习方法 Chapter6 最大熵模型(上)
李航统计学习方法 Chapter6 最大熵模型(上)
李航统计学习方法 Chapter6 最大熵模型(上)
|
算法 知识图谱 Python
李航统计学习方法 Chapter6 最大熵模型(下)
李航统计学习方法 Chapter6 最大熵模型(下)
李航统计学习方法 Chapter6 最大熵模型(下)