1.公式
logistic回归函数的公式:
logistic回归函数的导数公式:
σ'(x) = σ(x) * ( 1 - σ(x) )
2.np.arange()函数画图
使用np.arange()函数画图的代码:
import numpy as np
import matplotlib.pyplot as plt
x1 = np.arange(-1000,1000,0.001)
y1 = 1.0/(1+np.exp(-x1))
yg1 = y1*(1-y1)
plt.plot(x1,y1)
plt.plot(x1,yg1)
Logistic函数图像如下:
导数图像如下:
这跟我想象的很不一样,为什么??
3.np.linspace()函数画图
使用np.linspace()函数画图的代码:
x2 = np.linspace(-10,10,1000)
y2 = 1.0/(1+np.exp(-x2))
yg2 = y2*(1-y2)
plt.plot(x2,y2)
plt.plot(x2,yg2)
Logistic函数图像如下:
导数图像如下:
这才是我们常见的效果图。
4.分析
仔细琢磨,两者取点的方式是没有问题的,但是两者取点的个数不一样(在坐标中画图其实是很多个取值(x,y)的点的连线)。
于是,修改np.arange()的点,取少一些点,步长为1:
x1 = np.arange(-10,10,1)
可以隐约看到折线,修改步长为0.1:
x1 = np.arange(-10,10,0.1)
原来是图片展示的时候y轴和x轴的取值问题,怪不得需要进行数据的归一化处理!
进一步验证,np.linspace()函数多取一些值,取10000个点:
x2 = np.linspace(-100,100,10000)
得到之前一样的效果,由于图像显示大小的原因(python画图的默认幕布大小),取的点太多了,图像在x轴方向被压缩,趋于直线。
5.总结
- 不管用什么方法,画图的时候一定要注意显示幕布的x轴和y轴的比例,不合适的话需要调整
- 在不调整图像显示大小的情况下,需要相应的修改坐标轴取值范围和个数,建议使用np.linspace()方法,可以直接控制取值个数
说明:记录学习笔记,如果错误欢迎指正!写文章不易,转载请联系我。