【機器學習】LR(線性迴歸)—— python3 實現方案
阿新 • • 發佈:2018-12-18
import numpy as np class LR: def calcost(self, X, y, theta, lamb=1): ''' 平方誤差代價函式,使用L2正則化 :param X: 特徵集 m*n,m為樣本數,n為特徵數 :param y: 標籤集,m*1 :param theta: 引數 1*(n+1) :param lamb: 正則化係數 :return: 誤差 ''' X.insert(0, 'Ones', 1) inner = np.power((X.dot(theta.T) - y), 2) reg = lamb / (2 * len(X)) * np.sum(np.power(theta[:, 1:], 2)) return np.sum(inner) / (2 * len(X)) + reg def LR_training(self, X, y, learning_rate=1.0, lamb=1, steps=10000): ''' 輸入資料集,使用梯度下降演算法,訓練線性迴歸模型。 :param X: 同上 :param y: 同上 :param learning_rate: 學習率 :param lamb: 正則化係數 :param steps: 訓練步數 :return: 訓練好的模型,引數theta的值列表 ''' X.insert(0, 'Ones', 1) theta = np.zeros(X.shape[1]) for _ in range(steps): error = X.dot(theta.T) - y # 誤差 grad = error.T.dot(X) / len(X) + lamb / len(X) * theta # 計算梯度 grad[0] = np.sum(error) / len(X) # 還原theta0,使不參與正則化更新 theta = theta - learning_rate * grad return theta