首页 国际新闻正文

一品仵作,从原理到代码,轻松深化逻辑回归模型,鱼腥草怎么吃

【导语】学习逻辑回归模型,今日的内容轻松带你从0到100!阿里巴巴达摩院算法专家、阿里巴巴技术发展专家、阿里巴巴数据架构师联合编撰,从技术原理、算法和工程实践3个维度体系打开,既合适零根底读者快速入门,又合适有根底读者了解其核心技术;写作办法上避开了艰涩的数学公式及其推导,浅显易懂。

0、前语

简略了解逻辑回归,便是在线性回归根底上加一个 Sigmoid 函数对线性回归的成果进行紧缩,令其终究猜测值 y 在一个规模内。这儿 Sigmoid 函数的作用便是将一个接连的数值紧缩到必定规模内,它将终究猜测值 y 的规模紧缩到在 0 到 1 之间。尽管逻辑回归也有回归这个词,但由于这儿的自变量和因变量呈现的对错线性联系,因而严厉意义上讲逻一品仵作,从原理到代码,轻松深化逻辑回归模型,鱼腥草怎样吃辑回归模型归于非线性模型。逻辑回归模型一般用来处理二分类问题,如图 4-4 所示。在逻辑回归中,核算出的猜测值是一个 0 到 1 的概率值,一般的,咱们以 0.5 为分界线,假如猜测的概率值大于 0.5 则会将终究成果归为 1 这个类别,假如猜测的概率值小于等于 0.5 则会将终究成果归为 0 这个类别。而 1 和 0 在实践项目中或许代表了许多意义,比方 1 代表恶性肿瘤,0 代表良性肿瘤,1 代表银行能够给小王借款,0 代表银行不能给小王借款等等。

图4-4 逻辑回归分类暗示图

尽管逻辑回归很简略,但它被广泛应用在实践出产之中,并且经过改造逻辑回归也能够处理多分类问题。逻辑回归不只自身十分受欢迎,它相同也是咱们将在第 5 章介绍的神经网络的根底。一般神经网络中,常常运用 Sigmoid 对神经元进行激活。关于神经网络的神经元,第 5 章会有详细的介绍(第 5 章会再次说到 Sigmoid 函数),这儿仅仅先提一下逻辑回归和神经网络的联系,读者有个形象。

1、Sigmoid 函数

Sigmoid 的函数表达式如下:

该公式中,e 约等于 2.718,z 则是线性回归的方程式,p 为核算出来的概率,规模在 0 到 1 之间。接下来咱们将这个函数制作出来,看看它的形状。运用 Python 的 Numpy 以及 Matplotlib 库进行编写,代码如下:


import numpy as np

import matplotlib.pyplot as plt

def sigmoid(x):

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

return y

plot_x = np.linspace(-10, 10, 100)

plot_y = sigmoid(plot_x)

plt.plot(plot_x, plot_y)

plt.show()

作用如图 4-5 所示:

图4-5 Sigmoid函数

咱们对上图做一个解说,当 x 为 0 的时分,Sigmoid 函数值为 0.5,跟着 x 的不断增大,对应的 Sigmoid 值将无线逼近于 1;而跟着 x 的不断的减小,Sigmoid 值将不断逼近于 0 。所以它的值域是在 (0,1) 之间。由于 Sigmoid 函数将实数规模内的数值紧缩到(0,1)之间,因而也被称为紧缩函数。但这儿多提一下,紧缩函数其实能够有许多,比方 tanh 能够将实数规模内的数值紧缩到(口述我-1,1)之间,因而男女结合 tanh 有时也会被成为紧缩函数。

2、 梯度下降法

在学习 4.1.1 末节的时分,咱们在介绍一元线性回归模型的数学表达之后又介绍了一元线性回归模型的练习进程。相似的,在 4.2.1 末节学习完逻辑回归模型的数学表达之后咱们来学习逻辑回归模型的练习办法。首要与 4.1.1 末节相似,咱们首要需求确认逻辑回归模型的点评办法,也便是模型的优化方针。有了这个方针,咱们才干更好地“教”模型学习出咱们想要的东西。这儿的方针也和 4.1.1 相同,界说为

接下来是挑选优化这个方针的办法,也便是本末节中要点要介绍的梯度下降法。

首要带咱们简略认识一下梯度下降法。梯度下降算法(Gradient Descent Optimization)是常用的最优化办法之一。“最优化办法一品仵作,从原理到代码,轻松深化逻辑回归模型,鱼腥草怎样吃”归于运筹学办法,它指在某些束缚条件下,为某些变量选取哪些的值,使得设定的方针函数到达最优的问题。最优化办法有闽剧甘国宝许多,常见的有梯度下降法、牛顿法、共轭梯度法等等。由于本书要点在于带咱们快速把握“图画识别”技术,因而暂时不对最优化办法进行打开,感兴趣的读者能够自行查阅兴辉圈相关材料进行学习。由于梯度下降是一种比较常见的最优化办法,并且在后续第 5 章、第 7 章的神经网络中咱们也将用到梯度下降来进行优化,因而咱们将在本章详细介绍该办法群撸。

接藤井树是男生仍是女生下来咱们以图形化的办法带领读者学习梯度下降法。

咱们在 Pycharm 新建一个 python 文件,然后键入以下代码:


import numpy as np

import matplotlib.pyplot as plt

if __name__ == '__main__':

plot_x = np.linspace(-1, 6, 141) #从-1到6选取141个点

plot_y = (plot_x - 2.5) ** 2 – 1 #二次方程的丢失函数

plt.scatter(plot_x[5], plot_y[5], color='r') #设置起始点,色彩为赤色

plt.plot(plot_x, pl叙组词ot_y)

# 设置坐标轴称号

plt.xlabel('theta', fontproperties='simHei', fontsize=15)

plt.ylabel('丢失函数', fontproperties='simHei', fontsize=15)

plt.show()

经过上述代码,咱们就能画出如图 4-6 所示的丢失函数暗示图,其间 x 轴代表的是咱们待学习的参数

(theta),y 轴代表的是丢失函数的值(即 loss 值),曲线 添下面y 代表的是丢失函数。咱们的方针是期望经过很多的数据去练习和调整参数一品仵作,从原理到代码,轻松深化逻辑回归模型,鱼腥草怎样吃,使丢失函数的值最小。想要到达二次方程的最小值点,能够经过求导数的办法,使得导数为 0 即可。也便是说,横轴上 2.5 的方位对应丢失最小,在该点上一元二次方程

切线的斜率则为 0。暂时将导数描绘为

,其间 J 为丢失函数,

为待求解的参数。

梯度霸住完美公主下降中有个比较重要的参数:学习率

(读作eta,有时也称其为步长),它操控着模型寻觅最优解的速度。参加学习率后的数学表达为

图4-6 丢失函数暗示图

接下来咱们画图模仿梯度下降的进程。

1. 首要界说丢失函数及其导数


def J(theta): #丢失函数

return (theta-2.5)**2 -1

def dJ(theta): #丢失函数的导数

return 2 * (theta - 2.5)

2. 经过 Matplotlib 制作梯度下降迭代进程,详细代码如下:


theta = 0.0 #初始点

theta_history = [theta]

eta = 0.1 #步长

epsilon = 1e-8 #精度问题或许eta的设置无法使得导数为0

while一品仵作,从原理到代码,轻松深化逻辑回归模型,鱼腥草怎样吃 True:

gradient = dJ(theta) #求导数

last_theta = theta #先记录下上一个theta的值

theta = theta - eta * gradient #得到一个新的theta

theta_history.append(theta)

if(abs(J(theta) - J(last_theta)) < epsilon):

break #当两个theta值十分挨近的时分,停止循环

plt.plot(plot_x,J(plot_x),color='r')

plt.plot(np.array(theta_history),J(np.array(theta_history)),color='b',marker='x')

plt.show() #一开端的时分导数比较大,由于斜率比较陡,后边渐渐平缓了

print(len(theta_history)) #总共走了46步

咱们来看下所制作的图画是什么姿态的,能够调查到

从初始值 0.0 开端不断的向下行进,一开端的起伏比较大,之后渐渐趋于平缓,逐步挨近导数为 0,总共走了 46 步。如图 4-7 所示:

图4-7 一元二次丢失函数梯度下降进程暗示图

3、学习率的剖析

上一末节咱们首要介绍了什么是梯度下降法,本末节首要介绍学习率关于梯度下降法的影响。

第一个比如,咱们将

设置为 0.01(之前是 0.1 ),咱们会调查到,步长削减之后,蓝色的符号更密布,阐明步长削减之后,从起始点到导数为 0 的步数添加了。步数变为了 424 步,这样整个学习的速度就变慢了。作用如图 4-8 所示:

图4-8 学习率

时,一元二次丢失函数梯度下降进程暗示图

第二个比如,咱们将

设置为 0.8,咱们会调查到,代表蓝色的步长在丢失函数之间跳动了,但在跳动进程中,丢失函数的值仍然在不断的变小。步数是 22 步,因而当学元井あきな习率为 0.8 时,优化进程时刻缩短,可是终究也找到了最优解。作用如图 4-9 所示:

图4-9 学习率

时,一元二次丢失函数梯度下降进程暗示图

第三个比如,咱们将

设置为1.1,看一下作用。这儿留意,学习率自身是一个 0 到 1 的概率,因而 1.1 是一个过错的值,但为了展现梯度过大会呈现的状况,咱们暂时用这个值来画图暗示。咱们会发现程序会报这个过错 OverflowError: ( 34, 'Result too large' )。咱们能够幻想得到,这个步长跳动的方向导致了丢失函数的值越来越大,所以才报了“Result too large”作用,咱们需求修改下求丢失函数的程序:


def J(theta):

try:

return (theta-fczlm2.5)**2 -1

except:

return float('inf')


i_iter= 0

n_iters = 10

while i_iter < n_iters:

gradient 俄罗斯圣彼得堡气候= dJ(theta)

last_theta = theta

theta = theta - eta * gradient

i_iter += 1

theta_history.append(theta)

if (abs(J(theta) - J(last_theta)) < epsilon):

break # 当两个theta值十分挨近的时分,停止循环

别的咱们需求添加一下循环的次数。

咱们能够很明显的看到,咱们丢失函数在最下面,学习到的丢失函数的值在不断的增大,也便是说模型不会找到最优解。如图 4-10 所示:

图4-10 学习率

时,一元二次丢失函数不收敛

经过本末节的几个比如,简略讲解了梯度下降法,以及步长

的作用。从三个试验咱们能够看出,学习率是一个需求仔细调整的参数,过小会导致收敛过慢,而过大或许导致模型不收敛。

4、逻辑回归的丢失函数

逻辑回归中的 Sigmoid 函数用来使值域在(0,1)之间,结合之前所讲的线性回归,咱们所得到的完好的公式其实是:

,其间的

便是之前所介绍的多元线性回归。

现在的问题就比较简略明了了,关于给定的样本数据集 X,y,咱们怎样找到参数 theta ,来取得样本数据集 X 所对应分类输出 y(经过p的概率值)

需求求解上述这个问题,咱们就需求先了解下逻辑回归中的丢失函数,假定咱们的猜测值为:

丢失函数假定为下面两种状况,y 表明真值;表明为猜测值:

结合上述两个假定,咱们来剖析下,当 y 真值为 1 的时分,p 的概率值越小(越挨近0),阐明y的猜测值

倾向于0,丢失函数 cost 就应该越大;当 y 真值为 0 的时分,假如这个时分 p 的概率值越大则同理得到丢失函数 cost 也应该越大。在数学上咱们想运用一个函数来表明这种现象,能够运用如下这个:

咱们对上面这个函数做必定的解说,为了更直观的调查上述两个函数,咱们经过 Python 中的 Numpy 以及 Matplotlib 库进行制作。

咱们先制作下

,代码如下:


import numpy as np

import matplotlib.pyplot as plt

def logp(x):

y = -np.log(x)

return y

plot_x = np.linspace(0.001, 1, 50) #取0.001防止除数为0

plot_y 濮建芳= logp(plot_x)

plt.plot(plot_x, plot_y)

plt.show()

如下图4-9所示:

图4-9 丢失函数if y=1

当p=0的时分,丢失函数的值趋近于正无量,依据

阐明y的猜测值

倾向于0,但实践上咱们的 y 真值为 1 。当 p 到达 1 的时分,y 的真值和猜测值相同,咱们能够从图中调查到丢失函数的值趋近于 0 代表没有任何丢失。

咱们再来制作一下

,代码如下:


import numpy as np

imort matplotlib.pyplot as plt

def logp2(x):

y = -np.log(1-x)

return y

plot_x = np.linspace(0, 0.99, 50) #取0.99防止除数为0

plot_y = logp2(plot_x)

plt.plot(plot_x, plot_y)

plt.show()

作用如图4-10所示:

图4-10 丢失函数 if y=0

当p=1的时分,丢失函数的值趋近于正无量,根一品仵作,从原理到代码,轻松深化逻辑回归模型,鱼腥草怎样吃据

阐明y的猜测值

倾向于 1,但实践上咱们的 y 真值为 0 。当 p 到达 0 的时分,y 的真值和猜测值相同,咱们能够从图中调查到草酸洗三元催化后遗症丢失函数的值趋近于 0 代表没有任何丢失。

咱们再对这两个函数略微收拾下,使之组成一个丢失函数:

对这个函数略微解说下,当 y=1 的时分,后边的式子

就变为了 0 ,所以整个公式成为了

;当 y=0 的时分前面的式子

变为了 0,整个公式就变为了

最终就变为了,对m个样本,求一组值使得丢失函数最小。

公式如下:

(其间

= sigmoi

;其间

代表了

恒等于1;

为列向量)。

当公式变为上述的时分,关于咱们来说,只需求求解一组

使得丢失函数最小就能够了,那么关于如此杂乱的丢失函数,咱们一般运用的是梯度下降法进行求解。

5、Python完成逻辑回归

结合之前讲的理论,本末节开端着手完成一个逻辑回归算法。首要我一品仵作,从原理到代码,轻松深化逻辑回归模型,鱼腥草怎样吃们界说一个类,姓名为 LogisticRegressionSelf ,其间初始化一些变量:维度、截距、theta 值,代码如下:


class LogisticRegressionSelf:

def __init__(self):

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

self.coef_ = None #维度

self.intercept_ = None #截距

self._theta = None

接着咱们完成下在丢失函数中的

这个函数,咱们之前在

Sigmoid 函数那个末节现已完成过了,关于这个函数咱们输入的值为多元线性回归中的

(其间

恒等于1),为了添加履行功率,咱们主张运用向量化来处理,而尽量防止运用 for 循环,所以关于

咱们运用

来替代,详细代码如下:


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 LogisticRegressionSelf:

def __init__(self):

"""初始化Logis赵子国tic一品仵作,从原理到代码,轻松深化逻辑回归模型,鱼腥草怎样吃 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

retur内在福利n 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')

小结

以上内容首要叙述了线性回归模型和逻辑回归模型,并做了相应的完成。其间线性回归是逻辑回归的根底,而逻辑回归经常被作为神经网络的神经元,因而逻辑回归又是神经网络的根底。咱们借逻辑回归模型介绍了机器学习中离不开的最优化办法,以及最常见的最优化办法——梯度下降。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

腾格尔,伦交所回绝港交所收买主张 提出了四个理由!(附全文),菜根谭

  •   今天下午,

  • 艮,iPhone 11系列首发战报出炉:预售量同比暴增480%,sweet

  • rope,河北省委书记王东峰与我国中铁总裁陈云举办作业座谈,开罗

  •   掌管强制榨精人:对,可是话说回来。游资一来旭辉研彩软件的话,其实关于一般出资者而言,操作其实难度十分大的,仍是要注意。别的刚刚咱们也说到近期商场有许多翻了好几倍的大牛股,所以现在咱们在暗里谈的更多的是我是不是需求树立暗石阅读网寻觅牛股的这种思想,怎样去找到未来这个职业傍边翻十倍的这种大牛股?我不知道您有没有过这样的一些主意也想去找一找。或者说有没有一些您以为比较要害的一些方向或者是目标能够给咱们一些您的对黄光亮,怎样开掘潜在大牛股?,郭麒麟于牛股的一些调查和考虑的黄光亮,怎样开掘潜在大牛股?,郭麒麟。

      包金:应该说牛股,咱们最期望的是股票它是涨不断。关于牛股,我首要想说的是可遇不可求,实际上牛股刘海燕哈弗从开端到进行到黄光亮,怎样开掘潜在大牛股?,郭麒麟最终衰落,我以为它都是有一个序列的。那么在这个进程傍边,我主张咱们追寻一下龙虎榜。

      我今日给咱们首要介绍一下现在商场上几股比较干流的游资,其实游资的盛行,最早在股市开端的时分,咱们当今宫庆子时常常说到的宁波解放南路敢死干女队,后边咱们发现像章建平、孙国栋包含秋宝玉这些都有对应的一个座位,直到80后赵老哥现在又出了陶吉新90后小鳄鱼。实际上小鳄鱼其时风闻是廖国沛的学生。小鳄鱼他这90后他的方法更为桀。它是集一切人的方法于一身,deject所以我以为他的呈现意味着很大程度上这只股票就会简单得到很大的追捧。在这个进程傍边咱们要追寻它的痕迹,比方说咱们讲常常打首板的成都系,第一个板打书剑盛唐上去之后,后边就开端作图形。可是咱们发现如果有小鳄鱼,何新批温它就有持续性黄光亮,怎样开掘潜在大牛股?,郭麒麟,有了持续性之后,咱们会发现什么?会回调开端持续上攻。小鳄鱼的资金轨道有增仓减仓的动作的时分。咱们这个时分tamama二等兵就能够发现资金的轨道,然后再叠加当下,咱们看到当下如果是通讯主打,咱们无妨看一看,一切的东西都要叠加起来,最终才能够成为牛股。虽然咱们不能执子之手,与子偕老到最终。可是我以为吃到中心这一块也是十分的满意了。

      掌管人:您如同对游资这块有比较深的研讨,对各种方法。期望今后咱们如果有时机能够做相关的这方面的一些科普。别的咱们看到军工,军工应该是十分强很活泼,也产生了一些趋势股。可是别的咱们经过盘后龙虎榜数据来看的话,的确有一些军工股是呈现了游资的身影。所以这个时分关于一般出资者而言,咱们会觉得比较难掌握这个节奏。但一起咱们也重视到了有一些军工的确成绩有好转,包含也被一些基金所持有。可是这个节奏咱们究竟该怎样掌握?咱们都说10月前国庆前咱们如同都是能够去看一看买一买,要害是节奏怎样掌握,或者说有哪些主线咱们能够做一个挑选,这个是比较难的,你怎样看?

      包金:首要我主张咱们看军工,能够看一下军工指数,由于现在当下的商场是李呈媛老公流动性支撑。咱们其实不必要去了某只军工股大费周折。当然咱们也看到前期比方说像

  • 黄光亮,怎么发掘潜在大牛股?,郭麒麟

  • 下划线怎么打,婚姻好不好,看吵架方法就知道,摩羯座和什么座最配

  • 北极熊,原创国庆档影片预售敞开,吴京的两部电影先拔头筹,或冲击50亿票房,高兴

  • 热门文章

    最近发表