1. 程式人生 > >【機器學習】LR(線性迴歸)—— python3 實現方案

【機器學習】LR(線性迴歸)—— python3 實現方案

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