您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么使用Python線性回歸方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么使用Python線性回歸方法”吧!
來說說約定的符號,線性回歸參數主要由斜率和截距組成,這里用W表示斜率,b表示截距。大寫的W表示這是一個向量。一般來說是n_feauter_num數量,就是有多少個特征,W的shape就是(n_feauter_num,1),截距b是一個常數,通過公式Y=W*X+b計算出目標Y值,一般來說,在機器學習中約定原始值為Y,預測值為Y_hat。下面來談談具體實現步驟
構造數據
構造loss function(coss function)
分別對W和b計算梯度(也是對cost function分別對W和b求導)
計算Y_hat
多次迭代計算梯度,直接收斂或者迭代結束
下面給出具體python代碼實現,本代碼是通用代碼,可以任意擴展W,代碼中計算loss和梯度的地方采用的向量實現,因此增加W的維度不用修改代碼
import matplotlib.pyplot as pltimport numpy as npdef f(X): w = np.array([1, 3, 2]) b = 10 return np.dot(X, w.T) + bdef cost(X, Y, w, b): m = X.shape[0] Z = np.dot(X, w) + b Y_hat = Z.reshape(m, 1) cost = np.sum(np.square(Y_hat - Y)) / (2 * m) return costdef gradient_descent(X, Y, W, b, learning_rate): m = X.shape[0] W = W - learning_rate * (1 / m) * X.T.dot((np.dot(X, W) + b - Y)) b = b - learning_rate * (1 / m) * np.sum(np.dot(X, W) + b - Y) return W, bdef main(): # sample number m = 5 # feature number n = 3 total = m * n # construct data X = np.random.rand(total).reshape(m, n) Y = f(X).reshape(m, 1)# iris = datasets.load_iris()# X, Y = iris.data, iris.target.reshape(150, 1)# X = X[Y[:, 0] < 2]# Y = Y[Y[:, 0] < 2]# m = X.shape[0]# n = X.shape[1] # define parameter W = np.ones((n, 1), dtype=float).reshape(n, 1) b = 0.0 # def forward pass++ learning_rate = 0.1 iter_num = 10000 i = 0 J = [] while i < iter_num: i = i + 1 W, b = gradient_descent(X, Y, W, b, learning_rate) j = cost(X, Y, W, b) J.append(j) print(W, b) print(j) plt.plot(J) plt.show()if __name__ == '__main__': main()
可以看到,結果輸出很接近預設參數[1,3,2]和10
是不是感覺so easy.
step: 4998 loss: 3.46349593719e-07[[ 1.00286704] [ 3.00463459] [ 2.00173473]] 9.99528287088step: 4999 loss: 3.45443124835e-07[[ 1.00286329] [ 3.00462853] [ 2.00173246]] 9.99528904819step: 5000 loss: 3.44539028368e-07
感謝各位的閱讀,以上就是“怎么使用Python線性回歸方法”的內容了,經過本文的學習后,相信大家對怎么使用Python線性回歸方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。