matplotlib學習——繪制散點圖+flatten函數用法


在最近學習《機器學習實戰時》,在使用matplotlib時,往往是這樣:import matplotlib.pyplot as plt

接下來fig=plt.figure() 繪制圖表

fig.add_subplot(111)是什么意思呢?

函數是在大的畫布中繪制小畫布,111表明:將畫布分成1行1列,獲取從上到下,從左到右第1塊小畫布。

同理add_subplot(2,3,5)的意思不難理解。如果將畫布分成3行4列要在第10塊畫布作畫怎么寫呢?add_subplot(3,4,10)即可。


繪圖實例:代碼來自《機器學習實戰》

import matplotlib.pyplot as plt
    dataMat,labelMat=loadDataSet()
    dataArr=array(dataMat)
    n=shape(dataArr)[0]
    x1cord1=[];x2cord1=[]#實際分類為1的樣例,其特征對應值存放處
    x1cord2=[];x2cord2=[]
    for i in range(n):
        if int(labelMat[i])==1:
            x1cord1.append(dataArr[i,1]);x2cord1.append(dataArr[i,2])
        else:
            x1cord2.append(dataArr[i,1]);x2cord2.append(dataArr[i,2])
    fig=plt.figure()
    ax=fig.add_subplot(111)
    ax.scatter(x1cord1,x2cord1,s=30,c='red',marker='s')#scatter用於繪制散點
    ax.scatter(x1cord2,x2cord2,s=30,c='green')#至此繪制出了分別屬於兩類的點
    x1=arange(-3.0,3.0,0.1)#arange與range函數類似,不過range函數產生的是list,而arange產生的是array。表明產生-0.3到0.3之間的數,步長為0.1
    weightsT=array(weights)
    x2=(-weightsT[0]-weightsT[1]*x1)/weightsT[2]#weights是matrix,進行計算后得到的x2也是matrix,而x1是array,所以需要統一.|x1|==|x2|
    ax.plot(x1,x2)#調用plot函數繪制得到由點生成的線條
    plt.xlabel('X1');plt.ylabel('X2');#為橫縱坐標命名
    plt.show()

代碼中xcord的類型可以是列表,也可以是array。好像是這樣,array,list還有matrix的用法需要討論。

為什么:x2=(-weightsT[0]-weightsT[1]*x1)/weightsT[2]。

因為z=w0+w1*x1+w2*x2(在本例中),將z代入sigmoid函數中求值進而分類,觀察sigmoid函數看到自變量為0前后是圖像跳躍的點,如下如sigmoid函數圖:

所以z==0為分隔點,令z=0,得到x1與x2之間的關系。運行代碼:

得到如下圖:

 

添加flatten函數的用法:

部分內容來自http://blog.csdn.net/maoersong/article/details/23823925

flatten函數可以用在array與matrix上,但是不可用在list上:

1:用在array:

    >>> a = [[1,3],[2,4],[3,5]]  
    >>> a = array(a)  
    >>> a.flatten()  
    array([1, 3, 2, 4, 3, 5])  

2、用在列表:直接使用報錯

>>> a = [[1,3],[2,4],[3,5]]  
>>> a.flatten()  
  
Traceback (most recent call last):  
  File "<pyshell#10>", line 1, in <module>  
    a.flatten()  
AttributeError: 'list' object has no attribute 'flatten'

如下為正確用法:

    >>> a = [[1,3],[2,4],[3,5],["abc","def"]]  
    >>> a1 = [y for x in a for y in x]  
    >>> a1  
    [1, 3, 2, 4, 3, 5, 'abc', 'def']  

3、用在矩陣:

    >>> a = [[1,3],[2,4],[3,5]]  
    >>> a = mat(a)  
    >>> y = a.flatten()  
    >>> y  
    matrix([[1, 3, 2, 4, 3, 5]])  
    >>> y = a.flatten().A  
    >>> y  
    array([[1, 3, 2, 4, 3, 5]])  
    >>> shape(y)  
    (1, 6)  
    >>> shape(y[0])  
    (6,)  
    >>> y = a.flatten().A[0]  
    >>> y  
    array([1, 3, 2, 4, 3, 5])  

在繪制圖像,需要部分數據時,可以首先獲取需要的矩陣中的一列數,然后通過調用flatten函數轉成單行矩陣,再調用.A,獲取二維array形式,獲取下標為0的元素。此時得到單維array形式,可以在ax.scatter中作為參數,繪制圖形。

得到圖形如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM