numpy 在機器學習中 常用函數總結

1. 矩陣的重建:

numpy.reshape(a, newshape, order='C')

矩陣重建, 將矩陣a變成新的形狀 如:

>>> a = np.arange(6).reshape((3, 2))
>>> a
array([[0, 1],
       [2, 3],
       [4, 5]])

>>> np.reshape(a, (2, 3)) # C-like index ordering
array([[0, 1, 2],
       [3, 4, 5]])

>>> np.reshape(a, (3,-1))       # the unspecified value is inferred to be 2
array([[1, 2],
       [3, 4],
       [5, 6]])

2. 矩陣相乘

numpy.matmul(a, b, out=None)

將兩個矩陣a,b相乘,即數學中的矩陣乘法

For 2-D arrays it is the matrix product:

>>> a = [[1, 0], [0, 1]]
>>> b = [[4, 1], [2, 2]]
>>> np.matmul(a, b)
array([[4, 1],
       [2, 2]])


For 2-D mixed with 1-D, the result is the usual>>

>>> a = [[1, 0], [0, 1]]
>>> b = [1, 2]
>>> np.matmul(a, b)
array([1, 2])
>>> np.matmul(b, a)
array([1, 2])

3. 生成服從正態分佈(均值爲0, 方差爲1)的數據

np.random.randn(d1,d2,d3....)

1)   當函數括號內沒有參數時,則返回一個浮點數;
2)當函數括號內有一個參數時,則返回秩爲1的數組,不能表示向量和矩陣;
3)當函數括號內有兩個及以上參數時,則返回對應維度的數組,能表示向量或矩陣;
4)np.random.standard_normal()函數與np.random.randn()類似,但是np.random.standard_normal()
的輸入參數爲元組(tuple).
5)   np.random.randn()的輸入通常爲整數,但是如果爲浮點數,則會自動直接截斷轉換爲整數。

import numpy as np
>>>np.random.randn()
>>>np.random.randn(1)
>>>np.random.randn(2)
>>>np.random.randn(3,3)
>>>np.random.randn(5,2)

4. 生成多元正態分佈矩陣:

multivariate_normal(mean, cov, size=None, check_valid=None, tol=None) 

其中mean和cov爲必要的傳參,而size和check_valid以及tol爲可選參數。

mean:多爲分佈的均值 cov:協方差矩陣,如果是需要自己生成時需要注意,協方差矩陣應該是半正定矩陣

size:指定生成的正態分佈矩陣的維度

5 . 生成均勻分佈的數據樣本

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

在指定的間隔內返回均勻間隔的數字。

start:起始值  stop:結束值  num: 需要的樣本個數

 

綜合使用: 自己生成樣本數據,然後利用邏輯迴歸進行擬合:

import numpy as np

num_ob = 100
np.random.seed(12)

#利用高斯分佈來生成樣本,樣本的個數爲100個,每一個樣本都是20維,相當於20個屬性,
#因此需要設計每個屬性的均值,這也就是爲什麼第一個參數是20維,同時也要設計屬性與屬性之間的方差,也就是協方差矩陣爲20*20
x = np.random.rand(20,20)
#這一行將cov = x的轉置×x 是保證矩陣爲半正定
cov = np.matmul(x.T, x)
#利用高斯分佈生成樣本,第一個參數爲均值,第二個爲協方差護着方差,第三個爲樣本數量
X1 = np.random.multivariate_normal(np.random.rand(20),cov, num_ob)
X2 = np.random.multivariate_normal(np.random.rand(20)+5,cov, num_ob)
#以橫向或者豎向的方式來堆疊樣本, horizontal 和vertical
X = np.vstack((X1,X2)).astype(np.float32)
y = np.hstack((np.zeros(num_ob), np.ones(num_ob)))

from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(fit_intercept=True, C = 0.1, penalty='l1',solver='liblinear')
clf.fit(X,y)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章