1. 程式人生 > >機器學習繪圖(numpy和matplotlib庫)

機器學習繪圖(numpy和matplotlib庫)

yuanwen: http://blog.csdn.net/crossky_jing/article/details/49466127

scikit-learn 練習題 
題目:Try classifying classes 1 and 2 from the iris dataset with SVMs, with the 2 first features. Leave out 10% of each class and test prediction performance on these observations.(連結:http://scikit-learn.org/stable/tutorial/statistical_inference/supervised_learning.html

) 
官方提供的答案如文末程式碼段 
通過這段原始碼,我們主要可以學習到如下幾個常用函式的使用:

numpy 庫

import numpy as np

1、random

用法:產生偽隨機數 
樣例: 
np.random.seed(0) //產生以0為種子的偽隨機數生成器 
order_arr = np.random.permutation(100) //返回100個偽隨機數,返回值是一個array

2、mgrid

用法:返回多維結構,常見的如2D圖形,3D圖形。對比np.meshgrid,在處理大資料時速度更快,且能處理多維(np.meshgrid只能處理2維) 
ret = np.mgrid[ 第1維,第2維 ,第3維 , …] 
返回多值,以多個矩陣的形式返回,第1返回值為第1維資料在最終結構中的分佈,第2返回值為第2維資料在最終結構中的分佈,以此類推。(分佈以矩陣形式呈現) 
例如np.mgrid[X , Y] 
樣本(i,j)的座標為 (X[i,j] ,Y[i,j]),X代表第1維,Y代表第2維,在此例中分別為橫縱座標。

例如1D結構(array),如下:

>>> pp = np.mgrid[-5:5:5j]
>>> pp
array([-5. , -2.5,  0. ,  2.5,  5. ])
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

例如2D結構 (2D矩陣),如下:

>>> pp = np.mgrid[-1:1:2j,-2:2:3j]
>>> x , y = pp
>>> x
array([[-1., -1., -1.],
       [ 1.,  1.,  1.]])
>>> y 
array([[-2.
, 0., 2.], [-2., 0., 2.]])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

例如3D結構 (3D立方體),如下:

>>> pp = np.mgrid[-1:1:2j,-2:2:3j,-3:3:5j]
>>> print pp
[[[[-1.  -1.  -1.  -1.  -1. ]
   [-1.  -1.  -1.  -1.  -1. ]
   [-1.  -1.  -1.  -1.  -1. ]]

  [[ 1.   1.   1.   1.   1. ]
   [ 1.   1.   1.   1.   1. ]
   [ 1.   1.   1.   1.   1. ]]]


 [[[-2.  -2.  -2.  -2.  -2. ]
   [ 0.   0.   0.   0.   0. ]
   [ 2.   2.   2.   2.   2. ]]

  [[-2.  -2.  -2.  -2.  -2. ]
   [ 0.   0.   0.   0.   0. ]
   [ 2.   2.   2.   2.   2. ]]]


 [[[-3.  -1.5  0.   1.5  3. ]
   [-3.  -1.5  0.   1.5  3. ]
   [-3.  -1.5  0.   1.5  3. ]]

  [[-3.  -1.5  0.   1.5  3. ]
   [-3.  -1.5  0.   1.5  3. ]
   [-3.  -1.5  0.   1.5  3. ]]]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

3、np.r_ , np.c_

用法:concatenation function 
np.r_按row來組合array, 
np.c_按colunm來組合array

>>> a = np.array([1,2,3])
>>> b = np.array([5,2,5])
>>> //測試 np.r_
>>> np.r_[a,b]
array([1, 2, 3, 5, 2, 5])
>>> 
>>> //測試 np.c_
>>> np.c_[a,b]
array([[1, 5],
       [2, 2],
       [3, 5]])
>>> np.c_[a,[0,0,0],b]
array([[1, 0, 5],
       [2, 0, 2],
       [3, 0, 5]])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

matplotlib.pyplot 庫

import matplotlib.pyplot as plt

1、scatter

用來畫散點圖的,對樣本點著色。如下:X為一個n*2的矩陣,代表n個2維樣本點,且每個樣本點對應一個label y,用y來對顏色變數c賦值來區分顏色,按照cmap來佈局。 
plt.scatter(X[:, 0], X[:, 1], c=y, zorder=10, cmap=plt.cm.Paired)

2、axis

用法:設定佈局策略 
例如: plt.axis(‘tight’) ,表明採用緊緻方案,需要將樣本的邊緣作為畫布的邊緣。

3、pcolormesh

用法:類似np.pcolor ,是對座標點著色。 
np.pcolormesh(X, Y, C, **kwargs) 
例如有樣本點(X[i,j] , Y[i,j]),對樣本週圍(包括樣本所在座標)的四個座標點進行著色,C代表著色方案,kwargs裡可以設定著色配置。

(X[i,   j],   Y[i,   j]),
(X[i,   j+1], Y[i,   j+1]),
(X[i+1, j],   Y[i+1, j]),
(X[i+1, j+1], Y[i+1, j+1]).
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

樣例:plt.pcolormesh(XX, YY, Z>0, cmap=plt.cm.Paired)

4、contour

用法:畫輪廓 
樣例:plt.contour(XX, YY, Z, colors=[‘k’, ‘k’, ‘k’], linestyles=[‘–’, ‘-‘, ‘–’],levels=[-.5, 0, .5])

svm 庫

from sklearn import svm

1、decision_function

用法:Distance of the samples X to the separating hyperplane. 即樣本點到超平面的距離。 
樣例:

x_min = X[:, 0].min()
x_max = X[:, 0].max()
y_min = X[:, 1].min()
y_max = X[:, 1].max()

XX, YY = np.mgrid[x_min:x_max:200j, y_min:y_max:200j]  //分別得到樣本第1維和第2維的分佈: 
Z = clf.decision_function(np.c_[XX.ravel(), YY.ravel()]) //用np.c_()將XX,YY拉平後的兩個array按照列合併(此時是n*2的舉證,有n個樣本點,每個樣本點有橫縱2維),然後呼叫分類器集合的decision_function函式獲得樣本到超平面的距離。Z是一個n*1的矩陣(列向量),記錄了n個樣本距離超平面的距離。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

附錄(完整程式碼):