机器学习基础-1.概括和准备工作

一、概括

机器学习就是让机器自己挖掘出数据背后的意义。

1.机器学习分类

1)监督和非监督学习

监督学习:给机器训练的数据已经有“标签”,主要用于分类(二分类、多分类)和回归。

非监督学习:给机器的训练数据没有任何“标签”或者“答案”,可以完成降维(PCA),异常数据监测等。



半监督学习:给机器的训练数据一部分有“标签”或者“答案”,而另一部分没有,实际生产中数据很可能是这样的。

增强学习:简单来说就是输出的模型将会对所作用的环境产生影响,这个影响会反馈到模型中,进一步改进模型,阿尔法狗、无人驾驶、机器人就是采用这种方式。


2)在线学习和批量学习(离线)

批量学习(batch learning):简单,但是无法适应环境变化,解决办法就是定期进行批量学习,但是由于数据量巨大,在某些环境变化快的情况下,无法使用。


在线学习(online learning):能够及时反映数据的变化,但是需要对异常数据进行检测,否则对于恶意的数据输入,会产生错误的模型,导致模型无法使用。


3)参数学习和非参数学习

参数学习:会先对模型进行一定的假设,比如下面图示可以假设模型是y=wx+b,一旦学到了参数,原来的数据集就不要了


非参数学习:不对模型进行过多的假设,不代表没有参数

2.将会学习的内容

目的:通过图示12章节对机器学习进行入门,为数据挖掘打下最基本的基础。这里涉及到的高数和线性代数的知识,将会通过算法一起学习和巩固。

方法:每个章节的内容将会介绍算法的由来,数学推导,应用场景,评价算法的优缺点,参数调整等几个重要内容。


二、环境准备

所有讲解采用Python3。

通过https://www.anaconda.com/download/下载Anaconda3-5.1.0-Windows-x86_64.exe,安装后界面如下。


打开jupyter,点击launch。这里需要注意,浏览器的话最好使用谷歌浏览器,否则很可能打不开。打开后的界面如下。


选择一个路径,进入后,创建Python3文件。如下图所示。



三、jupyter和numpy基础命令学习

1.jupyter快捷键


首先点击当前行的前面部分,出现蓝色条,再执行快捷键。

a:在当前行上面添加一行

b:在当前行下面添加一行

x:删除当前行

m:将当前行变成markdown模型

Ctrl+回车:运行当前行命令,并且不在下面插入新的行

Alt+回车:运行当前行命令,并且在下面插入新的行

jupyter的特点之一:当前行运行之后,相应的结果会放进内存中,所以即使在当前命令行的上方再插入一个新的命令行,该命令行的代码可以调用下方命令行的数据,如图所示。但是这影响阅读,尽量避免。【注:运行kernel菜单中的restart and runall可以清空内存,重新从上到下运行代码】


2.jupyter魔法命令

输入%lsmagic列出所有魔法命令,直接%+命令,可以查看命令的使用方式。

1)%run

可以调用自己所写的Python文件。如图所示,myscript是和当前正在编写的代码文件同级的文件夹,在myscript文件夹下有个hello.py文件。通过这条命令,将自己编写的模块加载进来,可以方便调用自己写的函数。


2)导入模块

在文件夹下添加一个文件__init__.py(内容为空即可),可以将当前文件夹变成一个模块。这个时候不需要上面的%run命令。

例如:为了将metrics.py导进来,使用import即可。


3)%timeit测试代码运行时间


可以看到,对于运行时间比较短的代码,timeit会运行多次,并取平均值来测量。

%timeit只能测试1条代码,%%timeit可以测试一个代码块。如果就想测试1次,使用%time命令。

3.numpy命令

numpy.__version__:查看numpy版本

narray.dtype:查看类型narray数据类型

zeros():创建为0的数组。可以在括号中指定元素的类型,默认为float。


也可以创建0元素的矩阵,同样可以再指定元素的类型。


ones():创建为1的矩阵,使用方法和zeros()一样。如果想传入其他值,则使用full()


arange:创建一个范围的数组,可指定步长,特点是包含头不包含尾。


linspace:创建一组数,按照指定的份数,形成一个等差数列,例如形成20个1-10之间的数。注意:包含终止点。


random:产生随机数,例如产生0-100区间10个随机数。注意:前闭后开。


也可以形成一个矩阵。


为了测试算法,即使是随机数,也最好保持一致,这里可以先传入seed,之后产生的伪随机数将会相同。


random也可以用于生成0-1之间的浮点数,例如产生10个0-1之间浮点数。当然size=(3,5)可以产生矩阵形式的0-1随机数。这个是均匀分布的。


有时候需要生成生成正态分布形式的浮点数。如下。默认均值为0,方差为1。


当然也可以指定均值和方差,例如产生均值为10,方差为100的矩阵。


可以使用help(命令),打开具体的方法使用文档。对于繁多的框架,必须通过这个命令来进行自学。


ndim:查看矩阵维度。


4.数据访问

索引方式:

切片方式:通过“:”指定行和列的范围。一般“:”左右会加数字,如果左边不加就代表从头开始,右边不加代表直到结尾。

另外还有[::2]这样的形式,数字2代表步长,表示在选取的范围内按照一定的步长进行截取。如果步长为-1,则代表倒序输出。


【注:如果修改了切片后得到的矩阵数据,原来的矩阵也会被修改,这是因为numpy操作内存中同一个数据的原因,为了避免原矩阵被修改,可以使用.copy()来复制】

5.reshape

可通过reshape改变矩阵的结构,括号中指定行列的数目。


如果指定了其中一个维度,而另一个维度可以通过-1直接指定。

6.合并和分割操作

concatenate:将两个矩阵进行合并。

对于二维的矩阵:这个应用于将新的样本放入到原来的样本中。默认axis=0,代表沿着行方向进行整合。这种方法和vstack作用相似,只是用vstack更加便捷。



axis=1,代表沿着列进行整合。这种方法和hstack相同,hstack更加便捷。



split:完成数据的分割。[ ]内部代表分割点。


对于二维矩阵:默认为行方向切分,如果要按照列方向切分,指定axis=1即可。


同理也有如下简单的方式:vsplit和hsplit


一个比较重要的方法:tile(),其中(2,1)代表行方向重复2次,列方向重复1次。


7.矩阵运算

A.dot(B)这是矩阵和矩阵的乘法运算,其他方式就是对应的元素进行加减乘除。

A.T得到A的转置

A的求逆运算:np.linalg.inv(A)


A的伪逆矩阵:np.linalg.pinv(A)


8.聚合运算

sum:求得所有元素的和,max、min,mean(均值),median(中位数),std(标准差)等方法不进行介绍,和sum操作思路一样。


sum也可以指定按照行还是列进行求和。


这里另外介绍几个命令:prod。例如:prod(a+1),代表对所有元素加1。

np.percentile(a,q=100),代表求a矩阵中,百分之多少的数小于某个数。这里例子中q代表百分数,得出的结果其实就是最大值,当q=50就代表中位数,这很好理解。



9.索引

通过arg得到相应值的具体位置。

np.argsort(a):得到的结果为a从小到大的索引值。


np.partition(a,3),表示以3为界线,3前面的都是小于3,3后面的都是大于3。


10.fancy indexing

简单的说就是传入索引值,矩阵可以根据索引值找到对应的值,并形成新的矩阵。



11.比较


同理也有np.all,即判断是否所有元素都满足括号中的条件,是的话返回true,否则返回false。


四、可视化处理

1.matplotlib.pyplot

可以在一个画布上,绘制出多个线条。可以指定颜色和线条的样式。


2.调整坐标范围

不指定xy的范围,numpy会自动调整,可以通过xlim和ylim指定。

快捷方式:plt.axis([-5,5,-0.5,0.5]),同时指定xy的范围。

3.添加标题和标签

4.散点图

plot改成scatter就可以。添加alpha参数可以指定透明度。


五、加载数据

sklearn中比较著名的有iris鸢尾花、boston房价、digits手写识别几个数据集。

1.sklearn


2.查询信息


3.绘制图像

这里只选取其中两个特点。


添加一点样式:


六、约定



猜你喜欢

转载自blog.csdn.net/qq_25560849/article/details/80215336
今日推荐