图例是啥,直接上图就知道了: 怎么创建上面的图例呢? 很简单,首先在plt.plot()函数中设置label文本属性,然后调用plt.legend()生成图例就可以了,完整的代码如下: import numpy as np import pandas as pd import matplotlib.pyplot as plt # 生成x轴上的数据:从-3到3,总共有50个点 x = np.linspace(-1, 1, 50) # 定义一个线性方程 y1 = 2 * x + 1 # 定义一个二次…
本节讲述在图片中添加注解. 直接上代码: import numpy as np import pandas as pd import matplotlib.pyplot as plt # 生成x轴上的数据:从-3到3,总共有50个点 x = np.linspace(-1, 1, 50) # 定义一个线性方程 y1 = 2 * x + 1 # 定义一个二次方程 y2 = x ** 2 # 绘制红色的线宽为1虚线的线条,注意这里p1后面有个逗号 plt.plot(x, y1, color='red'…
柱状图在平常的图表中是非常常用的图,本节我们来看下如何来显示柱状图. 代码为: import numpy as np import pandas as pd import matplotlib.pyplot as plt # 柱子的数量 n = 12 # 生成X轴上的坐标位置 X = np.arange(n) # 生成Y轴上的值 Y = np.random.rand(n) plt.bar(X, Y) # 生成柱状图上的标注值 for x,y in zip(X, Y): # 在(x, y+0.01…
等高线图是在地理课中讲述山峰山谷时绘制的图形,在机器学习中也会被用在绘制梯度下降算法的图形中. 因为等高线的图有三个信息:x, y以及x,y所对应的高度值. 这个高度值的计算我们用一个函数来表述: # 计算x,y坐标对应的高度值 def f(x, y): return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2) 这个函数看起来挺复杂的,但我们这里只是为了能够获得一个高度值,因此其中函数代表什么意义不用关心,只要知道输入一个x,y,输出一个高度值就可以了. 要画出…
这次老鱼开始学习matplotlib了. 在上个pandas最后一篇博文中,我们已经看到了用matplotlib进行绘图的功能,这次更加系统性地学习一下关于matplotlib的功能. matlab由于其拥有强大的显示图表功能而出名: 在python中,就提供了一个类似matlab软件中的画图库matplotlib,其基本上是模仿matlab中的画图函数. 官网中介绍的显示图表的例子见:http://matplotlib.org/gallery/index.html 要使用,就必须先进行安装,安…
本文介绍一下matplotlib的最基本用法. 这次我们要显示一个线性方程的直线. 首先要引入matplotlib库,一般是用plt这个简写的,我们就按照大多数人的惯例来进行命名: import matplotlib.pyplot as plt 下面我们用numpy生成x轴上的数据:从-1到1,总共有50个点: x = np.linspace(-1, 1, 50) 再定义一个线性方程: y = 2 * x + 1 接着把x和y在坐标轴上显示出来,并连点成线: plt.plot(x, y) 最后,…
如果我们想要显示多个图像,有点类似多窗口显示图像这个概念,则就会用到plt.figure() 直接上例子: import numpy as np import pandas as pd import matplotlib.pyplot as plt # 生成x轴上的数据:从-1到1,总共有50个点 x = np.linspace(-1, 1, 50) # 定义一个线性方程 y1 = 2 * x + 1 # 定义一个二次方程 y2 = x ** 2 # 画图1 plt.figure() plt.p…
我们可以对坐标轴进行设置,设置坐标轴的范围,设置坐标轴上的文字描述等. 基本用法 例如: import numpy as np import pandas as pd import matplotlib.pyplot as plt # 生成x轴上的数据:从-1到1,总共有50个点 x = np.linspace(-1, 1, 50) # 定义一个线性方程 y1 = 2 * x + 1 # 定义一个二次方程 y2 = x ** 2 # 设置x轴的取值范围为:-1到2 plt.xlim(-1, 2)…
本次会讲解如何修改坐标轴的位置. 要修改轴,就要先得到当前轴:plt.gca(),这个函数名挺怪的,其实是如下英文字母的首字母:get current axis,也就是得到当前的坐标轴. import numpy as np import pandas as pd import matplotlib.pyplot as plt # 生成x轴上的数据:从-1到1,总共有50个点 x = np.linspace(-1, 1, 50) # 定义一个线性方程 y1 = 2 * x + 1 # 定义一个二…
本节主要讲述如何对坐标轴的刻度字体大小以及背景色进行修改. 例如: import numpy as np import pandas as pd import matplotlib.pyplot as plt # 生成x轴上的数据:从-3到3,总共有50个点 x = np.linspace(-3, 3, 50) # 定义一个线性方程 y1 = 0.1 * x plt.plot(x, y1, linewidth=1) plt.ylim(-2, 2) ax = plt.gca() # 隐藏掉右边和上…
之前我们一直在讲述线段图,这次讲述散点图. 散点图的生成很简单,只要调用plt.scatter()函数就可以. 例如: import numpy as np import pandas as pd import matplotlib.pyplot as plt # 生成100*100随机点 x = np.random.randn(100) y = np.random.randn(100) # 画散点图,并用随机颜色来显示,只是为了增加美观而已 plt.scatter(x, y, c=np.ran…
直接上代码: import numpy as np import matplotlib.pyplot as plt # 导入显示3D的库 from mpl_toolkits.mplot3d import Axes3D # 定义一个图片 fig = plt.figure() # 对此图片增加一个维度,使其成为3D图像 ax = Axes3D(fig) # 定义X,Y值 X = np.arange(-4, 4, 0.25) Y = np.arange(-4, 4, 0.25) # 把X,Y坐标网格化…
前面我们针对电影评论编写了二分类问题的解决方案. 这里对前面的这个方案进行一些改进. 分批训练 model.fit(x_train, y_train, epochs=20, batch_size=512) 这里在训练时增加了一个参数batch_size,使用 512 个样本组成的小批量,将模型训练 20 个轮次. 这个参数可以看成是在训练时不一次性在全部的训练集上进行,而是针对其中的512个题目分批次进行训练.有点类似做512道题目进行训练,然后看结果进行调整,而不是一次性做好25000道题目然…
前面我们曾有篇文章中提到过关于用tensorflow训练手写2828像素点的数字的识别,在那篇文章中我们把手写数字图像直接碾压成了一个784列的数据进行识别,但实际上,这个图像是2828长宽结构的,我们这次使用CNN卷积神经网络来进行识别. 卷积神经网络我的理解是部分模仿了人眼的功能. 我们在看一个图像时不是一个像素点一个像素点去分辨的,我们的眼睛天然地具有大局观,我们看到某个图像时自动地会把其中的细节部分给聚合起来进行识别,相反,如果我们用个放大镜看到其中的各个像素点时反而不知道这是啥东西了.…
老鱼为了跟上时代潮流,也开始入门人工智能.机器学习了,瞬时觉得自己有点高大上了:). 从机器学习的实用系列出发,我们会以numpy => pandas => scikit-learn => tensorflow => keras 的学习系列过程,这也是老鱼设定的学习步骤,有兴趣的同学可以跟着老鱼的脚步一点一点往前走,共同进步! 这是我的第一篇关于numpy的学习,我会把我学习的过程记录在这里. 言归正传,学个人工智能和机器学习,为何要学什么numpy啊? 因为numpy是Pytho…
过拟合 过拟合相当于一个人只会读书,却不知如何利用知识进行变通. 相当于他把考试题目背得滚瓜烂熟,但一旦环境稍微有些变化,就死得很惨. 从图形上看,类似下图的最右图: 从数学公式上来看,这个曲线应该是阶数太高的函数,因为一般任意的曲线都能由高阶函数来拟合,它拟合得太好了,因此丧失了泛化的能力. 用Learning curve 检视过拟合 首先加载digits数据集,其包含的是手写体的数字,从0到9: # 加载数据 digits = load_digits() X = digits.data y…
前面我们用Tensorboard显示了tensorflow的程序结构,本节主要用Tensorboard显示各个参数值的变化以及损失函数的值的变化. 这里的核心函数有: histogram 例如: tf.summary.histogram(layer_name + "/weights", Weights) 这里用tf.summary.histogram函数来显示二维数据在不同网络层的变化情况,其中第一个参数是名字,可以用/来进行分层显示,第二个参数就是相应变量的值. scalar tf.…
tensorflow自带了可视化的工具:Tensorboard.有了这个可视化工具,可以让我们在调整各项参数时有了可视化的依据. 本次我们先用Tensorboard来可视化Tensorflow的结构. 在输出tensorflow结构的关键步骤是: writer = tf.summary.FileWriter("E:/todel/data/tensorflow", sess.graph) 这个函数中把当前的tensorflow的结构图输出到指定的目录下. 而为了能够使输出的结构能够有一定…
本节主要讲述如何把pandas中的数据用图表的方式显示在屏幕上,有点类似在excel中显示图表. 安装matplotlib 为了能够显示图表,首先需要安装matplotlib库,安装方法如下: pip3 install matplotlib 显示图表 import numpy as np import pandas as pd import matplotlib.pyplot as plt # 产生1000个随机数 data = pd.Series(np.random.rand(1000)) #…
在做机器学习时需要有数据进行训练,幸好sklearn提供了很多已经标注好的数据集供我们进行训练. 本节就来看看sklearn提供了哪些可供训练的数据集. 这些数据位于datasets中,网址为:http://scikit-learn.org/stable/modules/classes.html#module-sklearn.datasets 房价数据 加载波士顿房价数据,可以用于线性回归用: sklearn.datasets.load_boston:http://scikit-learn.or…
在前面的一篇博文中关于计算房价中我们也大致提到了标准化的概念,也就是比如对于影响房价的参数中有面积和户型,面积的取值范围可以很广,它可以从0-500平米,而户型一般也就1-5. 标准化就是要把这两种参数的取值范围处于一个相对接近的地位,这样在进行梯度下降的计算中能够比较稳定地朝下落方向走,而不至于某个参数一调整步子迈得太大,而另一个参数一调整步子却又太小,有点像一个人的两条腿长短差距很大,走路就会不稳. 另外,Normalization在机器学习中也有叫归一化的,归一化相当于标准化的具体表现,因…
交叉验证(Cross validation),有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法.于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证. 一开始的子集被称为训练集.而其它的子集则被称为验证集或测试集.交叉验证是一种评估统计分析.机器学习算法对独立于训练数据的数据集的泛化能力(generalize). 我们以分类花的例子来看下: # 加载iris数据集 from sklearn.datasets import load_iris from s…
在上一个博文中,我们用learning_curve函数来确定应该拥有多少的训练集能够达到效果,就像一个人进行学习时需要做多少题目就能拥有较好的考试成绩了. 本次我们来看下如何调整学习中的参数,类似一个人是在早上7点钟开始读书好还是晚上8点钟读书好. 加载数据 数据仍然利用手写数字识别作为训练数据: from sklearn.datasets import load_digits # 加载数据 digits = load_digits() X = digits.data y = digits.ta…
这次我们把上次的结果进行可视化显示,我们会把神经网络的优化过程以图像的方式展示出来,方便我们了解神经网络是如何进行优化的. 首先,我们把测试数据显示出来: # 显示测试数据 fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.scatter(x_data, y_data) plt.ion() plt.show() 这里为了能够更加灵活地控制显示的图形,因此增加了subplot,这样方便对其中画出的线进行删除. plt.ion()开启了交互模式,…
前面我们学习了numpy,现在我们来学习一下pandas. Python Data Analysis Library 或 pandas 主要用于处理类似excel一样的数据格式,其中有表头.数据序列号以及实际的数据,而numpy就仅仅包含了实际的数据. 安装 直接输入: pip3 install pandas 最基本用法 import pandas as pd s = pd.Series([1, 2, 5, 6]) print(s) 输出: 0 1 1 2 2 5 3 6 dtype: int6…
目的 本节我们将介绍如何搭建python的开发环境以及numpy的基本属性,这样可以检验我们的numpy是否安装正确了. python开发环境的搭建 工欲善其事必先利其器,我用得比较顺手的是IntelliJ IDEA的开发环境,这次我也用IDEA的python开发环境来进行开发. 我使用IntelliJ IDEA添加python插件方式进行开发,主要原因是因为我还用它来开发JAVA,因此只要在其中下载python插件就可以. 具体安装插件方式就不细讲了,只放一张截图,大家应该看得明白. 有的同学…
概述 本节主要讲解numpy数组的加减乘除四则运算. np.array()返回的是numpy的数组,官方称为:ndarray,也就是N维数组对象(矩阵),N-dimensional array object. 这个对象的特性跟矩阵的特性也比较接近,因此我这里有时就将其混称为数组/矩阵了. 数组加法 例如: import numpy as np a = np.array([10, 20, 30, 40]) print("a:", a) b = np.arange(4) print(&qu…
本节主要用一个例子来讲述一下基本的tensorflow用法. 在这个例子中,我们首先伪造一些线性数据点,其实这些数据中本身就隐藏了一些规律,但我们假装不知道是什么规律,然后想通过神经网络来揭示这个规律. 伪造数据 import numpy as np # 创建100个随机数 x_data = np.random.rand(100).astype(np.float32) # 创建最终要模拟的线性公式 y_data = x_data * 0.1 + 0.3 创建模型 在伪造数据之后,我们当作不知道这…
选择列 根据列名来选择某列的数据 import pandas as pd import numpy as np dates = pd.date_range("2017-01-08", periods=6) data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A", "B", "C", "D"]) print(&quo…
为何要用keras? 两个字:简单. Keras让深度学习像搭建积木一样方便地来进行,使前面的tensorflow能够更加方便地使用. 虽然还有其它更多的理由,比如:Keras 支持多个后端引擎,不会将你锁定到一个生态系统中. 但是对于我来讲,最大的优点就是简单方便. 安装keras pip3 install keras 验证keras是否安装成功? 在命令行中进行操作: 这里同时就显示了后台引擎为tensorflow. 如果没有安装过tensorflow,则可以直接在命令行中输入如下命令进行安…