梅花三弄,算法研习:Logistic算法原理分析,nothing

频道:微博新闻 日期: 浏览:152
喜欢就点关注吧!


在这篇文章中,我将用数学解释逻辑回归,介绍逻辑回归、sigmoid函数以及最大似然估计三者之间的关系。然后使用python中的卫老梯度下降实现一个逻辑回归示例。本文主要包括五个问题:

1.什么是Logistic回归?

2.为什么不使用线性回梅花三弄,算法研习:Logistic算法原理分析,nothing归?

3.最大似然估计(MLE)

4.梯度下降

5.附python梯度下降实现代码


Logistic回归

Logistic回归是一种经典的统计模型,已广泛应用于学术界和工业界。与用于进行预测的线性回归不同,逻辑回归也用于解决分类问题。例如当一个人从银行申请贷款时,银行对申请人将来是否会违约非常感兴趣?(是/否问题)。解决此问题的一种方法是直接预测申请人的未来状态。这种方法称为感知。感知是另一个有趣的问题,它是SVM和神经网络的基础。另一种方法就是逻辑回归,对申请人违约概率进行北大法宝预测。由于概率的性质,预测将落在[0,1]中。根据经验如果预测概率大于或等于0.5,吉普指南者那么我们可以标记为YES;如果预测概率小于0.5,那么我们可以标记为NO;然而线性回归的范围是从负无穷到正无穷,而不是[0,1]。要解决这个问题,就需要使用Sigmoid函数了。其函数表达式为:


Sigmoid函数具有许多属性。



因此在逻辑回归中,y可以写为:



记住这个表达式,下边我们会用到。


线性回归的缺点

“统计学习简介”一书给出了直截了当的解释。首先,线性回归的范围是概率边界[0,1]之外的。例如,如果通过线性回归和逻辑回归预测违约概率,则通过线性回归的一些预测概率甚至是负的,而逻辑回归不会出现这样的问题。见下图。



线性回归的另一个问题是预测值总是基数,如1,2,3,而不是类别。


最大似然估计

从整个人口总体中抽取一个样本。该样本遵循伯努利分布。



在该公式中,y是1或0,p是事件发生的概率。如果总共有N条记录,概率是多少呢?简而言之,假设每个根本是独立且相同分布的,我们可以将N个概率联系在一起。



然后在等式两边同时取对数得。



注意,在公式中的p是需要估计的参数(概率),p的表达式为:



这个公式熟悉吗?是的,这就是第1部分中的S形函数。在统计中,最大似然估计(MLE)通过找到最大似然函数的参数值来获得参数估计。在这个典型的例子,我们可以计算出参数p最大化对数似然,这也等于最小化成本函数。这是凸优化中的双重问题。如果您有兴趣,我推荐Stephen Boyd和Lieven Vandenberghe的书Convex Optimization。成本函数为:

这就是似然函数、sigmoid函数以及逻辑回归损失函数三者之间的数学联系。


梯度下降

与具有封闭形式解的线性回归不同,逻辑回归采用梯度下降来寻找最优解。麻藤康梯度下降的一般思想是迭代地调整参数以最小化成本函数。主要有三种梯度下降,包括批量梯度下降,小批量梯度下降和随机梯度下降。在本文中我们主成龙激动拥吻影迷要采用批量梯度下降。木耳炒鸡蛋



根据我们定义的逻辑回归的成本函数J,得到其梯度是:



在第1部分中应用sigmoid函数的导数,然后我们可以得到梯度化简为:



最后,将初始值赋给w; 然后通过学习率*成本函数梯度迭代更新w,直到成本函数象拔最小化。



附Python梯度下降实现

这一部分我将通过虹膜分类数据来展示梯度下降如何工作的。首先导入必要的python库。


from sklearn import datasets
i梅花三弄,算法研习:Logistic算法原理分析,nothingmport numpy as np
import pandas as 王迅妻子;pd
import matplotlib.pyplot as&nbs个人简历表格p;plt
import matplotlib.lines as&nb梅花三弄,算法研习:Logistic算法原理分析,nothingsp;mlines


接下来加载虹膜数据,这里只选用二分类。


# Load 梅花三弄,算法研习:Logistic算法原理分析,nothing;data
iris = datasets.load_iris()
X=iris.data[0:99,:2]
y=iris.王府井小吃街target[0:99]
# Plot the training points
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max()&nbs范冰冰的老公是谁p;+ .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
plt.figure(2,超威电池 figsize=(86))


梯度下降计算过程


#Step 1: Initial Model Parameter
Learning_Rate=0.01
num_iterations=100000
N=len(X)
w=np.zeros((2,1))
b=0
costs=[]
for i in range(num_iterations):
  #Step 2: Apply sigmoid Function and get y prediction
    Z=np.dot(w.T,X.T)卡牌读心术+b
    y_pred=1/(1+1/np.exp(Z))
&nb徐小迪腹语sp; #Step 3: Calculate Cost Funct梅花三弄,算法研习:Logistic算法原理分析,nothingion
    cost=-(1/N)*np.sum(y*np.log(y_pred)+(1-y)*np.log(1-y_pred))
  #Step 4: Calculate Gradient
    dw=1/N*np.dot(X.T,(y_pred-y).T)
    db=1/N*np.sum(y_pred-y)
 碧血大明 #Step 5: Update w & b
    w = w - Learning_Rate*dw
    b = b - Learning_Rate*db
   #Records cost
    lift;if 打眼i%100==0:
    costs.append(cost)
 &nbs梅花三弄,算法研习:Logistic算法原理分析,nothingp;  print(cost)


可视化损失函数下降过程


# Plot cost function
Epoch=pd.DataFrame(list(range(100,100001,100)))
Cost=pd.DataFrame(costs)
Cost_data=pd.concat([Epoch, Cost], a梅花三弄,算法研习:Logistic算法原理分析,nothingxis=1)
Cost_data.columns=['Epoch','Cost']
plt.scatter(Cost_data['Epoch'], Cost_data['Cost'])
plt.xlabel('Epoch')
plt.ylabel('Cost')



从上图可以看出,损失函数先急剧下降佳; 经过40000次迭代后趋于稳定。


# Plot linear classification
fig, ax = plt.subplots()
ax.scatter(X[:, 0],&nb千sp;X[:, 1], c=y, cmap=plt.cm.Set1,edgecolor='k')
line=mlines.Line2D([3.701,7],[2,4.1034],color='red')
ax.add_line(line)
ax.set_xlabel('Sepal length')
ax.set_ylabel('Sepal width')
plt.show()



图中的红线是线性决策边界。因为在这种情况下,数据只包含2个维度,因此决策边界是一条线。如果存在3个或更多个维度的情况时,决策边界是超空间。


参考

https://towardsdatascience.com/an-introduction-to-logistic-regression-8136ad65da2e

深度学习与Python,专注于深度学习、机器学习前沿知识与资讯

长按识别二维码关注

热门
最新
推荐
标签