梯度下降法实现对数几率回归

  1 import matplotlib.pyplot as plt
  2 import numpy as np
  3 import xlrd
  4
  5 def sigmoid(x):
  6     """
  7     Sigmoid function.
  8     Input:
  9         x:np.array
 10     Return:
 11         y: the same shape with x
 12     """
 13     y =1.0 / ( 1 + np.exp(-x))
 14     return y
 15
 16 def newton(X, y):
 17     """
 18     Input:
 19         X: np.array with shape [N, 3]. Input.
 20         y: np.array with shape [N, 1]. Label.
 21     Return:
 22         beta: np.array with shape [1, 3]. Optimal params with newton method
 23     """
 24     N = X.shape[0]
 25     #initialization
 26     beta = np.ones((1, 3))
 27     #shape [N, 1]
 28     z = X.dot(beta.T)
 29     #log-likehood
 30     old_l = 0
 31     new_l = np.sum(-y*z + np.log( 1+np.exp(z) ) )
 32     iters = 0
 33     while( np.abs(old_l-new_l) > 1e-5):
 34         #shape [N, 1]
 35         p1 = np.exp(z) / (1 + np.exp(z))
 36         #shape [N, N]
 37         p = np.diag((p1 * (1-p1)).reshape(N))
 38         #shape [1, 3]
 39         first_order = -np.sum(X * (y - p1), 0, keepdims=True)
 40         #shape [3, 3]
 41         second_order = X.T .dot(p).dot(X)
 42
 43         #update
 44         beta -= first_order.dot(np.linalg.inv(second_order))
 45         z = X.dot(beta.T)
 46         old_l = new_l
 47         new_l = np.sum(-y*z + np.log( 1+np.exp(z) ) )
 48
 49         iters += 1
 50     print "iters: ", iters
 51     print new_l
 52     return beta
 53
 54 def gradDescent(X, y):
 55     """
 56     Input:
 57         X: np.array with shape [N, 3]. Input.
 58         y: np.array with shape [N, 1]. Label.
 59     Return:
 60         beta: np.array with shape [1, 3]. Optimal params with gradient descent method
 61     """
 62
 63     N = X.shape[0]
 64     lr = 0.05
 65     #initialization
 66     beta = np.ones((1, 3)) * 0.1
 67     #shape [N, 1]
 68     z = X.dot(beta.T)
 69
 70     for i in range(150):
 71         #shape [N, 1]
 72         p1 = np.exp(z) / (1 + np.exp(z))
 73         #shape [N, N]
 74         p = np.diag((p1 * (1-p1)).reshape(N))
 75         #shape [1, 3]
 76         first_order = -np.sum(X * (y - p1), 0, keepdims=True)
 77
 78         #update
 79         beta -= first_order * lr
 80         z = X.dot(beta.T)
 81
 82     l = np.sum(-y*z + np.log( 1+np.exp(z) ) )
 83     print l
 84     return beta
 85
 86 if __name__=="__main__":
 87
 88     #read data from xlsx file
 89     workbook = xlrd.open_workbook("3.0alpha.xlsx")
 90     sheet = workbook.sheet_by_name("Sheet1")
 91     X1 = np.array(sheet.row_values(0))
 92     X2 = np.array(sheet.row_values(1))
 93     #this is the extension of x
 94     X3 = np.array(sheet.row_values(2))
 95     y = np.array(sheet.row_values(3))
 96     X = np.vstack([X1, X2, X3]).T
 97     y = y.reshape(-1, 1)
 98
 99     #plot training data
100     for i in range(X1.shape[0]):
101         if y[i, 0] == 0:
102             plt.plot(X1[i], X2[i], ‘r+‘)
103
104         else:
105             plt.plot(X1[i], X2[i], ‘bo‘)
106
107     #get optimal params beta with newton method
108     beta = newton(X, y)
109     newton_left = -( beta[0, 0]*0.1 + beta[0, 2] ) / beta[0, 1]
110     newton_right = -( beta[0, 0]*0.9 + beta[0, 2] ) / beta[0, 1]
111     plt.plot([0.1, 0.9], [newton_left, newton_right], ‘g-‘)
112
113     #get optimal params beta with gradient descent method
114     beta = gradDescent(X, y)
115     grad_descent_left = -( beta[0, 0]*0.1 + beta[0, 2] ) / beta[0, 1]
116     grad_descent_right = -( beta[0, 0]*0.9 + beta[0, 2] ) / beta[0, 1]
117     plt.plot([0.1, 0.9], [grad_descent_left, grad_descent_right], ‘y-‘)
118
119     plt.xlabel(‘density‘)
120     plt.ylabel(‘sugar rate‘)
121     plt.title("LR")
122     plt.show()

原文地址:https://www.cnblogs.com/ku1274755259/p/11108522.html

时间: 2024-11-02 15:32:50

梯度下降法实现对数几率回归的相关文章

对数几率回归法(梯度下降法,随机梯度下降与牛顿法)与线性判别法(LDA)

本文主要使用了对数几率回归法与线性判别法(LDA)对数据集(西瓜3.0)进行分类.其中在对数几率回归法中,求解最优权重W时,分别使用梯度下降法,随机梯度下降与牛顿法. 代码如下: 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Date : 2017-05-09 15:03:50 4 # @Author : whb ([email protected]) 5 # @Link : ${link} 6 # @Version : $Id$

[深度之眼机器学习训练营第四期]对数几率回归

基本概念 对数几率回归(Logistic Regression,又称逻辑回归)可以用来解决二分类和多分类问题.分类问题中,输出集合不再是连续值,而是离散值,即\(\mathcal{Y}\in \{0,1,2,\cdots\}\).以二分类问题为例,其输出集合一般为\(\mathcal{Y}\in \{0,1\}\). 为了解决二分类问题,对数几率回归在线性回归的基础上引入Sigmoid函数(Logistic函数),其中\(\exp(\cdot)\)是自然指数: \[ g(z) = \dfrac{

西瓜书经典算法推导(三)对数几率回归(逻辑回归)

原文地址:https://www.cnblogs.com/orangecyh/p/11939150.html

逻辑回归(logistic-regression)之梯度下降法详解

引言 逻辑回归常用于预测疾病发生的概率,例如因变量是是否恶性肿瘤,自变量是肿瘤的大小.位置.硬度.患者性别.年龄.职业等等(很多文章里举了这个例子,但现代医学发达,可以通过病理检查,即获取标本放到显微镜下观察是否恶变来判断):广告界中也常用于预测点击率或者转化率(cvr/ctr),例如因变量是是否点击,自变量是物料的长.宽.广告的位置.类型.用户的性别.爱好等等. 本章主要介绍逻辑回归算法推导.梯度下降法求最优值的推导及spark的源码实现. 常规方法 一般回归问题的步骤是: 1. 寻找预测函数

2.9 logistic回归中的梯度下降法(非常重要,一定要重点理解)

怎么样计算偏导数来实现logistic回归的梯度下降法 它的核心关键点是其中的几个重要公式用来实现logistic回归的梯度下降法 接下来开始学习logistic回归的梯度下降法 logistic回归的公式 现在只考虑单个样本的情况,关于该样本的损失函数定义如上面第三个公式,其中a是logistic回归的输出,y是样本的基本真值标签值, 下面写出该样本的偏导数流程图 假设样本只有两个特征x1和x2 为了计算Z,我们需要输入参数w1和w2和b 因此在logistic回归中,我们要做的就是变换参数w

逻辑回归模型梯度下降法跟牛顿法比较

1.综述 机器学习的优化问题中,梯度下降法和牛顿法是常用的两种凸函数求极值的方法,他们都是为了求得目标函数的近似解.梯度下降的目的是直接求解目标函数极小值,而牛顿法则变相地通过求解目标函数一阶导为零的参数值,进而求得目标函数最小值.在逻辑回归模型的参数求解中,一般用改良的梯度下降法,也可以用牛顿法. 2 梯度下降法 2.1算法描述 1.确定误差范围和下降的步长,确定函数的导函数 2.while(|新值 -旧值| >误差) 3.       旧值=新值 4.       新值=初始值-步长*导函数

梯度下降法解逻辑斯蒂回归

梯度下降法解逻辑斯蒂回归 本文是Andrew Ng在Coursera的机器学习课程的笔记. Logistic回归属于分类模型.回顾线性回归,输出的是连续的实数,而Logistic回归输出的是[0,1]区间的概率值,通过概率值来判断因变量应该是1还是0.因此,虽然名字中带着"回归"(输出范围常为连续实数),但Logistic回归属于分类模型(输出范围为一组离散值构成的集合). 整体步骤 假如我们的自变量是"数学课和英语课的成绩",x={x1,x2},因变量是"

1、回归 一元线性回归 代价函数 梯度下降法

1.回归是达尔文表弟发现的,就是说人类总体有一个平均身高.那个高个子生的孩子都个高,矮的孩子生的矮.但是他们的下一代大部分都往平均身高长,也就是说特别高的人,他们的孩子会很高,但是往往比他们自己矮.特别矮的人他们生的孩子会矮一些,但是会比自己的父母高,他们都有这种趋势.表弟管这个叫做回归. 2.一元线性回归 指的是一个自变量对应一个因变量的 一元函数.当平面坐标系中 有些散列的点的时候,我们往往想找到一条直线去拟合他们的回归线.我们管这条直线叫做一元线性回归 假定这个函数为我们要求的就是这个函数

梯度下降法解神经网络

本文是Andrew Ng在Coursera的机器学习课程的笔记. 整体步骤 确定网络模型 初始化权重参数 对于每个样例,执行以下步骤直到收敛 计算模型输出:forward propagation 计算代价函数:比较模型输出与真实输出的差距 更新权重参数:back propagation 确定网络模型 神经网络模型由输入层(layer 1).中间层(layer 2,..,L-1).输出层(layer L)三部分组成.输入层每个单元代表一个特征,输出层的每个单元代表一个类别. 如果我们的目标如果是识