Exercise10.1 Least squares
分析:
使用numpy.linalg.lstsq來計算。
相關說明:
- numpy.random.randint
low、high、size三個參數。默認high是None,如果只有low,那範圍就是[0,low)。如果有high,範圍就是[low,high)。
np.random.randint(2, size=10)
array([1, 0, 0, 0, 1, 1, 0, 0, 1, 0])
np.random.randint(1, size=10)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])np.random.randint(5, size=(2, 4))
array([[4, 0, 2, 1],
[3, 2, 2, 0]])
- numpy.linalg.lstsq做線性迴歸
A = np.vstack([x, np.ones(len(x))]) np.ones(len(x))用以放置常數項
代碼:
#10.1
A = np.random.randint(10,size = (8,6))
b = np.random.randint(10,size = 8)
ls = np.linalg.lstsq(A, b, rcond=0)
print(ls[0]) #solution
print(ls[1]) #residual
結果:
Exercise 10.2: Optimization
分析:
使用optimize.fmin獲取相反函數的最小值,即爲所求函數的最大值。
相關說明:
- optimize.fmin需要提供一個估計的x值(對應y的最小值),可以先作出函數圖像來確定。這裏根據圖像定爲0。
第二個參數x0 initial guess
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin.html#scipy-optimize-fmin - np.exp(-x*x)
代碼:
#10.2
def f(x):
return -(np.sin(x-2)**2)*np.exp(-x*x) #use'-'to find the max
m = optimize.fmin(f,0)
print(m)
結果:
Exercise 10.3: Pairwise distances
分析:
使用scipy的距離計算庫scipy.spatial.distance的pdist方法。
相關說明:
https://blog.csdn.net/pipisorry/article/details/48814183
有很詳細的關於該庫的相應方法說明。
摘錄:Y = pdist(X, ’euclidean’) #d=sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)
函數也可以用自己寫的,如歐式距離計算可以這樣:
dm = pdist(X, lambda u, v: np.sqrt(((u-v)**2).sum()))
代碼:
X = np.random.randint(10,size = (8,10))
distance = dis.pdist(X,'euclidean')
print(distance)
結果:
完整代碼:
import numpy as np
from scipy import optimize
import scipy.spatial.distance as dis
#10.1
A = np.random.randint(10,size = (8,6))
b = np.random.randint(10,size = 8)
ls = np.linalg.lstsq(A, b, rcond=0)
print(ls[0]) #solution
print(ls[1]) #residual
#10.2
def f(x):
return -(np.sin(x-2)**2)*np.exp(-x*x) #use'-'to find the max
m = optimize.fmin(f,0)
print(m)
#10.3
X = np.random.randint(10,size = (8,10))
distance = dis.pdist(X,'euclidean')
print(distance)