[云炬python3玩转机器学习] 6-4 在线性回归模型中使用梯度下降法
生活随笔
收集整理的這篇文章主要介紹了
[云炬python3玩转机器学习] 6-4 在线性回归模型中使用梯度下降法
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在線性回歸模型中使用梯度下降法
In?[1]:
import numpy as np import matplotlib.pyplot as plt import datetime;print ('Run by CYJ,',datetime.datetime.now()) Run by CYJ, 2022-01-26 12:10:39.645986In?[2]:
np.random.seed(666) x = 2 * np.random.random(size=100) y = x * 3. + 4. + np.random.normal(size=100)In?[3]:
X = x.reshape(-1, 1)In?[4]:
X[:20]Out[4]:
array([[1.40087424],[1.68837329],[1.35302867],[1.45571611],[1.90291591],[0.02540639],[0.8271754 ],[0.09762559],[0.19985712],[1.01613261],[0.40049508],[1.48830834],[0.38578401],[1.4016895 ],[0.58645621],[1.54895891],[0.01021768],[0.22571531],[0.22190734],[0.49533646]])In?[5]:
y[:20]Out[5]:
array([8.91412688, 8.89446981, 8.85921604, 9.04490343, 8.75831915,4.01914255, 6.84103696, 4.81582242, 3.68561238, 6.46344854,4.61756153, 8.45774339, 3.21438541, 7.98486624, 4.18885101,8.46060979, 4.29706975, 4.06803046, 3.58490782, 7.0558176 ])In?[6]:
plt.scatter(x, y) plt.show()使用梯度下降法訓(xùn)練
In?[7]:
def J(theta, X_b, y):try:return np.sum((y - X_b.dot(theta))**2) / len(X_b)except:return float('inf')In?[8]:
def dJ(theta, X_b, y):res = np.empty(len(theta))res[0] = np.sum(X_b.dot(theta) - y)for i in range(1, len(theta)):res[i] = (X_b.dot(theta) - y).dot(X_b[:,i])return res * 2 / len(X_b)In?[9]:
def gradient_descent(X_b, y, initial_theta, eta, n_iters = 1e4, epsilon=1e-8):theta = initial_thetacur_iter = 0while cur_iter < n_iters:gradient = dJ(theta, X_b, y)last_theta = thetatheta = theta - eta * gradientif(abs(J(theta, X_b, y) - J(last_theta, X_b, y)) < epsilon):breakcur_iter += 1return thetaIn?[10]:
X_b = np.hstack([np.ones((len(x), 1)), x.reshape(-1,1)]) initial_theta = np.zeros(X_b.shape[1]) eta = 0.01theta = gradient_descent(X_b, y, initial_theta, eta)In?[11]:
thetaOut[11]:
array([4.02145786, 3.00706277])封裝我們的線性回歸算法
In?[12]:
from playML.LinearRegression import LinearRegressionlin_reg = LinearRegression() lin_reg.fit_gd(X, y)Out[12]:
LinearRegression()In?[13]:
lin_reg.coef_Out[13]:
array([3.00706277])In?[14]:
lin_reg.intercept_Out[14]:
4.021457858204859In?[?]:
?
總結(jié)
以上是生活随笔為你收集整理的[云炬python3玩转机器学习] 6-4 在线性回归模型中使用梯度下降法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [云炬python3玩转机器学习]6-3
- 下一篇: java system sleep_详解