美文网首页
人工智能00018 深度学习与图像识别书评18 机器学习基础07

人工智能00018 深度学习与图像识别书评18 机器学习基础07

作者: 水晓朴 | 来源:发表于2023-10-31 00:35 被阅读0次

4.2.5 Python实现逻辑回归

结合之前所讲的理论,本节开始动手实现一个逻辑回归算法。

首先,我们定义一个类,类名为LogisticRegression,并初始化一些变量:维度、截距、theta值,示例代码如下:

class LogisticRegression:

 def __init__(self):

   """初始化Logistic regression模型"""

   self.coef_ = None #维度self.intercept_ = None #截距

   self._theta = None

接着,我们来实现损失函数中的sigmoid(·θT)这个函数,我们之前在4.2.1节已经实现过了Sigmoid函数,

对于sigmoid(·θT)函数,我们输入的值为多元线性回归中的θ0x0+θ1x1+θ2x2+…+θnxn(其中x0恒等于1),为了提高执行效率,我们建议使用向量化来进行处理,而尽量避免使用for循环,所以对于θ0x0+θ1x1+θ2x2+…+θnxn我们使用·θT来代替,具体代码如下:

def _sigmoid(x):

   y = 1.0 / (1.0 + np.exp(-x))

   return y

接着我们来实现损失函数:  实现代码具体如下: #计算损失函数

   def J(theta,X_b,y):

     p_predcit = self._sigmoid(X_b.dot(theta))try:

       return -np.sum(y*np.log(p_predcit) + (1-y)*np.log(1-p_predcit)) / len(y)

     except:

       return float('inf')

然后,我们需要实现损失函数的导数。

具体求导过程读者可以自行搜索,我们这里直接给出结论,对于损失函数cost,得到的导数值为: 之前提到过,为考虑计算性能应尽量避免使用for循环实现累加,所以在这里我们使用向量化计算。

完整实现代码具体如下:

import numpy as np

class LogisticRegression:

 def __init__(self):

   """初始化Logistic regression模型"""

   self.coef_ = None #维度

   self.intercept_ = None #截距

   self._theta = None

 #sigmoid函数,私有化函数

 def _sigmoid(self,x):

   y = 1.0 / (1.0 + np.exp(-x))

   return y

 def fit(self,X_train,y_train,eta=0.01,n_iters=1e4):

   assert X_train.shape[0] == y_train.shape[0], '训练数据集的长度需要与标签长度保持一致'

   #计算损失函数

   def J(theta,X_b,y):

     p_predcit = self._sigmoid(X_b.dot(theta))

     try:

       return -np.sum(y*np.log(p_predcit) + (1-y)*np.log(1-p_predcit)) / len(y)

     except:

       return float('inf')

   #求sigmoid梯度的导数

   def dJ(theta,X_b,y):

     x = self._sigmoid(X_b.dot(theta))

     return X_b.T.dot(x-y)/len(X_b)

   #模拟梯度下降

   def gradient_descent(X_b,y,initial_theta,eta,n_iters=1e4,epsilon=1e-8):

     theta = initial_theta

     i_iter = 0

     while i_iter < n_iters:

       gradient = dJ(theta,X_b,y)

       last_theta = theta

       theta = theta - eta * gradient

       i_iter += 1

       if (abs(J(theta,X_b,y) - J(last_theta,X_b,y)) < epsilon):

         break

     return theta

   X_b = np.hstack([np.ones((len(X_train),1)),X_train])

   initial_theta = np.zeros(X_b.shape[1])     #列向量

   self._theta = gradient_descent(X_b,y_train,initial_theta,eta,n_iters)

   self.intercept_ = self._theta[0]        #截距

   self.coef_ = self._theta[1:]          #维度

   return self

 def predict_proba(self,X_predict):

   X_b = np.hstack([np.ones((len(X_predict), 1)), X_predict])

   return

self._sigmoid(X_b.dot(self._theta))

 def predict(self,X_predict):

   proba = self.predict_proba(X_predict)

   return np.array(proba > 0.5,dtype='int')

本章小结

本章主要讲述了线性回归模型和逻辑回归模型,并做了相应的实现。

其中,线性回归是逻辑回归的基础,而逻辑回归经常被当作神经网络的神经元,因此逻辑回归又是神经网络的基础。

本章我们借逻辑回归模型介绍了机器学习中必不可少的最优化方法,以及最常见的最优化方法——梯度下降。

了解本章内容会对接下来第5章神经网络的学习有很大的帮助。

相关文章

  • 什么是深度学习

    1.1 人工智能、机器学习与深度学习 人工智能 > 机器学习 > 深度学习 即,人工智能包括机器学习,机器学习包括...

  • Pytorch机器学习——1 深度学习介绍

    outline 人工智能、机器学习与深度学习 深度学习工具介绍 1. 人工智能、机器学习与深度学习 AI:研究如何...

  • 深度学习笔记01 - 深度学习的基础概念

    [toc] 深度学习的基础概念 人工智能、机器学习与深度学习 人工智能的概念: 努力将通常由人类完成的智力任务自动...

  • 更好的理解机器学习

    人工智能、机器学习与深度学习关系 人工智能+机器学习+深度学习关系图.png 人工智能的简洁定义:   努力将通常...

  • 人工智能、机器学习与深度学习的关系 以及人工智能对图像处理的影响

    人工智能、机器学习与深度学习的关系 以及人工智能对图像处理的影响 一、 人工智能、机器学习与深度学习的多种宽泛定...

  • 机器学习入门

    机器学习:发展与未来 人工智能 > 机器学习 > 深度学习 > 神经网络 多种机器学习技术:深度学习,强化学习,蒙...

  • 2019-06-04

    “人工智能系列--机器学习与 深度学习实战班”的通知 人工智能核心技术为机器学习与深度学习,为促进高校教学工作的开...

  • 人工智能是如何应用落地的?

    人工智能的应用项目不绝于耳,机器学习、深度学习、语音识别、图像识别、神经网络等等常常充斥于我们的耳目。 人工智能如...

  • 感知人工智能操作系统

    AI即人工智能的又一波浪潮来了。机器学习,深度学习,神经网络,语音识别,图像识别...... 常常充斥我们的耳目。...

  • 中冶赛迪机器视觉讲座-机器人学

    人工智能机器视觉概述 2006 心理学家Frank Rosenblatt 首度提出深度学习的概念。 图像识别进入...

网友评论

      本文标题:人工智能00018 深度学习与图像识别书评18 机器学习基础07

      本文链接:https://www.haomeiwen.com/subject/ltjiidtx.html