表达式:
函数图:
函数中z无论取什么值,其结果都在[0,-1]的区间内,我们假设分类的阈值是0.5,那么超过0.5的归为A分类,低于0.5的归为B分类,阈值是可以自己设定的。
逻辑函数的表达式为:
导函数为:
可做如下转换:
逻辑函数是一个连续且任意阶可导的函数
举个例子;如果我们已经积累了大量的违约客户和正常客户的样本数据,利用极大似然函数由果溯因,估计出使得目前结果的可能性最大参数(系数)θ,有了参数我们就可以求任何一个客户违约的概率了。
我们假设信贷违约的后验概率:
相应的可以得到客户不违约的概率:
如果令:
违约的后验概率可以写成:
不违约的后验概率可以写成:
对于某一个客户,我们采集到了样本数据(x,y)。对于这个样本,他的标签是y的概率可以定义成:
其中y∈{0,1}。当y=0时,上式为不违约的后验概率,当y=1时,上式为违约的后验概率。
现在我们有m个客户的观测样本:
将每一个样本发生的概率相乘,就是这个合成在一起得到的合事件发生的总概率(利用概率中的乘法公式),即为似然函数,可以写成:
其中θ为待求参数。
注:我们总是希望出现目前结果的可能性最大,所以想要得到极大化似然函数对应的参数θ。
为便于求解,我们引入不改变函数单调性的对数函数ln,把连乘变成加法,得到对数似然函数:
至此,可以用梯度上升法求解对数似然函数,求出使得目前结果的可能性最大的参数θ。
方式二我们基于对数似然函数构造损失函数,用梯度下降法求出使得损失最小对应的参数θ
损失函数需求满足两个条件:
1、损失函数 可以衡量 模型的好坏
2、参数可导,便于求解最优解,也就是损失函数的最小值
结合上式中的极大似然函数,如果取整个数据集上的平均对数似然损失,我们可以得到:
其中J(θ)为损失函数,由对数似然函数前面添加负号取平均得到。
即在逻辑回归模型中,最大化似然函数和最小化损失函数实际上是等价的(求最大化对数似然函数对应的参数θ和求最小化平均对数似然损失对应的参数θ是一致的),即:
梯度求解基本步骤如下:
梯度下降、随机梯度下降、mini 随机梯度下降降法。随机梯度下降不但速度上比原始梯度下降要快,局部最优化问题时可以一定程度上抑制局部最优解的发生
牛顿法其实就是通过切线与x轴的交点不断更新切线的位置,直到达到曲线与x轴的交点得到方程解。在实际应用中我们因为常常要求解凸优化问题,也就是要求解函数一阶导数为0的位置,而牛顿法恰好可以给这种问题提供解决方法
牛顿法首先选择一个点作为起始点,并进行一次二阶泰勒展开得到导数为0的点进行一个更新,直到达到要求,这时牛顿法也就成了二阶求解问题,比一阶方法更快
拟牛顿法: 不用二阶偏导而是构造出Hessian矩阵的近似正定对称矩阵的方法称为拟牛顿法。拟牛顿法的思路就是用一个特别的表达形式来模拟Hessian矩阵或者是他的逆使得表达式满足拟牛顿条件。主要有DFP法(逼近Hession的逆)、BFGS(直接逼近Hession矩阵)、 L-BFGS(可以减少BFGS所需的存储空间)。
方式一:
## logistcs regresion
# encoding: utf-8
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 1.加载数据
iris = datasets.load_iris()
X = iris.data[:, :3] #取特质
Y = iris.target
# 2.拆分测试集、训练集。
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=100)
# 3.标准化特征值 min-max / starnder deviion (平均值 + 方差=1)
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)
# 4. 训练逻辑回归模型
logreg = linear_model.LogisticRegression(C=1e5,max_iter=100, solver='liblinear',multi_class='ovr')
logreg.fit(X_train, Y_train)
# 5. 预测
##多元逻辑回归 Softmax 回归更合适一些。Softmax 回归是直接对逻辑回归在多分类的推广,相应的模型也可以叫做多元逻辑回归(Multinomial Logistic Regression)。
#模型通过 softmax 函数来对概率建模
y_pred= logreg.predict_proba(X_test_std)
acc = logreg.score(X_test_std,Y_test)
print('Train/Test split results:')
print("准确率为 %2.3f" % acc)
阅读量:2013
点赞量:0
收藏量:0