AI Blue

来自CloudWiki
跳转至: 导航搜索

第一章 什么是机械学习

第二章 python机械学习

2.1 开发环境搭建

安装开发环境Anaconda下载地址: [1]


2.2 IPython简介

IPython是公认的现代科学计算中最重要的Python 工具之一。它是一个加强版的Python交互式命令行工具,与系统自带的Python交互环境相比,IPython 具有以下明显的几个特点:

1、与Shell紧密关联,可以在 IPython 环境下直接执行Shell指令;

2、可以直接绘图操作的 Web GUI环境,在机器学习领域、探索数据模式、可视化数据、绘制学习曲线时,这一功能特别有用;

3、更强大的交互功能,包括内省、Tab键自动完成、魔术命令等。

2.2.1 IPython 基础

与Python相比,IPython的输出排版更加简介。

可以试着一下代码:

In[1]: a=5
In[2]:a+3
In[3]:import numpy as np
In[4]:data ={i: np.random.randn() for i in range(8)}
In[5]:data

Tab键是IPython提高效率的秘籍,如下:

np.random./按下Tab
  • 快捷键:
 
  Ctrl+A: 移动光标到本行的开头;
  Ctrl+E:  移动光标到本行的结尾;  的代不Ctrl+U:删除光标所在位置之前的所有字符;
  Ctrl+K: 删除光标所在位置之后的所有字符,包含当前光标所在的字符;
  Ctrl+L: 清除当前屏幕上显示的内容;
  Ctrl+P:以当前输入的字符作为命令的起始字符,在历史记录里向后搜索匹配的命令;.Ctrl+N:以当前输入的字符作为命令的起始字符,在历史记录里向前搜索匹配的命令;
  Ctrl+C:中断当前脚本的执行。


在IPython中可以直接在类或变量后加上一个问号“?”来查阅文档。

In[6]:np.random.randn?

在类或变量或函数后面加两个问号“??”还可以直接查看源代码。结合星号“*”和问号“?”,还可以查询命名空间里的所有函数和对象。

  • 建立一个文件:hello.py
In[7]:msg='hello ipython'
In[8]:print(msg)
 
  • 访问这个文件:

In[9]:% run hello.py

  • 快速评估代码的执行效率用%timeit,例;
In[10]:a np.random.randn(100,100)
In[11]:%timeit np.dot(a,a)

  • 常用的魔术命令:
%who或%whos:命令来查看当前环境下的变量列表;
%quickref:   显示IPython的快速参考文档;
%magic:      显示所有的魔术命令及其详细文档;
%reset:      删除当前环境下的所有变量和导入的模块;
%logstart:   开始记录IPython 里的所有输入的命令,默认保存在当前工作目录ipython_log.py中;
%logstop:    停止记录,并关闭log文件。

*在魔术命令后面加上问号“?”可以直接显示魔术命令的文档。

2.2.1 IPython 图形界面

特点

  • 方便编写多行代码
  • 可以直接把数据可视化

(看不懂)

2.3 Numpy简介

Numpy是Python科学计算的基础库,主要提供了高性能的N维数组实现以及计算能力,还提供了和其他语言如 C/C++ 集成的能力,此外还实现了一些基础的数学算法, 如约性代数相关、傅里叶变换及随机数生成等。

2.3.1 Numpy数组

  • 创建数组
In [1]:import numpy as np
In [2]:a= np.array([1,2,3,4])
In [3]:a
In [4]:b=np.array([1,2],[3,4],[5,6])
In [5]:b

  • 查看array属性、数据的维度和类型。
In [6]:b.ndim
In (7]:b.shape
In [8]:b.dtype     #查看数组里元素的数据类型


  • 用Numpy函数来创建数组。
In [9]:c=np.arange(10)     #创建连续数组
In [9]:c 
In [10]:d= np.linspace(0,2,11)     #[O,2]分成11等分后的数组
In [11]:d
In [12]:np.ones((3, 3))   #注意参数两边的括号,参数是个元组
In [13]:np.zeros((3, 6))
In [14]:np.eye(4)
In [15]:np.random.randn(6,4)  #创建6X 4的随机数组


  • 索引访问数组(与python类似)
  
In [16]: a =np.arange(lO
In [17]: a
Out[17]: array([0,l,2,3 4, 5, 6, 7, 8, 9])

In [18]:a[0], a[3], a[-l]
Out[18]:(O,3,9)

In [19]:a[:4]
Out[19]: array[0,1, 2,3])

In [20]:a[3:7]
Out[20]:array([3, 4,5, 6])

In [21]:a[6:]
Out[21]: array([6, 7, 8, 9])

In [22]: a[2:8:2]
Out[22]: array([2, 4, 6])

In [23]: a[2::2]
Out[23]: array([2, 4, 6, 8])

In [24]: a[::3]
Out[24]: array([O, 3,  6, 9])


  • 也可以用布尔数组实现索引
  • Numpy数组是共享内存,可以使用 np.may_share_memory()函数判断两个数组是否共享内存。

2.3.2 Numpy运算

  • 数组和标量计算
In [2]:aenp.arange(6)
In [3]:a
Out[3]:array([O,1,2,3,4,5])
In [4]:a + 5                        #运算都行
Out[4]:array([5,6,7,8,9,10])

2.4 Pandas简介

2.4.1基本数据结构

Pandas最基本的数据结构是Series,用它来表示一行数据,可以理解为一维的数组。 比如:

s= pd.Series([4,2,5,0,6,3])

另外一个关键的数据结构为DateFrame。它表示的是二维数组.

   比如:
df = pd.DateFrame(np.random.randn(6,4), columns=list(‘’ABCD’))

Pandas提供了简洁的数据访问功能。DataFrame. shape可以查看数据的维度信息:

通过DataFrame.head()和DataFrame.tail()方法可以访问前n行和后n行的数据:
 

通过DataFrame.index和DataFrame.columns属性,可以访问数据的行索引和列索引信息。

 通过DataFrame describe()方法,可以算出简单的数据统计信息。

2.4.2数据排序

通过DataFrame.sort_index函数可以方便地对索引进行排序。比如,我们根据列名张 进行逆序排列:

 [IN]: df.sot index(axis=1, ascending=False)
[OUT]:
     D         C        B        A
0  -0.456468  -0.284952  1.501239  0.968762
1  1.536548  0.407559  -0.309746  1.413471
2  -0. 318217  1.339359  -0.040439  -0.399065
3  -1.493958  0.841658  -0.121888  -0.152205
4  -0.455541  1.326487  -0.676985  0.248414
5  -0.024769   -0.201354  -2.158694  0.906221

也可以通过DataFrame. sort values()对数值进行排序。比如,我们根据B这一列的数 据从小到大进行排序:

 [IN]: df.sort values (by='B')
[OUT]:
    A       B        C         D
5  0.906221 -2.158694 -0.201354 -0.024769
4  0.248414 -0.676985 1.326487 -0.455541
1  1.413471 -0.3097460.407559  1.536548
3 -0.152205 -0.121888 0.841658 -1.493958
2 -0.399065 -0.040439 1.339359 -0.318217
0 0.968762 1.501239 -0.284952 -0.456468

2.4.3:数据访问

Pandas可以方便地对数据进行选择和访问。我们可以通过行索引范围来访问特定几行的数据,这个和Numpy类似。

[IN]: df[(3:5]
[OUT]:
3 -0.152205 -0.121888  0.841658  -1.493958

4  0.248414 -0.676985  1.326487  -0.455541

使用DataFrame.loc ()函数通过标签来选择某个元素,或使用DataFrame.iloc()函数通过数组索引来访问某个无素.

 [IN]: df.iloc[2:5, 0:2]
 [OUT]:
  A      B
2-0.399065 -0.040439
3 -0.152205 -0.121888
4 0.248414 -0. 676985

2.4.4时间序列

Pandas提供了强大的时间序列处理功能,我们可以创建以以时间序列为索引的数据集, 比如:以2000年1月1日作为起始日期,创建366条记录数据:

  [IN]:
   n_items=366
   ts=pd.Series(np.random.randn(n_items),
    index=pd.date_range(‘20000101’,periods=n_items))
   print(ts.shape)
   ts.head(5)

2.4.5数据可视化

我们还可以对数据进行可视化。

Plt.figure(figsize=(10,6),dpi=144)
Cs=ts.cumsum()
Cs.plot()

2.4.6文件读写

我们还可以使用DataFrame.to_csv()函数把数据保存到文件中。

[IN]:
df=pd.read_csv(‘data.csv’,index_col=0)
print(df.shape)
df.head(5)

2.5 Matplotlib简介

Matplotlib是python数据可视化工具包。如果要在ipython控制台使用Matplotlib。可以使用ipython--matplotlib命令来启动ipython控制程序; 如果要在ipython notebook里使用Matplotlib,则在notebook的开始位置插入%matplotlib inline魔术命令即可。 ipython的Matplotlib模式又两个优点:

  • 一是提供的非阻塞的画图操作
  • 二是不需要显示调用show()方法来显示画出来的图片。

2.5.1 图形样式

   通常使用ipython notebook 的 Matplotlib模式来画图,这样画出来的图片会直接显示在网页上。要记得在notebook的最上面写上魔术命令%matplotlib inline。
  • 使用Matplotlib的默认样式在一个坐标轴上画出正弦和余弦曲线:
         matplotlib inline
         from matplotlib import pyplot as plt
         import numpy as np
         x = np.linspace (-np.pi,np.pi,200)
         C,S = np.cos(x), np.sin(x)
         plt.plot (x,C)
         plt.plot(x,S)
         plt.show()

2.5.2 图形对象

   在Matplotlib里,一个图形(figure)是指图片的全是不可是区域,可以使用plt.figure()来创建。在一个图形里,可以包含多个子图,可以使用plt.subplot()来创建子图。子图按照网格形状排列显示在图形里,可以在每个子图上单独作画。坐标轴和子图类似,唯一不同的是,坐标轴可以在图形上任意拜访,而不需要按照网格排列,这样显示起来更灵活,可以使用plt.axes()来创建坐标轴。
  • plt.figure()函数有以下几个常用的参数。
  • num:图形对象的标识符,可以是数字或字符串当num所指定的图形存在时,直接返回这个图形的引用,如果不存在,则创建个以这 个oum为标识符的新图形。最后把当前作画的图形切换到这个图形上。
  • figsize: 以英寸为单位的图形大小(width,heigh),是一个元组。
  • dpi:指定图形的质量, 每英小多少个点。

下面的代码创建了两个图形,一个是“sin”,并且把正弦曲线画在这个图形上。然后创 建了另外一个名称是“cos”的图形。并把余弦曲线面在这个图形上。接有切换到之前创建的“Sin”图形上,把余弦图片也画在这个图形上。

         %matplotlib inline
         from matplotlib import pyplot as plt
         import numpy as np
         x = np.linspace(-np.pi, np.pi,200,endpoint=True)
         C,S = np.cos(X),np.sin(X)
         plt.figure (num=“sin”, figsize=(16, 4))
         plt.plot(X, S)
         pit.figure num='cos', figsize=(16, 4))
         plt.plot(x,C)
         plt.figure (num=“sin”)
         plt.plot(x, C) 
         print plt.figure(num=“sin”).number
         print pit.figure(nun=“cos”).mumber

2.5.3 画图操作

2.6 scikit-laearn简介