问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python怎么实现逻辑回归的梯度下降法

发布网友 发布时间:2022-04-26 01:18

我来回答

2个回答

懂视网 时间:2022-04-18 12:09

这篇文章主要介绍了python实现逻辑回归的方法示例,这是机器学习课程的一个实验,整理出来共享给大家,需要的朋友可以参考学习,下来要一起看看吧。

本文实现的原理很简单,优化方法是用的梯度下降。后面有测试结果。

先来看看实现的示例代码:

# coding=utf-8
from math import exp

import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets.samples_generator import make_blobs


def sigmoid(num):
 '''

 :param num: 待计算的x
 :return: sigmoid之后的数值
 '''
 if type(num) == int or type(num) == float:
 return 1.0 / (1 + exp(-1 * num))
 else:
 raise ValueError, 'only int or float data can compute sigmoid'


class logistic():
 def init(self, x, y): 
 if type(x) == type(y) == list:
 self.x = np.array(x)
 self.y = np.array(y)
 elif type(x) == type(y) == np.ndarray:
 self.x = x
 self.y = y
 else:
 raise ValueError, 'input data error'

 def sigmoid(self, x):
 '''

 :param x: 输入向量
 :return: 对输入向量整体进行simgoid计算后的向量结果
 '''
 s = np.frompyfunc(lambda x: sigmoid(x), 1, 1)
 return s(x)

 def train_with_punish(self, alpha, errors, punish=0.0001):
 '''

 :param alpha: alpha为学习速率
 :param errors: 误差小于多少时停止迭代的阈值
 :param punish: 惩罚系数
 :param times: 最大迭代次数
 :return:
 '''
 self.punish = punish
 dimension = self.x.shape[1]
 self.theta = np.random.random(dimension)
 compute_error = 100000000
 times = 0
 while compute_error > errors:
 res = np.dot(self.x, self.theta)
 delta = self.sigmoid(res) - self.y
 self.theta = self.theta - alpha * np.dot(self.x.T, delta) - punish * self.theta # 带惩罚的梯度下降方法
 compute_error = np.sum(delta)
 times += 1

 def predict(self, x):
 '''

 :param x: 给入新的未标注的向量
 :return: 按照计算出的参数返回判定的类别
 '''
 x = np.array(x)
 if self.sigmoid(np.dot(x, self.theta)) > 0.5:
 return 1
 else:
 return 0


def test1():
 '''
 用来进行测试和画图,展现效果
 :return:
 '''
 x, y = make_blobs(n_samples=200, centers=2, n_features=2, random_state=0, center_box=(10, 20))
 x1 = []
 y1 = []
 x2 = []
 y2 = []
 for i in range(len(y)):
 if y[i] == 0:
 x1.append(x[i][0])
 y1.append(x[i][1])
 elif y[i] == 1:
 x2.append(x[i][0])
 y2.append(x[i][1])
 # 以上均为处理数据,生成出两类数据
 p = logistic(x, y)
 p.train_with_punish(alpha=0.00001, errors=0.005, punish=0.01) # 步长是0.00001,最大允许误差是0.005,惩罚系数是0.01
 x_test = np.arange(10, 20, 0.01)
 y_test = (-1 * p.theta[0] / p.theta[1]) * x_test
 plt.plot(x_test, y_test, c='g', label='logistic_line')
 plt.scatter(x1, y1, c='r', label='positive')
 plt.scatter(x2, y2, c='b', label='negative')
 plt.legend(loc=2)
 plt.title('punish value = ' + p.punish.str())
 plt.show()


if name == 'main':
 test1()

运行结果如下图

总结

【相关推荐】

1. Python免费视频教程

2. Python基础入门教程

3. Python面向对象视频教程

热心网友 时间:2022-04-18 09:17

import sys

#Training data set
#each element in x represents (x0,x1,x2)
x = [(1,0.,3) , (1,1.,3) ,(1,2.,3), (1,3.,2) , (1,4.,4)]
#y[i] is the output of y = theta0 * x[0] + theta1 * x[1] +theta2 * x[2]
y = [95.364,97.217205,75.195834,60.105519,49.342380]

epsilon = 0.0001
#learning rate
alpha = 0.01
diff = [0,0]
max_itor = 1000
error1 = 0
error0 =0
cnt = 0
m = len(x)

#init the parameters to zero
theta0 = 0
theta1 = 0
theta2 = 0

while True:

cnt = cnt + 1

#calculate the parameters
for i in range(m):

diff[0] = y[i]-( theta0 + theta1 * x[i][1] + theta2 * x[i][2] )

theta0 = theta0 + alpha * diff[0] * x[i][0]
theta1 = theta1 + alpha * diff[0]* x[i][1]
theta2 = theta2 + alpha * diff[0]* x[i][2]

#calculate the cost function
error1 = 0
for lp in range(len(x)):
error1 += ( y[i]-( theta0 + theta1 * x[i][1] + theta2 * x[i][2] ) )**2/2

if abs(error1-error0) < epsilon:
break
else:
error0 = error1

print ' theta0 : %f, theta1 : %f, theta2 : %f, error1 : %f'%(theta0,theta1,theta2,error1)

print 'Done: theta0 : %f, theta1 : %f, theta2 : %f'%(theta0,theta1,theta2)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
粒上皇开口熟栗120g*5袋(共600g)-详细介绍 三皇王板栗介绍 品牌榜:2024年板栗十大品牌排行榜 投票结果公布【新】 为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 关于安全用电的感想,300字左右 安全生产体会感想 电厂燃料部输煤运行安全大讨论心得体会 批量梯度下降法一定可以到全局最优点吗 关于安全生产的心得体会 急、急、急 关于余热发电中控员的个人年终总结 高温作业安全知识学习心得体会 火力电厂安全漫画教育心得 黄皮果叶能养乌龟吗? 黄皮果叶可以和艾草一起吃吗? 黄皮叶背面像蚯蚓粪便一样的虫子 藜蒿是不是鱼腥草 小米11tpro香港什么时候发布 拟在浙江省建筑市场监管与诚信信息系统上新增注册建造师备案,提示已被其它单位备案,要先调离,怎么办? 浙江省住房和城乡建设厅关于开展外省入浙勘察设计企业信息入库工 浙江省工程建设现场管理岗位专业知识成绩查询在哪里? 浙江省的五大员是怎么报名的 求网址 怎样下载浙江平安建设信息系统手机专用软件? 浙江城投建设有限公司电话是多少? 浙江省建设厅信息港 红米手机总是显示系统空间不足怎么办 红米手机运行内存不足怎么办 电脑软件的是怎么安装的 为什么屏幕录制不能录制系统声音,只能录制麦克风声音? 2020年为什么越来越多人都在考BIM证书? 现在BIM的考试有很多,而且还发证书,到底哪个考试国家更认可,哪个证书对于找工作方面更有优势? 现在BIM的考试有很多,而且还发证书,到底哪个考试国家更认可,哪个证书对于找工作方面更有优势? 现在考BIM等级证书的人多吗? 现在考BIM等级证书的人多吗? 现在市场上bim证书很多,到底哪家靠谱啊? 市面上有好几种BIM证书,请问哪个权威性更大,考BIM证书有什么条件*,需要从事本行业多久可以报考? 2021年了,BIM证书哪家的含量高? 网络运营商禁用咋解除 手机绑定了电信运营商怎么解除 电营运商解puk码是多少 iphone4运营商破解 怎么样解除手机运营商禁止 日版5已经越狱,求教怎么解锁运营商,苹果论坛 好康贷是哪家银行的 我的手机卡被运营商锁了,如何快速解除